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('ruleventtemp', { //правило для температуры whenChanged: 'wb-mai6_55/IN 6 P Value', //тип правила (при изменении значения с датчика температуры, отобразить его в контроле, отобразить в логе) then: function (newValue, devName, cellName) { dev['Vent/controltemp'] = newValue; log('Изменилось значение температуры с датчика = {}', newValue); }, whenChanged: ['Vent/controltemp', 'Vent/settemp', 'Vent/mode', 'Vent/hysttemp'], //тип правила (при изменении значения от датчика, уставки, режима работы, запускаем алгоритм включения/отключения вентилятора) then: function () { //при изменении есть функция log('Изменилось значение Vent/controltemp, Vent/settemp, Vent/mode, Vent/hysttemp'); if (dev['Vent/mode'] == true) { if ( dev['Vent/controltemp'] > dev['Vent/settemp'] + dev['Vent/hysttemp']) { //если температура датчика ,больше уставки + гистерезис dev["wb-modbus-1-0/START"] = true; dev['wb-modbus-1-0/SETPOINT'] = 500; dev['wb-dac/EXT3_O5'] = 10000; } if (dev['Vent/controltemp'] < dev['Vent/settemp'] - dev['Vent/hysttemp']) { //если температура датчика меньше уставки - гистерезис dev['wb-modbus-1-0/START'] = false; dev['wb-modbus-1-0/SETPOINT'] = 200; dev['wb-dac/EXT3_O5'] = 0; } } else dev['wb-modbus-1-0/START'] = false; dev['wb-modbus-1-0/SETPOINT'] = 200; dev['wb-dac/EXT3_O5'] = 0; } }); defineRule('ruleventhim', { //правило для влажности whenChanged: 'wb-mai6_55/IN 6 N Value', //тип правила (при изменении значения с датчика ВЛАЖНОСТИ, отобразить его в контроле, отобразить в логе) then: function (newValue, devName, cellName) { dev['Vent/controlhim'] = newValue; log('Изменилось значение температуры с датчика = {}', newValue); }, whenChanged: ['Vent/controlhim', 'Vent/sethim', 'Vent/mode', 'Vent/hystvent'], //тип правила (при изменении значения от датчика, уставки, режима работы, запускаем алгоритм включения/отключения вентилятора) then: function () { //при изменении есть функция log('Изменилось значение Vent/controlhim, Vent/sethim, Vent/mode, Vent/hysthim'); if (dev['Vent/mode'] == true) { if ( dev['Vent/controlhim'] > dev['Vent/sethim'] + dev['Vent/hysthim']) { //если влажность с датчика больше уставки + гистерезис dev['wb-modbus-1-0/START'] = true; dev['wb-modbus-1-0/SETPOINT'] = 300; dev['wb-dac/EXT3_O5'] = 10000; } if (dev['Vent/controlhim'] < dev['Vent/sethim'] - dev['Vent/hysthim']) { //если влажность с датчика меньше уставки - гистерезис dev['wb-modbus-1-0/START'] = false; dev['wb-modbus-1-0/SETPOINT'] = 200; dev['wb-dac/EXT3_O5'] = 0; } } else dev['wb-modbus-1-0/START'] = false; dev['wb-modbus-1-0/SETPOINT'] = 200; dev['wb-dac/EXT3_O5'] = 0; } });