Падает serial при работе скрипта


#1

Давно не занимался скриптами на WB, но тут решил кое-что переделать. Ну и столкнулся с довольно странным поведением serial… Чтобы не писать много слов, лучше приведу несколько примеров скриптов (сильно упрощенных для отладки), на которых как раз видно все это. Нажимается виртуальная кнопка, по которой отрабатываются простые действия. Брались два условия и два устройства в разной комбинации. Итак:

  1. отрабатывается нормально
defineRule("Door_button_open", {
  whenChanged: ["Door_open/Open"],
  then: function () {
          if ( dev["517F_4/DI_10"] = 1) {
//          if ( dev["WP8026_6/DI_01"] == 0) {
//            dev["517F_4/DO_04"] = 1;             
            dev["wb-gpio/EXT3_HS5_Gong"] = 1;
          }
 }
});
  1. отрабатывается нормально
defineRule("Door_button_open", {
  whenChanged: ["Door_open/Open"],
  then: function () {
//          if ( dev["517F_4/DI_10"] = 1) {
          if ( dev["WP8026_6/DI_01"] == 0) {
            dev["517F_4/DO_04"] = 1;             
//            dev["wb-gpio/EXT3_HS5_Gong"] = 1;
          }
 }
});
  1. не отрабатывает и вешает serial
defineRule("Door_button_open", {
  whenChanged: ["Door_open/Open"],
  then: function () {
          if ( dev["517F_4/DI_10"] = 1) {
//          if ( dev["WP8026_6/DI_01"] == 0) {
            dev["517F_4/DO_04"] = 1;             
//            dev["wb-gpio/EXT3_HS5_Gong"] = 1;
          }
 }
});

то есть, когда в одном блоке скрипта сталкиваются два значения с одного modbus устройства (в данном случае 518F) - serial отваливается напрочь… как выше видно - по одному работает…

вообще это очень и очень странно, даже если бы и были какие-то ошибки в скрипте (в данном случае трудно ошибиться) - по идее не должны приводить к краху опроса оборудования через serial


#2

Здесь вы записываете 1 в 517F_4/DI_10. Не сравниваете с единицей. При попытке записи в канал предназначенный только для чтения wb-mqtt-serial падает в шоке.


#3

Спасибо! Помогло. Уже позабыл специфику JS на WB, последнее время скрипты на ioBroker делаю… а тут решил сделать небольшую отказоустойчивость управления замком с параллельным выполнением на WB и iob…


#4

Да не за что. Только это не “специфика JS на WB”, это просто специфика JS. И многих других языков программирования.


#5

Именно специфика. Например в iob тоже JS, и там подобное правило выглядит

        if (getState("modbus.4.discreteInputs.10011_door").val === true) {
           setState("modbus.4.coils.5_zamok", false);
        }   

что несколько более громоздко, чем в WB, но более наглядно и удобно - видно какую операцию делаешь с переменной


#6

Я имел в виду именно использование двойного равно для проверки равенства.


Яндекс.Метрика