Не получится - дайте пример для воспроизведения, подскажу.
если честно мне очень тяжко все дается, я в програмировании полный ноль🤦♂️свое правило писал 2 недели😅, я инфу беру именно с гитхаба, но не как не могу понять как мне в мое готовое правило вставить функцию отключения правил. Как реализовать временные параметры вроде догадываюсь, но нужно пробывать, нужно что бы сплиты работали в период между отопительными сезонами и по времени с 7:45 до 20:00, остальное время не работали
и еще если не сложно направте меня, в последнем блоке «else» нужно сделать что если окно открыто, то подается сигнал ик, а реле питания сплитом не выключается минуту, после минуты проверяет состояние окна и если оно открыто рубит реле, а если окно закрыли то включат сплит обратно по ик, просто есть умники и могут открыть окно и с телефона по ик включить сплит, поэтому их нужно обхитрить😅
вот мои правила
Несколько решений, как обычно. Можно посмотреть на пример: Примеры правил — Wiren Board
Можно отсюда взять “шедулер”: Помогите пожалуйста с подбором и настройкой оборудования для теплиц - #347 от пользователя BrainRoot
Так… Вот тут как раз пример алгоритма.
Есть “состояние” датчика окна. При его изменении (срабатывает правило) отправляется ИК команда. Я бы просто запускал таймер при открытом окне, который бы “выключал” кондиционер.
И прочитайте вот это: Написание скриптов для начинающих — Wiren Board
спасибо, дали пищу для обмозгования, пропаду на неделю походу:sweat_smile:
подскажите а время он с вб берет?
почему-то правило сработало, хотя было уже чуть позже на пару минут
rulescondishion2(рабочий).js (3.4 КБ)
если не трудно не могли бы вы проверить правильность написания правила, вроде все хотелки учел
var isConditionOn = false;
defineRule(“Temperature”,
{
whenChanged: [“wb-msw-v3_115/Temperature”, “wb-gpio/A1_IN”], // топик, при изменении которого сработает правило
then: function (newValue, devName, cellName) {
//log("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue) // вывод сообщения в лог
var tempr = dev["wb-msw-v3_115"]["Temperature"];
var isOpen = dev["wb-gpio"]["A1_IN"];
var date = new Date();
var date_start = new Date(date);
date_start.setHours(7);
date_start.setMinutes(45);
var date_end = new Date(date);
date_end.setHours(21);
date_end.setMinutes(59);
if ((date > date_start) && (date < date_end)) {
if(isOpen == 1)
{
if(tempr >= 27)
{
if(!isConditionOn)
{
dev["wb-mdm3_11"]["K1"] = true;
setTimeout(function (){
dev["wb-msw-v3_115"]["Play from ROM1"] = true;
},3000);
dev["wb-msw-v3_115"]["Red LED"] = true;
log("tempr >= 25, включили");
isConditionOn = true;
}
}
else
{
if(tempr <= 24)
{
if(isConditionOn)
{
dev["wb-msw-v3_115"]["Play from ROM2"] = true;
setTimeout(function (){
dev["wb-mdm3_11"]["K1"] = false;
},3000);
dev["wb-msw-v3_115"]["Red LED"] = false;
log("tempr <= 24, выключили");
isConditionOn = false;
}
}
}
}
else
{
if(isOpen == 0)
{
if(isConditionOn)
{
dev["wb-msw-v3_115"]["Play from ROM2"] = true;
isConditionOn=false;
setTimeout(function (){
if (!isConditionOn)
{
dev["wb-mdm3_11"]["K1"] = false;
},10000;
log("таймер выключил питание");
}
}
else
{
log("таймер не выключил питание");
}
}
else
{
if(!isConditionOn)
{
dev["wb-msw-v3_115"]["Play from ROM2"] = true;
dev["wb-mdm3_11"]["K1"] = true;
log("Окно Закрыто");
isConditionOn = true;
}
}
}
}
}
});
Не очень понятно, зачем
var tempr = dev["wb-msw-v3_115"]["Temperature"];
когда именно это значение уже передано в функцию как newValue?
то есть вместо tempr уже можно использовать newValue
Ну и каждый раз при выполнении правила переопределять
var date_start и date_end - лишнее, они же не меняются и их можно вынести за правило.
Добрый день
1 Я так сделал потому что состояние newValue есть и у температуры, у датчика открытия окна и у реле, да и ради пробы использования var
2 То есть мне «var date_start и date_end » нужно переместить перед then или перед whenChanged?
это строка написана в этом месте так же как и в примере на гитхабе
Откуда в if появился дополнительный параметр “9000”?
Но это ж пример… Да, там можно и даже работать будет, но зачем переопределять объект если его можно (коме текущего дататайма) считать константой.
ну помогите пожалуйста написать этот блок, нужно реализовать:
если окно открыто подается ик сигнал на выключение сплита и запускается таймер который в течении 2-3 минут смотрит за окном и если оно в это время закрылось, то идет ик сигнал на включение, а если продолжает быть открытым то выключается реле
Кода (кусок под правку) выложите пожалуйста.
вот, это условие если открылось окно