Новая версия движка правил

Расскажите, пожалуйста, поподробнее.

Ну во-первых я не согласен что мой случай описан по ссылке. Если бы это было так, правило не должно срабатывать вообще. (у меня куча правил ссылается или изменяет статус девайсов объявленных в других файлах. это же касается и реальных устройств, разве нет?)

Расскажите, пожалуйста, поподробнее.

А свитч будет отрабатывать (включая лог) как положено.

Стоит ли ждать исправления и если да то когда?
Работало правильно в 1.7.

Всем привет.

Надеюсь задаю вопрос в правильной ветке, но полагаю здесь это более уместно.

При загрузке системы (после включения), все правила которые привязаны на отработку изменений нажатия (например) кнопок - запускаются со значением False.

Приведу пример:

Вот такое правило:
defineRule(name, {
whenChanged: “wb-gpio/” + switch_control,
then: function(newValue, devName, cellName) {
}
});

Отработает при загрузке системы со значение newValue = false.

Для себя это вижу как проблему, т.к. в процессе загрузки стартуют правила, которые должны обрабатывать нажатия кнопок и соответственно если был факт перезагрузки контроллера (питание отключали надолго и не справились UPSы) то при загрузке может включится свет, вентиляторы и еще много чего.

Баг или фича?

P.S. Версия wb-rules 2.3.3
P.P.S. Пришлось сделать заплатку, а именно флаг boolean initialized = false и после 10 секунд от начала работы скрипта записывать в него true и все события уже отрабатывать как только initialized = true.

Спасибо за баг-репорт. Проблему локализовали, в ближайшее время подготовим исправление, отпишемся о релизе.

1 лайк

Можно хотя бы примерно сориентировать в сроках? (день, неделя, месяц…)
Есть ли шанс что и этот баг будет исправлен? Странные значения в топиках виртуального устройства

Вышли новые релизы системы правил.

2.4.0 - Мета-топики

В версии 2.4.0 появился доступ к мета-информации каналов из правил. Теперь, например, можно написать правило, реагирующее на ошибку опроса какого-то канала.

Описание: https://github.com/wirenboard/wb-rules#доступ-топикам-meta

Установка:
apt update && apt install wb-rules

2.5.0 - API доступа к каналам устройств

В 2.5.0 появился интерфейс для просмотра и редактирования каналов устройств.
Теперь можно добавлять новые каналы в уже созданное виртуальное устройство.
Это может использоваться, например при реализации драйверов устройств и протоколов на wb-rules. В Wiren Board эту функциональность использует драйвер knx и zigbee.

Установка:

  • раскомментировать строчку в /etc/apt/sources.list.d/wb-unstable.list или добавить deb http://releases.contactless.ru/unstable/stretch stretch main
  • apt update && apt install wb-rules=2.5.0

Где можно посмотреть полный список изменений? Исправлены ошибки упомянутые выше?

В версии 2х правил наблюдаем следующее:

2020-07-08 15:16:16ECMAScript error: TypeError: invalid base value duk_hobject_props.c:2000
anon /etc/wb-rules/vehicle_common.js:224 preventsyield call native strict preventsyield

В 1.7х все работает
Строка правил:

dev["vehicle"]["DEVICE_ID"]       = dev["network"]["Wi-Fi MAC"].replace(/:/g, '');

А вот так:

replace(":", "")
1 лайк

А вот и нет.

Хм, странно:

var macaddr = "AA:bb:CC:DD:ee";
log.info(macaddr.replace(/:/g,""))

дает

2020-07-08 17:52:33AAbbCCDDee

При этом

dpkg -s wb-rules |grep Vers   
Version: 2.4.0

Меняет, но только первое вхождение, можно еще флаги сформировать - добавить третьим параметром, не проверял.

А какой тип у dev[“vehicle”][“DEVICE_ID”]? Покажите пожалуйста или определение вирутального девайса, или вывод из mosquitto_sub

DEVICE_ID: {
type: “Text”,
value: “00:00:00:00:00:00”,
forceDefault: true
},

Выведете в лог значение, котороое меняем:
вставьте

log.info("For replace ", dev["network"]["Wi-Fi MAC"]);

чтоб посмотреть что там есть.

2020-07-09 17:22:32For replace 18:bb:26:c5:ac:b0

А у вас версия wb-rules какая?

dpkg -s wb-rules |grep Vers   

Поставлю себе - воспроизведу.

Проблема при переходе на 2.4
На 1.7.1 вот это работает:
dev[“vehicle”][“DEVICE_ID”] = dev[“network”][“Wi-Fi MAC”].replace(/:/g, ‘’);
Нужен вариант, который работает везде.

ну для полноты картины кусочек из network.js

function _system_update_wifi_mac() {
//   runShellCommand('ifconfig wlan0 | grep ether | awk \'{print $2}\'',{
   runShellCommand('ip addr show wlan0 | grep \"link/ether\\b\" | awk \'{print $2}\' | cut -d/ -f1',{
      captureOutput: true,
      exitCallback: function (exitCode, capturedOutput) {
        dev.network["Wi-Fi MAC"] = capturedOutput;
      }
  });
};

Отредактировал, заключив код в “4 кавычки, что на букве ё”