Самопроизвольное отключение света

Жена пожаловалась, что время от времени весь свет самопроизвольно выключается.
Сегодня сам заметил, что пока ужинали весь свет отрубался 2 раза.
После этого каждый раз приходилось идти нажимать выключатель на стене.

Решил залезть в веб-интерфейс и проверить историю люстры на кухне. Она управляется реле wb-mr6c_128/K2.
Это реле зависит от

  • входа wb-mr6c_128/Input 2 в настроках wb-mqtt-serial.conf
  • входа wb-mr6c_120/Input 6 Double Press Counter в wb-rules
  • входа wb-mr6c_118/Input 6 Long Press Counter в wb-rules

Вот команды из wb-rules, которые управляют

var pa = require("wb-press-actions"); 

var commands = [
    { btnControl: "wb-mr6c_120/Input 6 Double Press Counter", actionControl: "wb-mr6c_128/K2", actionType: "toggle" }, 
  ];

pa.init(commands);


// master switch OFF all light when leave home
defineRule("MasterSwitch", {
	whenChanged: "wb-mr6c_118/Input 6 Long Press Counter",
	then: function (newValue, devName, cellName) {
		...
		dev["wb-mr6c_128"]["K2"] = false; // Люстра на кухне
		...
	}
});

Потом я пошёл в веб-интерфейс и сделал выгрузку истории по всем этим входам и выходу реле и оказалось очень интересно. На скриншоте видно, что реле включено в 17:26:51:198, а потом оно выключается в 19:50:50:405. При этом ни один вход не изменяется.
Тоже самое в 20:01:12:620, в 20:15:02:294 и в 20:55:00:925.
Далее уже видно одно изменение входа 128 / Вход 2 в 20:55:10:801. Это я с телефона включил свет обратно, чтобы не бегать к выключателю. И он опять самопроизвольно выключился в 21:01:30:351.

Причём никакой закономерности во времени работы до отключения нет. Всегда разное время.
Но сам факт мне вообще не нравится.
Это называется нестабильной работой устройства!

У меня на каждой фазе стоит отсекающее реле с порогами срабатывания 200 и 240В, но скачков электричества в этот промежуток времени зафиксировано не было.

Добрый день.
Покажите пожалуйста лог wb–mqtt-serial за указанный период 17-21 час 6 числа.
Также - прочитайте с модуля реле значения 104 b 105 input регистров. Не было ли перезапусков его?

Команда сохраняет пустой лог. И там вообще написано, что он с начала пустой

journalctl -u wb-mqtt-serial --since "2023-11-06 17:20:00" --until "2023-11-06 21:20:00" >> /tmp/mqtt-serial-log.txt

mqtt-serial-log.txt (107 байтов)

Если выгружаю командой без ограничения периода, то последние строки в логе такие

Oct 31 13:55:07 wirenboard-AM363YRR wb-mqtt-serial[29465]: INFO: [serial client] Events are disabled for <modbus:126:input: 38>
Oct 31 13:55:07 wirenboard-AM363YRR wb-mqtt-serial[29465]: INFO: [serial client] Events are enabled for <modbus:126:input: 39>
Oct 31 13:55:07 wirenboard-AM363YRR wb-mqtt-serial[29465]: INFO: [serial client] Events are enabled for <modbus:126:input: 500>
Oct 31 13:55:07 wirenboard-AM363YRR wb-mqtt-serial[29465]: INFO: [serial client] Events are enabled for <modbus:126:input: 501>
Oct 31 13:55:07 wirenboard-AM363YRR wb-mqtt-serial[29465]: INFO: [serial client] Events are disabled for <modbus:126: reboot>
Nov 01 10:35:04 wirenboard-AM363YRR wb-mqtt-serial[29465]: WARNING: [register handler] failed to write: <modbus_io:70:4:coil: 1>: Serial protocol error: request timed out
Nov 01 21:22:53 wirenboard-AM363YRR wb-mqtt-serial[29465]: WARNING: [register handler] failed to write: <modbus_io:70:4:coil: 1>: Serial protocol error: request timed out
Nov 02 08:05:55 wirenboard-AM363YRR wb-mqtt-serial[29465]: WARNING: [register handler] failed to write: <modbus_io:70:4:coil: 1>: Serial protocol error: request timed out
Nov 05 17:39:25 wirenboard-AM363YRR wb-mqtt-serial[29465]: WARNING: [register handler] failed to write: <modbus_io:70:4:coil: 1>: Serial protocol error: request timed out

Зайдя в ssh увидел, что память забита чем-то на 92%

System load:   6.55 6.57 6.35   Up time:       26 days 22:51
Memory usage:  92% of 1.96G     Usage of /:    34% of 2.0G      /mnt/data:     4                                                                     % of 55G

Откуда она забивается и как её почистить?

