Проверка на наличие связи с modbus устройством

Не хотелось бы совсем все тут выкладывать.

Можете мне на почту тогда, если там ничего секретного: nikita.maslov at wirenboard.ru

На почту ушло. Там все файлики необходимые, вроде.

Получил. Буду смотреть

Отрицательно сказывается на работе скрипта вот этот закоментированный кусок.
Я сейчас без него гоняю, правила не падают.

function Main_update_Loop() {
/*
		log ("ModBUS error = ", String(dev["wb-mr6c_1/Serial NO#error"]));
        if(dev["wb-mr6c_1/Serial NO#error"] == "r") {
          dev["vehicle"]["ModBUS_OK"] = false;
		  log ("ModBUS = false");
        } else {
          dev["vehicle"]["ModBUS_OK"] = true;
		  log ("ModBUS = true");
		}

        if (dev["power_status/Vin"] > ignition_V)
			dev["vehicle"]["ignition"] = true;
        else
			dev["vehicle"]["ignition"] = false;
		dev["vehicle"]["Vin"] = dev["power_status/Vin"];
*/

На всякий случай советовал бы вам обновить wb-rules до 2.6.4, там была исправлена ошибка, связанная с forceDefault - вдруг и вас это как-то зацепило. Эта версия лежит в новом репозитории, перейти на него можно по инструкции здесь (если вы этого ещё не делали): Обновление прошивки контроллера Wiren Board — Wiren Board

После перехода можно будет продолжать обновляться с помощью apt update && apt upgrade, больше никаких специальных действий не будет требоваться.

Тред про новый репозиторий: Релизы ПО и переезд на новый репозиторий

только если всё это закомментировать? Отдельные фрагменты не лечат?

И ещё, помогает ли увеличение интервала функции Main_update_Loop?

только если всё это закомментировать? Отдельные фрагменты не лечат?

Я пока последовательно приближаюсь к проблемному коду.
Пока помогло убрать этот кусок. Буду пробовать выкусывать код более мелкими порциями.
Обнова не помогла.
Увеличение интервала до 2000 не помогло. А больше уже бессмысленно.

Понял. Во всяком случае ничего очевидно подозрительного в вашем коде нет, так что будет хорошо, если получится разобраться

Это да. Код простой как наковальня.
Он просто передает в вирт девайс vehicle необходимые данные, которые нужны ПО верхнего уровня. Ну и немножко от этого ПО сигналов получает на управление железом. Все через MQTT.

Если надо, выложу скрипт-проверятель всех modbus-устройств на контроллере. С небольшой доработкой его, в принципе, можно прикрутить куда угодно. У меня проблема весьма актуальна, есть места с суровым зоопарком на всех шинах…

1 лайк

Да, кстати, обновлять значения Vin можно по таймеру раз в секунду просто.

Да, кстати, обновлять значения Vin можно по таймеру раз в секунду просто.

Это первое, что я вчера переделал.

Коллеги, подскажите, вам удалось воспроизвести проблему?
Хочется немножко понимать, есть какое-то движение, или замерло все до рассвета?

Одну проблему с вашей помощью мы нашли и исправили - wb-rules падал, если попытаться прочитать мету устройства, которого нет. Простой тест:

setTimeout(function() {
  var m = dev["no_such_device/test#type"];
  log("Meta: " + m);
}, 1000);

До версии 2.6.5 wb-rules падает на таком коде (устройства no_such_device не существует, естественно).

Версия 2.6.5 с исправлением уже в testing, скоро выгрузим в stable.

1 лайк

Версия 2.6.5 лежит по адресу
http://deb.wirenboard.com/all/pool/main/w/wb-rules/wb-rules_2.6.5_armhf-stretch.deb
Дополнительных зависимостей при апгрейде с 2.6.4 не требует.

Версия wb-rules 2.6.5 умирает в работе по не понятным причинам.
Проблема крайне актуальна, так как вылезла только при больших объемах обновлений ци-rules
Вот что удалось найти в логах:

Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.unloader_arm_out =  wb-mr6c_1/K4
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.unloader_stuff_count =  wb-mr6c_1/Input 0 counter
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.use_CAN_bunker_level =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] use_CAN_bunker_level =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.use_CAN_loader =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] use_CAN_loader =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.use_CAN_unloader =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] use_CAN_unloader =  1
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.unloader_bypass_in =  wb-gpio/W1_IN
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.vehicle_type =  BEET 29.10.20
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.unloader_idle =  10
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] unloader_idle =  10
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.loader_idle =  10
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] loader_idle =  10
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.ignition_V =  11
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] ignition_V =  11
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] vehicle_conf.bunker_levels =  0,25,50,75,100,100
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] bunker_levels =  0,25,50,75,100,100
Sep 13 09:23:08 wirenboard-ACEFJM47 wb-rules[2291]: INFO: [rule info] Init Vars
Sep 13 09:23:10 wirenboard-ACEFJM47 wb-rules[2291]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
Sep 13 09:23:11 wirenboard-ACEFJM47 wb-rules[2291]: INFO: all rule files are loaded
Sep 13 09:23:21 wirenboard-ACEFJM47 wb-rules[2291]: ERROR: command '/bin/sh -c i2cset -y 7 0x70 0x00 0x10' failed with exit status 1
Sep 13 09:23:23 wirenboard-ACEFJM47 wb-rules[2291]: ERROR: command '/bin/sh -c i2cset -y 7 0x70 0x01 0x02' failed with exit status 1
Sep 13 09:25:18 wirenboard-ACEFJM47 deploy_server[408]: getPolicyVersion wb-rules 2.6.5
Sep 13 09:25:29 wirenboard-ACEFJM47 deploy_server[408]: Downloading wb-rules 2.6.5
Sep 13 09:27:19 wirenboard-ACEFJM47 deploy_server[408]: getPolicyVersion wb-rules 2.6.5
Sep 13 09:27:27 wirenboard-ACEFJM47 deploy_server[408]: Downloading wb-rules 2.6.5
Sep 13 09:28:47 wirenboard-ACEFJM47 systemd-udevd[171]: /etc/udev/rules.d/10-gps.rules:1: NAME="%k" is ignored, because it breaks kernel supplied names; please remove
Sep 13 09:28:47 wirenboard-ACEFJM47 systemd-udevd[171]: /etc/udev/rules.d/10-gps.rules:2: NAME="%k" is ignored, because it breaks kernel supplied names; please remove
Sep 13 09:29:03 wirenboard-ACEFJM47 wb-mqtt-mbgate-confgen[373]: /devices/wbrules/controls/Rule debugging/meta/type
Sep 13 09:29:03 wirenboard-ACEFJM47 wb-mqtt-mbgate-confgen[373]: /devices/wbrules/controls/Rule debugging/meta/order
Sep 13 09:29:03 wirenboard-ACEFJM47 wb-mqtt-mbgate-confgen[373]: /devices/wbrules/controls/Rule debugging/meta/readonly
Sep 13 09:29:14 wirenboard-ACEFJM47 wb-mqtt-mbgate-confgen[373]: Topic wbrules/Rule debugging taken from old config
Sep 13 09:29:51 wirenboard-ACEFJM47 wb-rules[2323]: INFO: driver is created
Sep 13 09:29:51 wirenboard-ACEFJM47 wb-rules[2323]: INFO: [wbgo_mqtt] rules-wirenboard-ACEFJM47-2323: MQTT connection established
Sep 13 09:29:51 wirenboard-ACEFJM47 wb-rules[2323]: WARNING: [wbgo_mqtt] MQTT connection lost
Sep 13 09:29:51 wirenboard-ACEFJM47 wb-rules[2323]: INFO: [wbgo_mqtt] rules-wirenboard-ACEFJM47-2323: MQTT connection established
Sep 13 09:30:01 wirenboard-ACEFJM47 wb-rules[2323]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x18454c0 false <nil>} [] map[]})
Sep 13 09:30:11 wirenboard-ACEFJM47 wb-rules[2323]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845500 false <nil>} [] map[]})
Sep 13 09:30:21 wirenboard-ACEFJM47 wb-rules[2323]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845540 false <nil>} [] map[]})
Sep 13 09:30:31 wirenboard-ACEFJM47 wb-rules[2323]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845580 false <nil>} [/devices/+/meta/driver] map[]})

Здравствуйте! Посмотрите здесь, возможно, та же проблема:

То есть wb-rules сейчас может прекращать работу, если остановлен сервис mosquitto.

Да вроде мы mosquitto не трогаем. Зачем его перезагружать? Это же основная служба на контроллере, которая обесечивает обмен данными между всеми модулями системы.

Добрый день!

Есть смысл обновиться, это было исправлено в wb-rules с версии 2.7.2. В актуальный stable исправление уже заехало.

Прошу прощение за наглость, а можно ссылочку на пакетик?