Перестало работать правило, ошибка can't convert control

Есть простое правило для кнопки переключателя

var table = "wb-mr6cv3_142/K2";
defineRule("live_room_table", {
  when: function () {
    return dev["wb-gpio/EXT1_IN13"];
  },
  then: function (newValue, devName, cellName) {
    dev[table] = !dev[table]
  }
})

В логах такая ошибка

ERROR: control wb-mr6cv3_142/K2 SetValue() error: can't convert control value 'true' (type bool) to datatype '0'

И второе правило

var bra = "wb-mr6cv3_155/K6";
defineRule("live_room_bra", {
  when: function () {
    return dev["wb-gpio/EXT1_IN14"];
  },
  then: function (newValue, devName, cellName) {
    dev[bra] = !dev[bra]
  }
})

Ошибка в jouran ERROR: [rule error] failed to SetValue for unexisting control wb-mr6cv3_155/K6: true

после изменение рабочего правила (которые до сохранения работало) так же отвалилось



function makeSwitcher(name, control_switcher, relay_control) {
  var motion_timer_id = null;
  defineRule(name, {
      when: function(){
        return dev[control_switcher];
      },
      then: function(newValue, devName, cellName) {
         log("push "+ control_switcher);
         dev[relay_control] = !dev[relay_control]
      }
  });
}


makeSwitcher("outside_bra", "wb-gpio/EXT2_IN1", out_bra);

Ошибка та же ERROR: [rule error] failed to SetValue for unexisting control wb-mr6c_187/K3: true

defineRule("tmp", {
    when: function(){
      return dev["wb-gpio/EXT1_IN10"];
    },
    then: function(newValue, devName, cellName) {
       dev["wb-mr6cv3_155"]["K6"] = !dev["wb-mr6cv3_155"]["K6"]
    }
});

Аналогично
ERROR: control wb-mr6cv3_155/K6 SetValue() error: can't convert control value 'true' (type bool) to datatype '0'

У меня аналогичная проблема, появилось после последнего обновления.

2 Likes

Аналогично

1 Like

Это stable или тестинг? Какая версия wb-rules?

Это stable

Версия wb-rules?

Ну и после строчки

var bra = "wb-mr6cv3_155/K6";

Добавьте

log.info("value=", dev[bra], "type=", typeof(dev[bra]) );

и покажите вывод.

var bra ="wb-mr6cv3_155/K6";
var table = "wb-mr6cv3_142/K2";
var out_bra = "wb-mr6c_187/K3";
var out_main = "wb-mr6c_187/K1";


function makeSwitcher(name, control_switcher, relay_control) {
  defineRule(name, {
      when: function(){
        return dev[control_switcher];
      },
      then: function(newValue, devName, cellName) {
         log("push "+ control_switcher);
         log.info("value(dev[",relay_control,"]=", dev[relay_control], "type=", typeof(dev[relay_control]) );
         dev[relay_control] = !dev[relay_control]
      }
  });
}


makeSwitcher("outside_bra", "wb-gpio/EXT2_IN1", out_bra);
makeSwitcher("bra", "wb-gpio/EXT1_IN10", bra);
makeSwitcher("live_room_table", "wb-gpio/EXT1_IN13", table);
makeSwitcher("live_room_bra", "wb-gpio/EXT1_IN14", bra);
Jun 15 09:50:41 wirenboard wb-rules[3051]: INFO: [rule info] push wb-gpio/EXT1_IN14
Jun 15 09:50:41 wirenboard wb-rules[3051]: INFO: [rule info] value(dev[ wb-mr6cv3_155/K6 ]= null type= object
Jun 15 09:50:41 wirenboard wb-rules[3051]: ERROR: control wb-mr6cv3_155/K6 SetValue() error: can't convert control value 'true' (type bool) to datatype '0'
Jun 15 09:50:47 wirenboard wb-rules[3051]: INFO: [rule info] push wb-gpio/EXT1_IN13
Jun 15 09:50:47 wirenboard wb-rules[3051]: INFO: [rule info] value(dev[ wb-mr6cv3_142/K2 ]= null type= object
Jun 15 09:50:47 wirenboard wb-rules[3051]: ERROR: control wb-mr6cv3_142/K2 SetValue() error: can't convert control value 'true' (type bool) to datatype '0'

Версия:

apt policy wb-rules

wb-rules:
  Installed: 2.20.10

Команда

mosquitto_sub -t "/devices/wb-mr6cv3_155/controls/K6" -v
/devices/wb-mr6cv3_155/controls/K6 0

Можно и включить

mosquitto_pub -t “/devices/wb-mr6cv3_155/controls/K6/on” -m 1

Обратите внимание.

Если описываю существующее устройство, например так:

var bra ="wb-gpio/A1_OUT";
log.info("value1(dev[",bra,"]=", dev[bra], "type=", typeof(dev[bra]) );

То получаю ожидаемое в лог:

2024-06-17 15:58:23value1(dev[ wb-gpio/A1_OUT ]= false type= boolean

Я так понимаю вы намекайте, что устройства var bra ="wb-mr6cv3_155/K6" не существует?
Но

  1. Правило работало раньше.
  2. Командой mosquitto_sub -t "/devices/wb-mr6cv3_155/controls/K6" -v я могу включить устройство
  3. Что бы не совершить ошибку, копирую устройства из ui

Как видно из сообщений, я не один такой

Тем не менее - проверьте именно отдельным скриптом, как показывал, наличие устройства.
Ну и заодно какой-то из стандартных контролов, тот же “wb-gpio/A1_OUT”

Аналогично, ЛОГ закраснел после сегодняшнего обновления на
wb-rules:
Installed: 2.20.8

21-06-2024 17:03:48.120 [wb-rules] ERROR: control wb-gpio/EXT4_R3A5 SetValue() error: can’t convert control value ‘false’ (type bool) to datatype ‘0’
21-06-2024 17:03:48.112 [wb-rules] ERROR: control wb-gpio/EXT3_R3A6 SetValue() error: can’t convert control value ‘false’ (type bool) to datatype ‘0’
1 Like
var bra ="wb-gpio/A1_OUT";
log.info("value1(dev[",bra,"]=", dev[bra], "type=", typeof(dev[bra]) );

var bra ="wb-mr6cv3_155/K6"
log.info("value1(dev[",bra,"]=", dev[bra], "type=", typeof(dev[bra]) );

Это пустой файл

Обратите внимание, нету.
Покажите пожалуйста вывод подписки на топик “devices/wb-mr6cv3_155/controls/K6”