Жена пожаловалась, что время от времени весь свет самопроизвольно выключается.
Сегодня сам заметил, что пока ужинали весь свет отрубался 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 регистров. Не было ли перезапусков его?
Если выгружаю командой без ограничения периода, то последние строки в логе такие
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 соответствующего канала реле.
Например (измените топик под свое устройство):
Крайне подозрительно. Такого получается добиться только рекурсией. Проверьте все правила на предмет наличия вызовов.
Перезапустите движок правил - какое количество ресурсов потребляет после перезапуска? Как меняется потребление?
Ну и, повторюсь - проверьте на рекурсии.
Рекурсия – это когда функция вызывает саму себя. Такого у меня нет.
Функции просто вызываются в правиле по таймеру.
У меня таймер вызывает 2 экземпляра одной функции с разными аргументами, чтобы не дублировать код, но нет вызова функции самой себя. Это же разные вещи.
Как вы по-другому предлагаете управлять ТЭНами по времени?
Просто таймерами я это сделать не могу. Мне нужно, чтобы это работало ночью, иначе смысла ноль.
Какждый вызов - создает экземпляр объекта. Какждый экземпляр существует и продожает существовать пока ресуросов памяти и процессора зватает.Так делать нельзя.
Надо - один экземпляр правил. И (если) создавать их динамически - то тщательно контролировать количество.
Я использую, при необходимости выхов функций из правил или использование параметров, передаваемых объектами.
Если бы в wb-rules был прямой доступ к текущему времени без функции Date, то я бы не делал этот cron и всё бы работало только с одним экземпляром функции.
Вся проблема только в этом.