Добрый день!
Столкнулся с такой ошибкой.
| 07-07-2026 08:44:52.317 [wb-mqtt-serial] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:52.314 [wb-mqtt-adc] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:51.742 [wb-mqtt-db.service] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:51.641 [wb-device-manager] |
[WARNING] Mqtt: disconnect from unix:///var/run/mosquitto/mosquitto.sock → 1 |
| 07-07-2026 08:44:51.311 [wb-mqtt-adc] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:51.310 [wb-mqtt-serial] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:50.741 [wb-mqtt-db.service] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:50.545 [wb-mqtt-metrics] |
Unexpected disconnection. |
| 07-07-2026 08:44:50.310 [wb-mqtt-adc] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:50.309 [mosquitto] |
1783392290: Client wb-adc disconnected due to out of memory. |
| 07-07-2026 08:44:50.307 [wb-mqtt-serial] |
WARNING: [mqtt] connection lost |
| 07-07-2026 08:44:50.306 [mosquitto] |
1783392290: Client wb-modbus disconnected due to out of memory. |
| 07-07-2026 08:44:50.304 [mosquitto] |
1783392290: Client wb-cloud-agent@wirenboard.cloud-kYJxQIP9 disconnected due to out of memory. |
| 07-07-2026 08:44:50.301 [mosquitto] |
1783392290: New client connected from /var/run/mosquitto/mosquitto.sock:0 as wb-cloud-agent@wirenboard.cloud-kYJxQIP9 (p2, c1, k60). |
| 07-07-2026 08:44:50.299 [mosquitto] |
1783392290: New connection from /var/run/mosquitto/mosquitto.sock:0 on port 0. |
| 07-07-2026 08:44:50.129 [wb-mqtt-adc] |
INFO: [mqtt] subscription succeeded (message id 61092) |
| 07-07-2026 08:44:50.128 [wb-mqtt-adc] |
INFO: [mqtt] connection estabilished with code “0” |
| 07-07-2026 08:44:50.127 [mosquitto] |
1783392290: New client connected from /var/run/mosquitto/mosquitto.sock:0 as wb-adc (p2, c0, k60). |
| 07-07-2026 08:44:50.127 [mosquitto] |
1783392290: New connection from /var/run/mosquitto/mosquitto.sock:0 on port 0. |
Для того чтобы не было такой ошибки хочу увеличить swap через /mnt/data.
Можно ли так делать и как это может повлиять на контроллер?
Добрый день, Дмитрий
Увеличивать swap в данном случае не нужно, он на эту ошибку не повлияет.
Сообщение out of memory здесь и далее означает срабатывание внутреннего лимита памяти самого MQTT-брокера mosquitto, а не нехватку оперативной памяти на контроллере. Своп этот лимит не расширяет.
Похожая проблема сейчас в работе у наших разработчиков. Чтобы подтвердить, что у вас именно она, пришлите, пожалуйста, вывод команд:
mosquitto_sub -t '$SYS/broker/heap/current' -C 1
systemctl status mosquitto | grep -E "Memory|Active"
free -h
dpkg -l | grep mosquitto
Первая команда показывает внутренний счётчик памяти брокера, вторая его фактическое потребление.
Также пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.
Сами сервисы контроллера при таком сбое обычно переподключаются к брокеру автоматически.
Можно поднять лимиты: Mosquitto - Out of memory, отчего падает и не поднимается z2m - #30 от пользователя fedd
Ну и да, комбинировать с презапуском по крону - тоже.
Для полноты диагностики - примените пожалуйста
log.info("ramLog: запуск");
function makeNewVirtualControl(vdName, nameControl, typeControl) {
// Создаём только если его ещё нет — иначе defineVirtualDevice даст исключение
// "Device with given ID already exists".
if (getDevice(vdName) === undefined) {
log.info("Создаём виртуальное устройство {}", vdName);
defineVirtualDevice(vdName, {
title: vdName,
cells: {}
});
} else {
log.debug("Устройство {} уже существует, пропускаем создание", vdName);
}
var vdev = getDevice(vdName);
if (vdev && !vdev.isControlExists(nameControl)) {
log.debug("Контрола {} нет, создаем.", nameControl);
vdev.addControl(nameControl, typeControl);
}
}
var RAM_VDEV_NAME = "ramLog";
var RAM_CONTROL_NAME = "occupedMosquittoRAM";
makeNewVirtualControl(RAM_VDEV_NAME, RAM_CONTROL_NAME, {
type: "value",
value: 0,
units: "kB",
readonly: true,
forceDefault: false
});
function updateWbMosquittoRamUsage() {
// Суммируем RSS (kB) для всех процессов.
runShellCommand("ps -C mosquitto -o rss= | awk '{sum+=$1} END {print (sum ? sum : 0)}'", {
captureOutput: true,
exitCallback: function (exitCode, capturedOutput) {
if (exitCode !== 0) {
log.warning("ramLog: команда завершилась с кодом {}", exitCode);
return;
}
var value = parseInt(String(capturedOutput).trim(), 10);
if (isNaN(value)) {
log.warning("ramLog: не удалось разобрать значение RAM из '{}'", capturedOutput);
return;
}
dev[RAM_VDEV_NAME + "/" + RAM_CONTROL_NAME] = value;
log.debug("ramLog: RSS = {} kB", value);
}
});
}
// Первичное обновление при старте скрипта.
updateWbMosquittoRamUsage();
// Обновление каждую минуту.
setInterval(function () {
updateWbMosquittoRamUsage();
}, 60 * 1000);
Дмитрий, подскажите также какую версию Home Assistant используете?
Скрипт запустил но пока только это в логах
| 8-07-2026 23:25:36.124 [wb-rules] |
INFO: reloading file: /etc/wb-rules/log_debug_mqtt.js |
| 08-07-2026 23:25:35.149 [wb-mqtt-db.service] |
INFO: [sqlite] Creating channel ramLog/occupedMosquittoRAM |
| 08-07-2026 23:25:35.143 [wb-rules] |
INFO: [rule info] Создаём виртуальное устройство ramLog |
| 08-07-2026 23:25:35.142 [wb-rules] |
ERROR: [rule error] Error in getting device: Device with given ID doesn’t exist |
| 08-07-2026 23:25:35.139 [wb-rules] |
INFO: [rule info] ramLog: запуск |
после перезапуска mosquitto стало так
а было 100243 кб
и еще этот параметр увеличил memory_limit 200000000 а был 100000000
image: homeassistant/home-assistant:2026.6.4
Оно ж в историю собирается? То есть интересен график, по сути.
Ну и - да, увеличение лимитов проблему не устранит но сгладит. До обновления самого брокера.