Добрый день. Честно говоря я совершенно не понял что ожидаете получить. Вижу скришоты, но по ним догадаться о тексте программы - не получается.
Принято описывать подобное в виде:
- делаю (детальное, достаточное чтобы точно воспроизвести конфигурацию описание)
- Ожидание - в результате при (условия) должно быть (описание) а если условия не выполняются - то (описание)
- фактически: логи, отладочный вывод.
Команды откуда куда? Что такое “не проходят”?
rulescondishion1(рабочий).js (1.8 КБ)
Добрый день, продолжая тему скажу так ушел с нр не удобно, создал правило для управления сплитом, таких сплитов будет 287, соответственно и правил столько же, как реализовать вкл/выкл правил в дашборде
Добрый день. Сам использую такой подход к большому количеству правил, генерация правил функцией: Подключение термоэлектрических сервоприводов к WBIO-DO-SSR-8 или WBIO-DO-HS-8 - #6 от пользователя BrainRoot
Это гораздо проще и уменьшает вероятность ошибки.
Ну и управление возможно двумя способами: Именно отключение выполнения правила так: GitHub - wirenboard/wb-rules: Rule engine for Wiren Board
Или само правило не отключать но добавить в нем, уже внутри, проверку “разрешающего” флага.
Я предпочитаю первый способ, для его использования достаточно использовать неанонимные правила.
спасибо попробую
Не получится - дайте пример для воспроизведения, подскажу.
если честно мне очень тяжко все дается, я в програмировании полный ноль🤦♂️свое правило писал 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?