Как правильно откатиться? Не нашел, наверно нужно в топе указать как оперативно восстановить после случайного апдейта полуфабриката.
Выполнил:
apt update
apt install wb-rules-system=1.6.3
После обратил внимание что девайс Buzzzer имеет определенные не активные поля. Switch можно включить, но вот выключить уже не удается. Сколько таких подснежников остается только гадать.
Какая версия у меня все таки стоит? ниже лог. Жирным выделил две команды которые нашел в разных частях ветки.
соответсвенно запускается процедура dimLight, по окончании которой wb-rules бесследно умирает.
Помогает только через shell: service wb-rules restart
Сейчас пробую откатиться на предыдущие версии и выяснить где еще работает.
UPD: Пришлось откатиться аж до 1.7.1, только там заработало все как было раньше.
Могу предоставить код и конфигурацию системы для анализа.
P.S. Для того чтобы проверить список доступных версий пакета в терминале выполняем:
apt-get update
apt-cache policy wb-rules
Покажет все вресии пакета, выбираем нужную и командой apt install wb-rules=[нужная версия пакета] (например apt install wb-rules=2.2.0) устанавливаем пакет.
обновился на новую версию 20200217 - перестали работать все скрипты((
dpkg -s wb-rules Version: 2.3.1, какой был - не знаю.
в логе пусто, ошибок нет.
пример скрипта:
// Включение / выключение правила выключателем на панели Devices
// Создаём виртуальное устройство - выключатель
defineVirtualDevice("upravl_obogrev", {
title: "Upravl obogrev",
cells: {
enabled: {
type: "switch",
value: false
},
}
});
defineRule("heater_control", { //название правила - "контроль обогревателя"
whenChanged: "wb-msw-v3_21/Temperature", //при изменении состояния датчика wb-msw-v3_21
then: function(newValue, devName, cellName) { //выполняй следующие действия
if (dev.upravl_obogrev.enabled) { // если вируальн. устр-во simple_test в положении enabled
if ( newValue < 18) { //если температура датчика меньше xx градусов
dev["wb-mr3_15"]["K1"] = 1; //установи K1 модуля wb-mr3 с адресом 15 в состояние "включено"
} else { // иначе
if ( newValue > 19) { //если температура датчика больше xx градусов
dev["wb-mr3_15"]["K1"] = 0; //установи K1 модуля wb-mr3 с адресом 15 в состояние "выключено"
}
}
}
}
});
Обновились до версии 2.3.3. Устройства на шине не срабатывали, т.е., например, правило указывает включить реле, правило работает, реле не включается.
Глубоко не разбирались.
Откат до версии 1.7.1 исправил положение.
Если обратится к массиву глобальных значений, к ключу который еще не был проинициализирован, то wb-rules упадет, пример кода:
var globalLights = new PersistentStorage("lights_storage", {global: true}); // Глобальное хранилище значений диммеров в ПЗУ
if (globalLights["123"] === undefined) {
log("Этот комментарий не появится, а wb-rules упадет, пока ключ 123 Не будет проинициализирован");
}