@borg спасибо! Будем исправлять.
Добрый день.
Не получается воспроизвести проблему на 2.3.3 (в ветке 1.7 эта проблема действительно присутствует) - сообщение в логе появляется wb-rules не падает.
Могли бы вы предоставить дополнительную инфомацию:
- вывод
apt policy wb-rules
- выполнить
service wb-rules stop ; /usr/bin/wb-rules -editdir /etc/wb-rules /usr/share/wb-rules-system/rules/ /etc/wb-rules /usr/share/wb-rules/
добиться креша и прикрепить сюда вывод из терминала (желательно отдельным файлом) - если для воспроизведения в этих условиях потребуется изменить код скрипта - приложите его сюда в новом виде
У меня тоже не воспроизвелось:
root@wirenboard-AQZBLNTY:/mnt/data/root# dpkg -s wb-rules | grep Version
Version: 2.2.2
Вот вы все будете удивлены, но у меня тоже все заработало. может помогла неоднократная перезагрузка устройства. Сорри за беспокойство.
Но есть еще один вопрос - по изменению состояний девайсов (диммеры) записываю их значения в:
var globalLights = new PersistentStorage(“lights_storage”, {global: true}); // Глобальное хранилище значений диммеров в ПЗУ
таким образом: globalLights[key] = value;
После перезагрузки скрипта, читаю эти значения и соответственно восстанавливаю состояния диммеров: if (debugLog) log("[Lights] " + relay_name + relay_control + " = " + globalLights[relay_name + relay_control]);
Так вот, при перезагрузке скрипта, все работает идеально - все что было сохранено, также и восстанавливается. Но стоит перезагрузить контроллер (через reboot now либо кнопкой) то значения восстанавливаются совершенно иные, нежели были записаны в последний раз.
Отчего такое может происходить?
P.S. причем в соседнем скрипте я также вытаскиваю данные при загрузке и там все ок, там правдо ключи более простые K1, K2 и т.д., в отличии от этого хранилища где ключи текстовые до 20 символов. Также в первом (работающем) хранилище есть только boolean значения, то в неработающем есть как boolean так и integer.
UPD: Попробовал заменить хранилище, создал с новым идентификатором - все ровно тоже самое.
Не работают правила если определение устройства и правило его использующее находятся в разных файлах.
-
Файл test_rule.js:
defineRule(‘test_test’, {
whenChanged: ‘testControl/switch_control’,
then: function (newValue, devName, cellName) {
if (newValue) {
dev[‘testControl’][‘pers_text’] = “Test text”;
log(“text: {}”, dev[‘testControl’][‘pers_text’]);
} else {
dev[‘testControl’][‘pers_text’] = ‘’;
log(“text: {}”, dev[‘testControl’][‘pers_text’]);
}
}
}); -
Файл test_device.js:
defineVirtualDevice(‘testControl’, {
title: ‘Test’,
cells: {
pers_text: {
type: ‘text’,
value: ‘’
},
switch_control: {
type: ‘switch’,
value: false
}
}
});
mosquitto_sub -v -t “/devices/testControl/controls/”# | ts
May 31 18:48:28 /devices/testControl/controls/switch_control/on 1
May 31 18:48:28 /devices/testControl/controls/switch_control 1
May 31 18:48:28 /devices/testControl/controls/pers_text Test text
May 31 18:48:36 /devices/testControl/controls/switch_control/on 0
May 31 18:48:36 /devices/testControl/controls/switch_control 0
May 31 18:48:36 /devices/testControl/controls/pers_text (null)
May 31 18:48:41 /devices/testControl/controls/switch_control/on 1
May 31 18:48:41 /devices/testControl/controls/switch_control 1
May 31 18:48:41 /devices/testControl/controls/pers_text Test text
Лог при включении/выключении свича:
May 31 18:48:28 wirenboard-AHZ2TA3P daemon.info wb-rules[24319]: INFO: [rule info] text: null
May 31 18:48:36 wirenboard-AHZ2TA3P daemon.info wb-rules[24319]: INFO: [rule info] text: null
May 31 18:48:41 wirenboard-AHZ2TA3P daemon.info wb-rules[24319]: INFO: [rule info] text: null
То же самое при использовании dev[‘testControl’][‘pers_text’] в других правилах.
Ну там написано про глобальные переменные и функции.
И если так, то добавьте к моему примеру еще один свитч и вывод его в лог - удивитесь.
Расскажите, пожалуйста, поподробнее.
Ну во-первых я не согласен что мой случай описан по ссылке. Если бы это было так, правило не должно срабатывать вообще. (у меня куча правил ссылается или изменяет статус девайсов объявленных в других файлах. это же касается и реальных устройств, разве нет?)
Расскажите, пожалуйста, поподробнее.
А свитч будет отрабатывать (включая лог) как положено.
Стоит ли ждать исправления и если да то когда?
Работало правильно в 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