Расскажите, пожалуйста, поподробнее.
Ну во-первых я не согласен что мой случай описан по ссылке. Если бы это было так, правило не должно срабатывать вообще. (у меня куча правил ссылается или изменяет статус девайсов объявленных в других файлах. это же касается и реальных устройств, разве нет?)
Расскажите, пожалуйста, поподробнее.
А свитч будет отрабатывать (включая лог) как положено.
Стоит ли ждать исправления и если да то когда?
Работало правильно в 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.
Спасибо за баг-репорт. Проблему локализовали, в ближайшее время подготовим исправление, отпишемся о релизе.
Можно хотя бы примерно сориентировать в сроках? (день, неделя, месяц…)
Есть ли шанс что и этот баг будет исправлен? Странные значения в топиках виртуального устройства
Вышли новые релизы системы правил.
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(":", "")
Хм, странно:
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 кавычки, что на букве ё”