Переписал скрипт и отладил. В итоге получилось так
defineVirtualDevice('Vent', {
title: 'Вентустановка',
cells: {
mode: {//режим 0-ручной 1-автомат
title: 'Режим АВТ',
type: 'switch',
value: false,
},
settemp: {//уставка
title: 'Уставка температуры',
type: 'range',
value: 25,
min: 0,
max: 40
},
sethim: {//уставка
title: 'Уставка влажности',
type: 'range',
value: 60,
min: 0,
max: 80
},
controltemp: {
title: 'Температура',
type: 'value',
units: 'deg C',
value: 0
},
controlhim: {
title: 'Влажность',
type: 'value',
units: '%',
value: 0
},
hysttemp: {
title: 'Гистерезис температуры',
type: 'range',
value: 0.5,
min: 0,
max: 5
},
hysthim: {
title: 'Гистерезис влажности',
type: 'range',
value: 0.5,
min: 0,
max: 5
},
},
});
defineRule('gettemp', { //правило - взять значения температуры
whenChanged: 'wb-mai6_55/IN 6 P Value', //тип правила (при изменении значения с датчика температуры, отобразить его в контроле, отобразить в логе)
then: function (newValue, devName, cellName) {
dev['Vent/controltemp'] = newValue;
log('Изменилось значение температуры с датчика = {}', newValue);
},
});
defineRule('gethim', { //правило - взять значения влажности
whenChanged: 'wb-mai6_55/IN 6 N Value', //тип правила (при изменении значения с датчика ВЛАЖНОСТИ, отобразить его в контроле, отобразить в логе)
then: function (newValue, devName, cellName) {
dev['Vent/controlhim'] = newValue;
log('Изменилось значение влажности с датчика = {}', newValue);
},
});
defineRule('rulevent', { //правило вентилятора
whenChanged: ['wb-mai6_55/IN 6 P Value','wb-mai6_55/IN 6 N Value'], //тип правила (при изменении значения с датчика температуры, отобразить его в контроле, отобразить в логе)
then: function () {
if (dev['Vent/mode'] == true) { //Если включен АВТ режим
if ((dev['Vent/controlhim'] >= dev['Vent/sethim'] + dev['Vent/hysthim']) || (dev['Vent/controltemp'] >= dev['Vent/settemp'] + dev['Vent/hysttemp'])) { //если температура или влажность датчика больше уставки + гистерезис
dev["wb-modbus-1-0/START"] = true; //включить частотник
dev['wb-modbus-1-0/SETPOINT'] = 500; //задать частоту 50Гц
dev['wb-dac/EXT3_O5'] = 10000; //открыть возд клапан (жалюзи) на 100%
dev['wb-gpio/EXT2_K5'] = false; //выключил увлажнитель
dev['wb-gpio/EXT2_K6'] = false; //выключил обогрев
}
if ((dev['Vent/controlhim'] < dev['Vent/sethim'] - dev['Vent/hysthim']) && (dev['Vent/controltemp'] < dev['Vent/settemp'] - dev['Vent/hysttemp'])) { //если температура и влажность датчика меньше уставки - гистерезис
dev['wb-modbus-1-0/START'] = false; //выключить частотник
dev['wb-modbus-1-0/SETPOINT'] = 200; //задать частоту 200Гц (по умолчанию будет записана для случая включения вручную)
dev['wb-dac/EXT3_O5'] = 0; //закрыть возд клапан (жалюзи)
}
}else { // Если режим РУЧ.
dev['wb-modbus-1-0/SETPOINT'] = 200; // Задать частоту 0Гц (по умолчанию будет записана для случая включения вручную)
}
}, //закр функ
}); //закр правило