Добрый день.
Каждый раз после apt update && apt upgrade отваливается z2m. Приходится его руками запускать.
Не могу точно утверждать, но кажется это началось после обновления модуля zigbee.
Куда стукнуть?
Добрый день.
Каждый раз после apt update && apt upgrade отваливается z2m. Приходится его руками запускать.
Не могу точно утверждать, но кажется это началось после обновления модуля zigbee.
Добрый день.
А покажите логи сервиса zigbee2mqtt, вот за сегодня. Их нет в архиве поскольку это сторонний сервис.
log.7z (479,0 КБ)
Мне кажется они обнуляются при перезапуске сервиса. Может в прошлых что-то есть.
Сегодняшний лог с момента перезапуска сервиса.
Воспроизвожу:
Unpacking wb-mqtt-logs (1.5.2) over (1.5.1) ...
Preparing to unpack .../17-wb-scenarios_1.2.1_all.deb ...
Unpacking wb-scenarios (1.2.1) over (1.1.0) ...
Preparing to unpack .../18-zigbee2mqtt_2.1.1-wb101_armhf.deb ...
pnpm is not installed. Install via corepack...
Unpacking zigbee2mqtt (2.1.1-wb101) over (2.1.1-wb101) ...
Progress: [ 80%] [#######################################################
ну и
Setting up zigbee2mqtt (2.1.1-wb101) ...
Configuration file '/mnt/data/root/zigbee2mqtt/data/configuration.yaml'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** configuration.yaml (Y/I/N/O/D/Z) [default=N] ? n
Adding dependencies for pnpm
✔ The modules directory at "/mnt/data/root/zigbee2mqtt/node_modules" will be removed and reinstalled from scratch. Proceed? (Y/n) · true
Recreating /mnt/data/root/zigbee2mqtt/node_modules
Lockfile is up to date, resolution step is skipped
Packages: +366
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 366, reused 0, downloaded 366, added 366, done
dependencies:
+ ajv 8.17.1
+ bind-decorator 1.0.11
+ debounce 2.2.0
+ express-static-gzip 2.2.0
+ fast-deep-equal 3.1.3
+ finalhandler 1.3.1
(много пакетов)
После обновления - активен, запущен:
systemctl status zigbee2mqtt
● zigbee2mqtt.service - zigbee2mqtt
Loaded: loaded (/lib/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-04-02 14:04:34 UTC; 3min 2s ago
Main PID: 2285 (npm start)
Tasks: 23 (limit: 2354)
Memory: 99.7M
CPU: 58.955s
CGroup: /system.slice/zigbee2mqtt.service
├─2285 npm start
├─2595 sh -c node index.js
└─2598 node index.js
Apr 02 14:04:34 wirenboard-AQASN7R6 systemd[1]: Started zigbee2mqtt.
Apr 02 14:04:47 wirenboard-AQASN7R6 npm[2285]: > zigbee2mqtt@2.1.1 start
Apr 02 14:04:47 wirenboard-AQASN7R6 npm[2285]: > node index.js
Apr 02 14:04:52 wirenboard-AQASN7R6 npm[2598]: Starting Zigbee2MQTT without watchdog.
x.7z (596,5 КБ)
Вот из journalctl. В районе 12:00
Я искренне верю, что у Вас работает. Я не пойму причину такого поведения у меня. Возможно перезапуск какого-то сервиса валит z2m. Может еще что-то.
x.txt (735,2 КБ)
Прошу прощения. Вот лог с остальными сервисами. Я ничего криминального не увидел.
Да, в процеcсе обновления сервис перезапускался:
Apr 02 12:03:11 wirenboard-AQA7SWQH npm[31698]: [2025-04-02 12:03:11] info: z2m: Zigbee2MQTT started!
Apr 02 12:02:53 wirenboard-AQA7SWQH npm[31698]: Starting Zigbee2MQTT without watchdog.
Apr 02 12:02:51 wirenboard-AQA7SWQH npm[31561]: > node index.js
Apr 02 12:02:51 wirenboard-AQA7SWQH npm[31561]: > zigbee2mqtt@2.1.1 start
Apr 02 12:02:46 wirenboard-AQA7SWQH systemd[1]: Started zigbee2mqtt.
Apr 02 12:02:46 wirenboard-AQA7SWQH systemd[1]: zigbee2mqtt.service: Consumed 37min 52.600s CPU time.
Apr 02 12:02:46 wirenboard-AQA7SWQH systemd[1]: Stopped zigbee2mqtt.
Apr 02 12:02:46 wirenboard-AQA7SWQH systemd[1]: zigbee2mqtt.service: Succeeded.
Сервисы зависимые от обновляемых могут перезапускаться автоматически.
В продолжении темы.
Вот сейчас обновил:
Смотрю статус:
Сеть Zigbee лежит, хотя сервис запущен.
Диагностика в этот момент:
Дальше перезапускаю сервис и сеть Zigbee оживает:
Архив после перезапуска.
Куда стукнуть?
В данной ситуации Zigbee времянка. Это тест на даче. В реальной жизни никакого Zigbee не будет. Но “как-то не аккуратненько”.
Что-то форматирование всё попадало и не поддается исправлению… Вызывайте батюшку… )))
Поправил форматирование руками. У code крыша съезжает. Сделал через цитирование.
То есть сам сервис работает, насколько я вижу. Ну, попробую воспроизвести.
Сам сервис да, работает. Но после обновлений (и как следствие рестарта каких-то других сервисов) перестает общение с железом. Сейчас да, точно вспоминаю, что началось с обновлением прошивки Zigbee модуля.
Могу дать доступ, возможно так проще будет воспроизвести.
Для интереса попробовал даже прошивку в модуль “старую”
Ну и перезапускал сервисы. Не выходит воспроизвести. Способ уронить - только потыкать в порт модуля, то есть деконфигурировать его.
От прошивки модуля не зависит.
Глобально я на проблему забил. Просто делаю apt update && apt upgrade -y && service zigbee2mqtt restart
Это поведение стабильно проявляется, когда обновляются пакеты. Так что как обновите что-то в репозитории, можно продолжить. Обновлялся только вчера с таким же поведением. Обновляемся, ждем минуту-две и zigbee ложится до перезагрузки z2m.
Но если Вам интересно разобраться, могу дать доступ. Объект тестовый, можно играться.
Приглашение отправил.
AQA7SWQH
Вот именно сегодня тоже обновился.
root@wirenboard-AQASN7R6:~# apt upgrade -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
cmux hubpower libwbmqtt1-4 python-wb-io python3-all python3-distutils python3-lib2to3
Use 'apt autoremove' to remove them.
The following packages will be upgraded:
wb-mqtt-serial wb-release-info
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,089 kB of archives.
After this operation, 164 kB of additional disk space will be used.
Get:1 https://deb.wirenboard.com/wb7/bullseye testing/main armhf wb-release-info all 1.0-testing~wb7+bullseye~20250418083835 [1,672 B]
Get:2 https://deb.wirenboard.com/wb7/bullseye testing/main armhf wb-mqtt-serial armhf 2.159.0 [1,087 kB]
Fetched 1,089 kB in 2s (517 kB/s)
(Reading database ... 51093 files and directories currently installed.)
Preparing to unpack .../wb-release-info_1.0-testing~wb7+bullseye~20250418083835_all.deb ...
Unpacking wb-release-info (1.0-testing~wb7+bullseye~20250418083835) over (1.0-testing~wb7+bullseye~20250417115003) ...
Setting up wb-release-info (1.0-testing~wb7+bullseye~20250418083835) ...
(Reading database ... 51093 files and directories currently installed.)
Preparing to unpack .../wb-mqtt-serial_2.159.0_armhf.deb ...
Unpacking wb-mqtt-serial (2.159.0) over (2.158.10) ...
Setting up wb-mqtt-serial (2.159.0) ...
Я уверен, что у всех остальных всё нормально. Что у меня так “звезды сошлись”.
Я собственно и говорю как стабильно воспроизвести “у меня”.
Если интересно разобраться (вдруг какая-то бага неочевидная) - я дал доступ. Если не интересно - я забью. Мне перезапускать z2m после обновления не в напряг.
Немного локализовал проблему.
root@wirenboard-AQA7SWQH:~# service wb-mqtt-serial restart
После этого Zigbee сеть ложится. Пока не произойдет:
root@wirenboard-AQA7SWQH:~# service zigbee2mqtt restart
После перезапуска всё приходит в норму.
О как… Так, а есть ли правила, которые что-нибудь публикуют из wb-mqtt-seral в топики zigbee2mqtt?
Например null, который публикует wb-mqtt-serial при остановке-запуске?
Есть 2 правила, которые работают с mqtt:
Туевской лампе делаю осмысленное виртуальное устройство. Раз:
/**
* Convert RGB to XY
*/
function RGBtoXY(red,green,blue){
red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);
green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);
blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);
var X = red * 0.664511 + green * 0.154324 + blue * 0.162028;
var Y = red * 0.283881 + green * 0.668433 + blue * 0.047685;
var Z = red * 0.000088 + green * 0.072310 + blue * 0.986039;
var fx = X / (X + Y + Z);
var fy = Y / (X + Y + Z);
return [fx.toPrecision(4),fy.toPrecision(4)];
}
function makeVirtualTuyaLamp(deviceName, deviceNameRU, lampDeviceID) {
defineVirtualDevice(deviceName, {
title: deviceNameRU,
cells: {
state: {
title: "Включено",
type: "switch",
value: false
},
brightness: {
title: "Яркость",
type: "range",
min: 0,
max: 254,
value: 254
},
colortemp: {
title: "Цветовая температура",
type: "value",
value: 250,
enum: {
0: {ru: "RGB Control"},
153: {ru: "Coolest"},
250: {ru: "4000K Cool"},
370: {ru: "2700K Neutral"},
454: {ru: "2200K Warm"},
500: {ru: "Warmest"}
},
readonly: false
},
color: {
title: "Цвет",
type: "rgb",
value: false
},
}
});
defineRule(deviceName + "_state", {
whenChanged: [deviceName + "/state",deviceName + "/brightness", deviceName + "/colortemp", deviceName + "/color"],
then: function (newValue, devName, cellName) {
var vState;
if (dev[deviceName + "/state"] == true){ vState = "ON";} else { vState = "OFF";}
var vBright = dev[deviceName + "/brightness"];
var vColTemp = dev[deviceName + "/colortemp"];
var jsnXY;
if(vColTemp == 0) { // XY
var vColRGB = dev[deviceName + "/color"].toString().split(";");
var XY = RGBtoXY(vColRGB[0], vColRGB[1], vColRGB[2]);
var jsnXY = {
state: vState,
brightness: vBright,
color: {
hue: 240,
saturation: 100,
x: XY[0],
y: XY[1]
}
}
}
else { // Color temperature
var jsnXY = {
state: vState,
brightness: vBright,
color_temp: vColTemp,
}
}
var jsToSend = JSON.stringify(jsnXY);
//log(jsToSend);
publish("zigbee2mqtt/" + lampDeviceID + "/set", jsToSend);
}
});
}
makeVirtualTuyaLamp("koridor_lamp", "Лампа в коридоре", "ZB_LAMP_ENTRANCE");
Ночной режим это условно 2 состояния. Когда я на даче и когда нет. Два:
defineVirtualDevice("night_mode", {
title: "Ночной режим",
cells: {
night: {
type: "switch",
value: false
},
}
});
defineRule({
whenChanged: "cityron-pu-3_1/Panel Status",
then: function (newValue, devName, cellName) {
dev["night_mode/night"] = !newValue;
}
});
defineRule({
whenChanged: "night_mode/night",
then: function (newValue, devName, cellName) {
dev["wb-mr6cu_175/K1"] = true; // Гараж
dev["wb-mr6cu_175/K2"] = true; // Вход
dev["wb-mr6cu_175/K3"] = newValue; // Сортир
dev["wb-mr6cu_175/K4"] = newValue; // Зал
dev["wb-mr6c_73/K1"] = !newValue; // Реле в зале
dev["cityron-pu-3_1/Panel Status"] = !newValue;
var vState;
if (newValue == true){
// Ночной режим. Гасим что не нужно.
vState = "OFF";
dev["l_Entrance/tmr_enabled"] = false; // Свет в коридоре, если включен
dev["wb-led_181/Channel 1"] = false; // LED Studio up
dev["wb-led_181/Channel 2"] = false; // LED Studio down
}
else {
// Дневной режим.
vState = "ON";
}
// Розетка в зале на печки
publish("zigbee2mqtt/ZB_SOCKET_ZAL/set", JSON.stringify({state: vState }));
// Свет
publish("zigbee2mqtt/ZB_SWITCH_ZAL/set", JSON.stringify({state: vState }));
}
});
defineRule("ZB_BUTTON_rule", {
whenChanged: "ZB_BUTTON/action",
then: function (newValue, devName, cellName) {
switch(dev["ZB_BUTTON/action"]){
case "hold": {
dev["night_mode/night"] = !dev["night_mode/night"];
break;
}
case "double": {
dev["wb-led_181/Channel 1"] = !dev["wb-led_181/Channel 1"]; // LED Studio up
dev["wb-led_181/Channel 2"] = !dev["wb-led_181/Channel 2"]; // LED Studio down
break;
}
case "single": {
publish("zigbee2mqtt/ZB_SWITCH_ZAL/set", JSON.stringify({state: "TOGGLE" }));
break;
}
default: { break; }
}
dev["ZB_BUTTON/action"] = "none";
}
});