Столкнулся с проблемой. После перезагрузки (нестабильно) правила перестают работать.
Пробовал удалять все скрипты и загружать самый простой из примеров - не помогло. service wb-rules restart не помогает
root@wirenboard-ANMSNLVK:/etc/wb-rules# cat /var/log/messages | grep wb-rules | tail
Oct 15 14:00:08 wirenboard-ANMSNLVK daemon.info wb-rules[1861]: INFO: [rule info]
Oct 15 14:00:08 wirenboard-ANMSNLVK daemon.info wb-rules[1861]: INFO: MQTT connection established
Oct 15 14:00:08 wirenboard-ANMSNLVK daemon.info wb-rules[1861]: ERROR: command '/bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export' failed with exit status 1
Oct 15 14:27:51 wirenboard-ANMSNLVK daemon.info wb-rules[1861]: INFO: reloading file: /etc/wb-rules/MyRules.js
Oct 15 14:31:57 wirenboard-ANMSNLVK daemon.info wb-rules[3671]: INFO: MQTT connection established
Oct 15 14:31:57 wirenboard-ANMSNLVK daemon.info wb-rules[3671]: INFO: [rule info]
Oct 15 14:31:57 wirenboard-ANMSNLVK daemon.info wb-rules[3671]: ERROR: command '/bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export' failed with exit status 1
Oct 15 14:42:57 wirenboard-ANMSNLVK daemon.info wb-rules[4314]: INFO: MQTT connection established
Oct 15 14:42:57 wirenboard-ANMSNLVK daemon.info wb-rules[4314]: INFO: [rule info]
Oct 15 14:42:57 wirenboard-ANMSNLVK daemon.info wb-rules[4314]: ERROR: command '/bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export' failed with exit status 1
Только defineRule, обернут 3 раза для разных топиков:
Скрипт
var Days = Object.freeze({
"MON": 1,
"TUE": 2,
"WED": 3,
"THU": 4,
"FRI": 5,
"SAT": 6,
"SUN": 0});
var regulation1 = function(newValue, devName, cellName) {
if (newValue == '0') {
return;
}
runShellCommand("echo " + cellName + " > /log.txt");
var count = Number(dev["wb-mr6c_57"]["K1"]) +
Number(dev["wb-mr6c_57"]["K2"]) +
Number(dev["wb-mr6c_57"]["K3"]);
if (count > 2) {
if ((dev["wb-mr6c_57"]["K1"] == '1') && (cellName != "K1")) {
dev["wb-mr6c_57"]["K1"] = '0';
}
else if (((dev["wb-mr6c_57"]["K2"] == '1') && (cellName != "K2"))) {
dev["wb-mr6c_57"]["K2"] = '0';
}
else if ((dev["wb-mr6c_57"]["K3"] == '1') && (cellName != "K3")) {
dev["wb-mr6c_57"]["K3"] = '0';
}
}
};
var regulation2 = function(newValue, devName, cellName) {
};
var time_map = [
[
{
date_check: function(time) {
return true;
},
command: regulation1
}
]
];
function makeMotionDetector(rule_name, timeout_ms, device, monitoring_cell) {
defineRule(rule_name, {
whenChanged: device + '/' + monitoring_cell,
then: function(newValue, devName, cellName) {
var do_exit = false;
var now = new Date();
for (var layer = time_map.length - 1; layer >= 0; layer--) {
for (var i in time_map[layer]) {
if (time_map[layer][i].date_check(now)) {
time_map[layer][i].command(newValue, devName, cellName);
do_exit = true;
break;
}
}
if (do_exit) {
break;
}
}
}
});
}
makeMotionDetector('switch_regulation_1', 1000, 'wb-mr6c_57', 'K1');
makeMotionDetector('switch_regulation_2', 1000, 'wb-mr6c_57', 'K2');
makeMotionDetector('switch_regulation_3', 1000, 'wb-mr6c_57', 'K3');
Заметил следующее:
Обновляю контроллер через web
Правило работает
reboot
Правило работает
Подкладываю свой конфиг mosquitto.conf и делаю service mosquitto restart
Правило работает
reboot
Правило не работает
Реле через веб щелкают
Подкладываю базовый конфиг
service mosquitto restart
Правила работают
mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
######
## Общие параметры
# Файл, содержащий идентификационный номер процесса (pid).
# Актуально только для режима Daemon
pid_file /var/run/mosquitto.pid
# Сохранение текущего состояния в БД
persistence true
# Путь для хранения БД. В конце ОБЯЗАТЕЛЬНО "/"
persistence_location /var/lib/mosquitto/
# Автосахранение состояния брокера при изменении состояния
autosave_on_changes true
# Дополнительные файлы с конфигурациями
include_dir /etc/mosquitto/conf.d
# Очищать данные клиента при неактивности более чем $PARAM
persistent_client_expiration 1m # 1 месяц
# PreSharedKey
#psk_file file path
# Очередь сообщений для QoS 0, на случай, когда сервер недоступен.
# Нестандартная опция. По умолчанию очередь сообщений используется только для QoS 1 и 2
#queue_qos0_messages false
# Сообщение от брокера до клиента будет доставлено с QoS указанным подписчиком
upgrade_outgoing_qos true
# Разрешены только локальные клиенты
#bind_address localhost
# Разрешить дублирование сообщений
# Например, если клиент 2 раза подписался на один и тот-же топик, сообщение придет 2 раза
allow_duplicate_messages true
######
## Мост
# Название бриджа, он же идентификатор моста
connection my-connection-2000
# Адрес сервера
# Может быть указано несколько адресов
address 192.168.2.100:1883
# Запрет очистки сессии
# Все данные при после обрыва соединения будут восстановлены
cleansession false
# Мониторинг онлайна клиентов
# TODO: Понять как работает
notifications true
# notifications_local_only true
# Переподключение после обрыва через 5 секунд
# (лучше больше, но для стенда сойдет, т.к. трафик не учитывается)
restart_timeout 5
# Список топиков для передачи на сервер
topic # both 2 /iq/bridge/ /iq/my-connection-2000/
Пишу: #upgrade_outgoing_qos true
и выполняю service mosquitto stop && service wb-rules stop && service mosquitto start && service wb-rules start
Регуляция работает.
Пишу: upgrade_outgoing_qos true
и выполняю service mosquitto stop && service wb-rules stop && service mosquitto start && service wb-rules start
Регуляция не работает.
И так стабильно несколько раз воспроизвелось. В том числе после перезагрузки.
Ну да, если закомментировать эту строку, регуляции работают, а других проблем нету.
К сожалению, опять столкнулся с проблемой надёжности продукта. На этот раз не выдержал движок правил.
Перегрузил контроллер и только через полдня обнаружил, что система не работает. Стал разбираться и обнаружил, что сценарии не выполняются, хотя проверяю и вижу несоответствие:
В логах пестрит следующее:
Sep 22 02:59:25 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: WARNING: MQTT connection lost
Sep 22 02:59:25 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: INFO: MQTT connection established
…
А если проверить так, то все красиво:
root@wirenboard-ARAXKJYF:~# service wb-rules status
[ ok ] wb-rules is running.
В процессе перезагрузки Linux видно, что Файлы с правилами загружались и начали выполняться, но потом происходит необъяснимое:
Sep 22 02:39:39 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: INFO: [rule info] [LAUNDRY]: Humidity 32.8%. Vent OFF
Sep 22 02:39:40 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: INFO: [rule info] [STAIRS 1]: MOVING DETECTOR ACTIVATED… Light is ON
Sep 22 02:39:53 wirenboard-ARAXKJYF user.notice wb-mqtt-db[3347]: 2019-09-22 02:39:53.459 NOTICE: DB logger started, go to main loop
Sep 22 02:40:00 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: WARNING: MQTT connection lost
Sep 22 02:40:00 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: INFO: MQTT connection established
Sep 22 02:40:20 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: WARNING: MQTT connection lost
Sep 22 02:40:20 wirenboard-ARAXKJYF daemon.info wb-rules[3405]: INFO: MQTT connection established
…
последние строки повторяются.
Я все понимаю, продукт не из коробки и его надо допиливать похоже вечно, но такие ситуации с надежностью меня сильно пугают, и ужасно, что я не могу быть вовремя уведомлен о происходящем. Объясните, что происходит ?
Есть подозрение, что на контроллере забивается очередь MQTT-сообщений.
Попробуйте увеличить значение mdдва-три раза export WB_RULES_QUEUES_LEN=2048
в файле /etc/default/wb-rules
Сожалею, что вам пришлось столкнуться со многими проблемами при запуске контроллера в эксплуатацию. Опыт наших клиентов показывает, что в общем и целом контроллеры надежны, а все возникающие проблемы мы стараемся решать в поддержке.
К сожалению, такого файла там не нашел. Создать его или он сам должен создаваться?
А почему нигде в инструкции об этом не говорится? или у меня одного очередь такая большая? тогда ограничения надо обозначить в документации. Это ваша ахилесова пята судя по прочитанным отзывам.
Да, простому смертному эти устройства не запустить, а если и удастся, то поддержку и обслуживание не потянуть. Это конструктор для терпеливых и экономных, в первую очередь. Я бы согласился и втрое купить дороже, при условии минимального участия. Но, боюсь, до этого далеко. Может терпение еще не иссякнет ))
Да, создайте файл и перезапустите движок правил.
Посмотрите, подхватилось ли изменение (ps -ef | grep wb-rules):
/usr/bin/wb-rules -syslog -queue-len 2048 -editdir /etc/wb-rules /usr/share/wb-rules-system/rules/ /etc/wb-rules /usr/share/wb-rules/
Сама по себе эта проблема не так часто всплывает, только на больших инсталляциях и загруженных контроллерах.
Обращайтесь, мы всегда рады вам помочь, если что-то непонятно или не работает, как хотелось бы.
На WB 5 слишком мало свободной ОЗУ из-за чего постоянное использование swap. Также “Load average” почти всегда около или больше 1 (https://www.booleanworld.com/guide-linux-top-command/).
Для себя решил крутить правила (node-red) и доп интерфейс (Home Assistant) на стороннем контроллере/сервере. На wb-rules оставил только критические правила и никаких таймеров.
Либо… менять WB5 на WB6.