Где хелп как считывать эти регистры?

Отлично, нет ошибок совсем. Итаг, гипотезу с плохой шиной (переход в безопасный режим) или питанием реле можно исключить.
Хотя - прочитайте все ж регистр с временем перехода в безопасный режим, значение по умолчанию - 10 секунд.

Тогда остается из разумных - программное изменение.
Как вариант подтверждения гипотезы - создайте правило trackMqtt на топик /on соответствующего канала реле.
Например (измените топик под свое устройство):

//11_07_test_02.js

function log_on(nameRule, source) {
  trackMqtt(source, function(message){
    log.info("name: {}, value: {}".format(message.topic, message.value))
  });
}

log_on("rule_wb-mr3_36_K1", "/devices/wb-mr3_36/controls/K1/on");

Стоит ли на контроллере стороннее ПО?

Выполните

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem

никакого стороннего ПО нет. Даже node red не ставил

root@wirenboard-AM363YRR:~# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
  PID  PPID CMD                         %MEM %CPU
 7903     1 /usr/bin/wb-rules -syslog - 84.9  124
 1723     1 /usr/bin/wb-mqtt-confed -sy  2.0  0.4
  137     1 /lib/systemd/systemd-journa  0.7  0.0
 1772     1 python3 /usr/bin/wb-mqtt-nm  0.5  0.4
 1729     1 /usr/bin/wb-mqtt-db          0.3  2.5
25266     1 /lib/systemd/systemd --user  0.2  2.6
 6224     1 python3 /usr/lib/wb-connect  0.2  1.5
25177  1589 sshd: root@pts/0             0.2  2.3
 1674     1 /usr/sbin/mosquitto -c /etc  0.2  5.1
    1     0 /sbin/init                   0.2  0.0
  419     1 /usr/sbin/NetworkManager --  0.2  1.6
 1760     1 /usr/bin/python3 /usr/bin/w  0.2  1.1
29465     1 /usr/bin/wb-mqtt-serial      0.2 12.0
  297     1 /lib/systemd/systemd-logind  0.1  0.0
 1708     1 /usr/bin/python3 /usr/bin/w  0.1  0.0
 1961  1957 nginx: worker process        0.1  0.0
 1717     1 /usr/bin/python3 /usr/bin/w  0.1  0.0
25271 25266 (sd-pam)                     0.1  0.0
 1965  1957 nginx: worker process        0.1  0.0
 1969  1957 nginx: worker process        0.1  0.0
 1962  1957 nginx: worker process        0.1  0.0
  370     1 /usr/sbin/ModemManager       0.1  0.0
 1957     1 nginx: master process /usr/  0.1  0.0
  290     1 /usr/bin/dbus-daemon --syst  0.1  1.4
  328     1 /sbin/wpa_supplicant -u -s   0.1  0.0
 2046     1 /usr/bin/wb-mqtt-opcua       0.1  0.2
