Спасибо за помощь, вот в итоге правило терморегулятора с сервоприводом NO и датчиком w-1.
Работает, если что то есть смысл откорректировать то напишите.
// Термоголовка сервопривод 1 NO
defineVirtualDevice ("ARA1", { //Виртуальное устройство терморегулятор
title:"radiator actuator NO 1",
cells: {
"set_temp": { //Температурная настройка
type:"range",
value: 22,
max: 32,
min: 18,
order: 3,
},
"On": {
type:"switch", //Вкл/Выкл устройства
order: 1,
value: false,
},
"current_temp": { //Реальная температура
type:"temperature",
value: 0,
max: 50,
order: 2,
},
"gisteresis": { //Гистерезис
type:"range",
value: 1,
max: 2,
min: 0,
order: 4,
}
}
});
defineRule ("auto_radiator_actuator_1_auto_enable", { // Правило работы для виртуального устройства от сигнала датчика w-1
whenChanged: "wb-w1/28-00000d2a3003", // Когда изменились показания датчика
then: function (newValue, devName, cellName) {
log("rule executed; " + newValue + " " + typeof(newValue) );
dev["ARA1"]["current_temp"] = newValue; // обновляем значение текущей температуры в окошке
if (newValue<(dev["ARA1"]["set_temp"]-dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение датчика меньше установки минус гестерезис и "On" установлено
log("enable");
dev["wb-gpio"]["EXT1_K1"] = false; // Выключаем питание на термоголовке NO (открыли приток теплоносителя температура растет к цели)
}
if (newValue>(dev["ARA1"]["set_temp"]+dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение датчика больше установки плюс гестерезис и "On" установлено
log("disable");
dev["wb-gpio"]["EXT1_K1"] = true; // Включаем питание на термоголовке NO (закрыли приток теплоносителя температура падает к цели)
}
}
});
defineRule( "auto_radiator_actuator-1_manual_on", { // Правило работы для виртуального устройства при положении кнопки "On"
whenChanged: ["ARA1/On"],
then: function (newValue, devName, cellName) {
if (newValue==false) { //Если переключатель в положении Off
dev["wb-gpio"]["EXT1_K1"] = false; // Выключаем питание на термоголовке NO (открыли приток теплоносителя)
}
if (newValue==true) { //Если переключатель в положении On
if (dev["wb-w1"]["28-00000d2a3003"]<(dev["ARA1"]["set_temp"]-dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение датчика меньше установки минус гестерезис и "On" установлено
log("enable");
dev["wb-gpio"]["EXT1_K1"] = false; // Выключаем питание на термоголовке NO (открыли приток теплоносителя температура растет к цели)
}
if (dev["wb-w1"]["28-00000d2a3003"]>(dev["ARA1"]["set_temp"]+dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение датчика больше установки плюс гестерезис и "On" установлено
log("disable");
dev["wb-gpio"]["EXT1_K1"] = true; // Включаем питание на термоголовке NO (закрыли приток теплоносителя температура падает к цели)
}
}
}
});
defineRule( "set_temp_set_radiator_actuator_1", { // Правило работы для виртуального устройства при изменении установки (set_temp)
whenChanged: ["ARA1/set_temp"],
then: function (newValue, devName, cellName) {
if (newValue>(dev["wb-w1"]["28-00000d2a3003"]+dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение установки больше датчика плюс гестерезиса и "On" установлено
log("enable");
dev["wb-gpio"]["EXT1_K1"] = false; // Выключаем питание на термоголовке NO (открыли приток теплоносителя температура растет к цели)
}
if (newValue<(dev["wb-w1"]["28-00000d2a3003"]-dev["ARA1"]["gisteresis"])&&(dev["ARA1"]["On"]==true)) { // Если значение установки меньше датчика минус гестерезиса и "On" установлено
log("disable");
dev["wb-gpio"]["EXT1_K1"] = true; // Включаем питание на термоголовке NO (закрыли приток теплоносителя температура падает к цели)
}
}
});