Управление сплит системой через ик WB-MSW V3 с помощью nodered




команды не проходят, а в выборе канала есть только запись, выбора воспроизведения нет

Добрый день. Честно говоря я совершенно не понял что ожидаете получить. Вижу скришоты, но по ним догадаться о тексте программы - не получается.
Принято описывать подобное в виде:

  • делаю (детальное, достаточное чтобы точно воспроизвести конфигурацию описание)
  • Ожидание - в результате при (условия) должно быть (описание) а если условия не выполняются - то (описание)
  • фактически: логи, отладочный вывод.

Команды откуда куда? Что такое “не проходят”?

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

:grin:спасибо, дали пищу для обмозгования, пропаду на неделю походу: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 :grin:

2 То есть мне «var date_start и date_end » нужно переместить перед then или перед whenChanged?



загрузил правило в вб пишет ошибку, подскажите что не так написал