25384 25177 -bash                        0.1  0.1
  295     1 /usr/libexec/polkitd --no-d  0.1  0.0
 3051     1 /usr/bin/wb-mqtt-mbgate -c   0.1  0.0
  155     1 /lib/systemd/systemd-udevd   0.1  0.0
 1589     1 sshd: /usr/sbin/sshd -D [li  0.0  0.0
  323     1 avahi-daemon: running [wire  0.0  0.0
25678 25384 ps -eo pid,ppid,cmd,%mem,%c  0.0  0.0
 2702     1 /usr/bin/wb-mqtt-adc         0.0  0.3
 8689     1 /usr/sbin/ntpd -p /var/run/  0.0  0.0
 3043     1 /usr/bin/wb-mqtt-gpio        0.0  0.1
 1733     1 /usr/bin/wb-mqtt-logs        0.0  0.0
 1368   419 /usr/sbin/dnsmasq --conf-fi  0.0  0.0
  289     1 /usr/sbin/cron -f            0.0  0.0
 2920     1 /usr/bin/knxd -e 0.0.1 -E 0  0.0  0.0
 3095     1 /usr/bin/wb-mqtt-w1          0.0  0.0
 1799     1 /bin/bash /usr/bin/wb-watch  0.0  0.0
  302   300 /bin/bash /usr/bin/wb-watch  0.0  0.0
 1633     1 /sbin/agetty -o -p -- \u 11  0.0  0.0
 3056     1 /usr/sbin/watchdog           0.0  0.0
  288     1 /usr/libexec/bluetooth/blue  0.0  0.0
 2757     1 /sbin/netplugd -p /var/run/  0.0  0.0
 3025     1 /usr/bin/wb-mqtt-knx         0.0  0.1
 1624     1 /sbin/agetty -o -p -- \u --  0.0  0.0
  325   302 /bin/bash /usr/bin/wb-watch  0.0  0.0
 1856  1799 /bin/bash /usr/bin/wb-watch  0.0  0.0
25675  7903 /bin/sh -c udevadm info --q  0.0  0.0
  324   302 inotifywait -m --event clos  0.0  0.0
  300     1 /bin/sh -c /usr/bin/wb-watc  0.0  0.0
 1855  1799 inotifywait -m -r --exclude  0.0  0.0
  333   323 avahi-daemon: chroot helper  0.0  0.0
25677  7903 [wb-rules]                   0.0  0.0
    2     0 [kthreadd]                   0.0  0.0
    3     2 [rcu_gp]                     0.0  0.0
    4     2 [rcu_par_gp]                 0.0  0.0
    8     2 [mm_percpu_wq]               0.0  0.0
    9     2 [rcu_tasks_rude_]            0.0  0.0
   10     2 [rcu_tasks_trace]            0.0  0.0
   11     2 [ksoftirqd/0]                0.0  0.0
   12     2 [rcu_sched]                  0.0  0.2
   13     2 [migration/0]                0.0  0.0
   14     2 [cpuhp/0]                    0.0  0.0
   15     2 [cpuhp/1]                    0.0  0.0
   16     2 [migration/1]                0.0  0.0
   17     2 [ksoftirqd/1]                0.0  0.0
   20     2 [cpuhp/2]                    0.0  0.0
   21     2 [migration/2]                0.0  0.0
   22     2 [ksoftirqd/2]                0.0  0.0
   25     2 [cpuhp/3]                    0.0  0.0
   26     2 [migration/3]                0.0  0.0
   27     2 [ksoftirqd/3]                0.0  0.0
   30     2 [kdevtmpfs]                  0.0  0.0
   31     2 [netns]                      0.0  0.0
   33     2 [oom_reaper]                 0.0  0.0
   34     2 [writeback]                  0.0  0.0
   35     2 [kcompactd0]                 0.0  0.0
   65     2 [kblockd]                    0.0  0.0
   66     2 [blkcg_punt_bio]             0.0  0.0
   67     2 [watchdogd]                  0.0  0.2
   69     2 [rpciod]                     0.0  0.0
   71     2 [kworker/u9:0-hci0]          0.0  0.0
   72     2 [xprtiod]                    0.0  0.0
   73     2 [kswapd0]                    0.0  0.0
   74     2 [nfsiod]                     0.0  0.0
   76     2 [irq/51-sun4i_gp]            0.0  0.1
   80     2 [1c15000.crypto-]            0.0  0.0
   82     2 [1c15000.crypto-]            0.0  0.0
   83     2 [1c15000.crypto-]            0.0  0.0
   84     2 [1c15000.crypto-]            0.0  0.0
   89     2 [ipv6_addrconf]              0.0  0.0
   91     2 [kstrp]                      0.0  0.0
   95     2 [irq/103-axp22x_]            0.0  0.0
   96     2 [irq/49-ths]                 0.0  0.0
   98     2 [irq/34-sunxi-mm]            0.0  0.0
  101     2 [mmc_complete]               0.0  0.0
  103     2 [stmmac_wq]                  0.0  0.0
  106     2 [irq/33-sunxi-mm]            0.0  0.0
  107     2 [jbd2/mmcblk0p2-]            0.0  0.0
  108     2 [ext4-rsv-conver]            0.0  0.0
  109     2 [mmc_complete]               0.0  0.0
  172     2 [w1_bus_master1]             0.0  0.0
  173     2 [w1_bus_master2]             0.0  0.0
  185     2 [cfg80211]                   0.0  0.0
  187     2 [kworker/u9:2-hci0]          0.0  0.0
  218     2 [jbd2/mmcblk0p6-]            0.0  0.0
  219     2 [ext4-rsv-conver]            0.0  0.0
  899     2 [RTW_CMD_THREAD]             0.0  0.2
 2348     2 [file-storage]               0.0  0.0
 3062     2 [irq/78-wb-mqtt-]            0.0  0.0
 3063     2 [irq/77-wb-mqtt-]            0.0  0.0
 3065     2 [irq/74-wb-mqtt-]            0.0  0.0
 3066     2 [irq/75-wb-mqtt-]            0.0  0.0
 6858     2 [kworker/1:2-events]         0.0  0.0
11664     2 [kworker/2:2-pm]             0.0  0.0
13353     2 [kworker/3:2H-kblockd]       0.0  0.0
15153     2 [kworker/0:1-pm]             0.0  0.0
18704     2 [kworker/2:3-mm_percpu_wq]   0.0  0.0
19008     2 [kworker/u8:1-events_unboun  0.0  0.8
19056     2 [kworker/0:1H-mmc_complete]  0.0  0.0
19276     2 [kworker/1:0H-kblockd]       0.0  0.0
19636     2 [kworker/3:0]                0.0  0.0
20982     2 [kworker/0:2H-mmc_complete]  0.0  0.0
21049     2 [kworker/2:1H]               0.0  0.0
21550     2 [kworker/3:1H]               0.0  0.0
21904     2 [kworker/1:1H]               0.0  0.0
23058     2 [kworker/u8:0-events_unboun  0.0  0.2
23071     2 [kworker/u8:2-events_unboun  0.0  1.2
23310     2 [kworker/2:1-mm_percpu_wq]   0.0  0.0
23648     2 [kworker/0:0H-mmc_complete]  0.0  0.0
24014     2 [kworker/3:1-events_power_e  0.0  0.1
24129     2 [kworker/1:0-events]         0.0  0.0
24628     2 [kworker/1:2H]               0.0  0.0
24811     2 [kworker/2:0H]               0.0  0.0
24986     2 [kworker/0:0-mm_percpu_wq]   0.0  0.0
24994     2 [kworker/3:0H]               0.0  0.0
25667  7903 [sh] <defunct>               0.0 44.0
25673  7903 [sh] <defunct>               0.0 45.0
32762     2 [kworker/2:2H-kblockd]       0.0  0.0

как его читать?

Подскажите, какая версия прошивки реле?

1.20.1

1 лайк

создал и что с ним делать?

У меня теперь вообще ничего не работает и в логе куча ошибок.

journalctl -u wb-mqtt-serial --since -1h >> /tmp/mqtt-serial-log.txt
mqtt-serial-log.txt (1,2 МБ)

Это после того, как я это правило создал. Я его уже закомментировал, но в рабочее состояние пока ничего не возвращается.

Крайне подозрительно. Такого получается добиться только рекурсией. Проверьте все правила на предмет наличия вызовов.
Перезапустите движок правил - какое количество ресурсов потребляет после перезапуска? Как меняется потребление?
Ну и, повторюсь - проверьте на рекурсии.

https://wirenboard.com/wiki/Modbus-client

Можно посмотреть в логе - были ли записи в /on топик устройства.

Сегодня вошёл в ssh и уже память обнулилась

System load:   0.34 0.68 0.84   Up time:       28 days 6:00
Memory usage:  9% of 1.96G      Usage of /:    34% of 2.0G      /mnt/data:     4                                        % of 55G

wb-mqtt-serial удалось запустить

Рекурсии в скриптах у меня нет. Вот все мои скрипты.
Самый большой скрипт heating.js.
Остальные вообще очень простые.

wb-rules.zip (9,0 КБ)

Вчера в 23 часа вечера memory usage было 9%. Сейчас в 8 утра уже 22%.

heating.js - вижу рекурсию.


defineRule("cron minute timer", { // задание, которое выполняется каждую минуту
  when: cron("00 * * * * *"),

Ежеминутно вызывает TermostatController()
в которой создается два экземпляра

function TermostatController(name, onoff, scheduleMode, temperature, setpoint, hysteresis, pressure, MinPressure, MaxPressure, MainRelayState, WBRelayState, ABBRelayState, PumpRelayState, HeatingStart, HeatingStop) {

  defineRule( {
    whenChanged: [onoff, scheduleMode, setpoint, hysteresis, temperature, pressure], 
    then: function (newValue, devName, cellName) {

Ну, дальше не смотрел.
Соответственно только в одном скрипте 3К правил/сутки. Работающих с одними же топиками.

  1. Рекурсия – это когда функция вызывает саму себя. Такого у меня нет.
    Функции просто вызываются в правиле по таймеру.
    У меня таймер вызывает 2 экземпляра одной функции с разными аргументами, чтобы не дублировать код, но нет вызова функции самой себя. Это же разные вещи.

  2. Как вы по-другому предлагаете управлять ТЭНами по времени?
    Просто таймерами я это сделать не могу. Мне нужно, чтобы это работало ночью, иначе смысла ноль.

Какждый вызов - создает экземпляр объекта. Какждый экземпляр существует и продожает существовать пока ресуросов памяти и процессора зватает.Так делать нельзя.

а как надо?

Надо - один экземпляр правил. И (если) создавать их динамически - то тщательно контролировать количество.
Я использую, при необходимости выхов функций из правил или использование параметров, передаваемых объектами.

можно пример?
что значит один экземпляр правил?

Их можно динамически удалять с таймаутом 1мин?

Если бы в wb-rules был прямой доступ к текущему времени без функции Date, то я бы не делал этот cron и всё бы работало только с одним экземпляром функции.
Вся проблема только в этом.

Вот, довольно простенький. Но работает и годен для промышленного применения.

То, что каждый экземпляр объекта созданный с помощью defineRule() - остается.

Нет. Точнее - можно, но весьма нетривиально. И не нужно, это на порядок сложнее и потребует очень хорошего вникания.

А чем стандартный Date неудобен?