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

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

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

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 исправление уже заехало.

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

http://deb.wirenboard.com/all/pool/main/w/wb-rules/wb-rules_2.8.0_armhf.deb

Но оно само не поставится, там зависимости некоторые новые появились

Это все хорошо, но почему при установке рулес хотет удалить нужную кучку пакетов?
Тут какая-то куча зависимостей появилась новых, мы их не можем сейчас разрешить.

root@wirenboard-AV6DHL26:~# apt-get install ./wb-rules_2.8.0_armhf.deb          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'wb-rules' instead of './wb-rules_2.8.0_armhf.deb'
The following packages were automatically installed and are no longer required:
  libmariadbclient18 mysql-common netcat netcat-traditional python-gsmmodem-new python-mysqldb
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  rusagro-harvester-confs rusagro-vehicle wb-daemon-watchdogs wb-hwconf-manager wb-mqtt-dac wb-rules-system wb-test-suite
The following packages will be upgraded:
  wb-rules
1 upgraded, 0 newly installed, 7 to remove and 17 not upgraded.
Need to get 0 B/5,287 kB of archives.
After this operation, 3,215 kB disk space will be freed.
Do you want to continue? [Y/n]

Да, я про это и говорил. Если критично пакетами, сейчас ссылки пришлю на зависимости, там не сильно много