Всем здравствуйте!! Помогите пожалуйста написать правильно скрипт. Логика такая есть теплый пол он включается ы выключается по датчику температуры регулируется через виртуальный ползунок. Так же есть виртуальная кнопка когда на ней единица, все должно работать от датчика температуры, когда ноль все должно быть выключено и на датчик температуры реакции не должно быть. Вообщем кнопка должна разрешать работать ТП от датчика температуры или нет.
И да, я наверно ошибся - предположил что если [“Tp1”][“Zima1”]=1 то пол надо отключать.
Оно не прокомментировано. Надеюсь, сам принцип понятен?
Условие будет выполняться только если ОБЕ его части истина (&& - логическое И)
Если dev[“Tp1”][“Zima1”] установлено - будет срабатывать. Нет - не будет. Но! Надо написать еще одно правило, по которому пол будет отключаться при установке [“Tp1”][“Zima1”]
Потому что если пол включен и в этот момент в установится dev[“Tp1”][“Zima1”] - он не отключится никогда.
Вот так например:
defineRule(“ZimaON”, {
whenChanged: “Tp1/Zima1”,
then: function (newValue, devName, cellName) {
if (newValue>0){ //Если оно, значение СТАЛО “1”
dev[“wb-gpio/EXT1_HS5”] = 0; //Отключим теплый пол
// Ну и остальное что по “Зима” должно отключаться.
}
});
Спасибо подправил как вы написали.Только работает не совсем так как хотелось бы. Отключение теплого пола происходит от датчика и кнопки. А мне бы хотелось чтобы по датчику температуры включалось и выключалось А если нажата кнопка то теплый пол постоянно находится в выключенном состоянии.
defineVirtualDevice(“Tp1”, {
title:“Регулятор температуры Пола в прихожей”,
cells: {
“temperature”: {
type:“range”,
value: 25,
max: 55
},“Zima1”: {
type:“switch”,
value: 0,
}
}
});
defineRule(“Tpf1”, {
whenChanged: “wb-w1/28-00000b785146”,
then: function (newValue, devName, cellName) {
if ((newValue>dev[“Tp1/temperature”])&&(dev[“Tp1”][“Zima1”]>0)) {
dev[“wb-gpio/EXT1_HS5”] = 0;log(“Выключение обогревателя
ТП1”);
} else
dev[“wb-gpio”][“EXT1_HS5”] = 1;log(“Включение обогревателя ТП1”);
}
});
defineRule(“ZimaON”, {
whenChanged: “Tp1/Zima1”,
then: function (newValue, devName, cellName) {
if (newValue>0) {
dev[“wb-gpio/EXT1_HS5”] = 0;
}
}
});
И есть еще один скрипт прошу помощи не могу понять как это сделать. Вообщем ситуация такая,есть кнопка для управления вентилятором (вентилятор с регулировкой оборотов-работает через аналоговый выход 0-10v) она его включает при первом нажатии на 100% при втором на 50% и при третьем выключает это реализовать удалось. Также вентилятор должен работать от датчика влажности при превышении порога включается на 50% и по истечении какого то времени включается на 100% .Выключается при снижении порога и сбрасывает таймер .Если произошло включение по кнопке сценарий с датчиком работать не должен.Сейчас работает по другому(от датчика влажности вкл на 50% потом по времени на 100% сбрасывает сброс таймера и все по новой) помогите подкорректировать.
Так. Определимся с условиями. Теплый пол должен включаться:
Если температура датчика меньше уставкиИ кнопка “Зима” нажата? Верно?
То есть если выполняется условие.
defineRule(“Tpf1”, {
whenChanged: “wb-w1/28-00000b785146”, //Когда изменились показания датчика
then: function (newValue, devName, cellName) {
if ((newValue<dev[“Tp1/temperature”])&&(dev[“Tp1”][“Zima1”]>0)) { // Если значение датчика МЕНЬШЕ уставки И "Зима" установлено
dev[“wb-gpio/EXT1_HS5”] = 1;log(“Включение обогревателя
ТП1”);
} else
dev[“wb-gpio”][“EXT1_HS5”] = 0;log(“Выключение обогревателя ТП1”);
}
});
defineRule(“ZimaON”, { //Сразу же выключает теплый пол при сбросе кнопки "Зима"
whenChanged: “Tp1/Zima1”,
then: function (newValue, devName, cellName) {
if (newValue==0) {
dev[“wb-gpio/EXT1_HS5”] = 0;
}
}
});
Поменял на МЕНЬШЕ тут if ((newValue<dev[“Tp1/temperature”])&&(dev[“Tp1”][“Zima1”]>0))
И на “==” тут if (newValue==0) {