Теряется связь с облаком WB8.5.3 wb-2602

У меня есть 2 контроллера wb8. Облако для меня очень нужная штука, которой я пользуюсь постоянно.
Проблема в том, что периодически с контроллером нет связи через облако или она подвисает. Помогает перезагрузка, но только на время. Раньше надо было перезагружать раз в 7-14 дней, а последние 2 раза чуть ли не через день.

приложен диагностический архив, доступен только сотрудникам поддержки
(412,3 КБ)

приложен диагностический архив, доступен только сотрудникам поддержки
(543,4 КБ)

Добрый день!

В обоих случаях вижу ошибки, связанные с работой крипточипа:

May 16 13:57:48 wirenboard-AEVBRGO wb-cloud-agent[3075]: RuntimeError: Cert /var/lib/wb-cloud-agent/device_bundle.crt.pem and key ATECCx08:00:02:C0:00 seem to be inconsistent (possibly because of CPU board missmatch)!
May 16 01:25:31 wirenboard-AZMJSADU wb-cloud-agent[1338958]: RuntimeError: Cert /var/lib/wb-cloud-agent/device_bundle.crt.pem and key ATECCx08:00:02:C0:00 seem to be inconsistent (possibly because of CPU board missmatch)!```

Наши инженеры оповещены об этой проблеме и разбираются. Как будет информация об исправлении, вас оповестим.

Здравствуйте. Есть информация или рекомендации?

Вчера днём обновился, а сейчас связь пропала…

Ошибка такая же или уже другая причина?

Пришлите, пожалуйста, архив.

приложен диагностический архив, доступен только сотрудникам поддержки
(467,6 КБ)

Ошибка аналогичная:

May 16 01:28:49 wirenboard-AZMJSADU wb-cloud-agent[1338958]: RuntimeError: Cert /var/lib/wb-cloud-agent/device_bundle.crt.pem and key ATECCx08:00:02:C0:00 seem to be inconsistent (possibly because of CPU board missmatch)!

Инженеры сообщили, что пока решения нет. Через время само должно восстановиться.

В 2:08 это всё “легло”, а в 7 утра пришлось просить людей на месте перезагрузить контроллер тк клиенты не могли зайти и управлять процессами…

Так что будем ждать новостей. Надеемся на скорое решение. Спасибо за помощь.

Сообщите пожалуйста, когда решится эта проблема.

Да, когда задачу закроют, мы автоматически вам уведомим.

приветствую!
инженеры занимаются; проблема, к сожалению, плавающая

выкатили предполагаемый (у себя пока не можем воспроизводить стабильно, поэтому предполагаемый) фикс; просьба проверить и отписаться о результатах

как проверить:

  1. выкачать .deb; положить на wb
  2. на wb выполнить: apt install ./дебка --reinstall; sync; reboot
  3. для проверки после перезагрузки выполнить на wb: uname -a (ожидаем вывод похожий на название дебки)
  4. наблюдать; отвалы должны пропасть

Я поставил на 1 контроллер, 2й пока трогать не буду. Если всё ок, поставлю на 2й

Linux wirenboard-AZMJSADU 6.8.0-wb155 #1 SMP Fri May 22 09:03:14 UTC 2026 aarch64 GNU/Linux

Всё, нет связи с агентом…

приложен диагностический архив, доступен только сотрудникам поддержки
(504,7 КБ)

Сделал “костыль” на случай потери связи. Это хоть какое-то временное решение на этот случай. Иначе нам дорого стоит перезагружать его каждый раз вручную.

// ==================================================
// Watchdog: перезагрузка при потере доступа к облаку
// Всё в одном виртуальном устройстве
// ==================================================

var PING_HOST = "agent.wirenboard.cloud";
var MAX_FAILURES = 3;
var CHECK_INTERVAL = 60;

var failureCounter = 0;
var rebootCounter = 0;
var totalFailures = 0;
var autoResetTimer = null;

// Единое виртуальное устройство
defineVirtualDevice("cloud_watchdog", {
    title: "Cloud Watchdog",
    cells: {
        // === СТАТУСЫ ===
        "status": { type: "text", value: "Monitoring...", readonly: true },
        "failures_current": { type: "value", value: 0, readonly: true },
        "failures_total": { type: "value", value: 0, readonly: true },
        "reboots_total": { type: "value", value: 0, readonly: true },
        "last_reboot": { type: "text", value: "Never", readonly: true },
        "last_reboot_reason": { type: "text", value: "None", readonly: true },
        "rebooted_by_watchdog": { type: "switch", value: false, readonly: true },
        "auto_reset_in": { type: "text", value: "None", readonly: true },
        
        // === НАСТРОЙКИ (можно менять) ===
        "max_failures": { type: "value", value: MAX_FAILURES, readonly: false },
        "check_interval": { type: "value", value: CHECK_INTERVAL, readonly: false },
        
        // === УПРАВЛЕНИЕ ===
        "reset_watchdog_flag": { type: "switch", value: false, readonly: false },
        "reset_counters": { type: "switch", value: false, readonly: false },
        "reboot_now": { type: "switch", value: false, readonly: false }
    }
});

// Функция сброса индикатора
function resetRebootFlag() {
    if (autoResetTimer) {
        clearInterval(autoResetTimer.timer);
        clearTimeout(autoResetTimer.timeout);
        autoResetTimer = null;
    }
    dev.cloud_watchdog.rebooted_by_watchdog = false;
    dev.cloud_watchdog.auto_reset_in = "None";
    log("Cloud watchdog: reboot flag auto-reset after 1 hour");
}

// Функция обновления обратного отсчёта
function startAutoResetTimer(delayMs) {
    if (autoResetTimer) {
        clearInterval(autoResetTimer.timer);
        clearTimeout(autoResetTimer.timeout);
    }
    
    var endTime = Date.now() + delayMs;
    
    var timer = setInterval(function() {
        var remaining = endTime - Date.now();
        if (remaining <= 0) {
            clearInterval(timer);
            dev.cloud_watchdog.auto_reset_in = "0s";
        } else {
            var hours = Math.floor(remaining / 3600000);
            var minutes = Math.floor((remaining % 3600000) / 60000);
            var seconds = Math.floor((remaining % 60000) / 1000);
            
            if (hours > 0) {
                dev.cloud_watchdog.auto_reset_in = hours + "h " + minutes + "m " + seconds + "s";
            } else if (minutes > 0) {
                dev.cloud_watchdog.auto_reset_in = minutes + "m " + seconds + "s";
            } else {
                dev.cloud_watchdog.auto_reset_in = seconds + "s";
            }
        }
    }, 1000);
    
    var timeout = setTimeout(resetRebootFlag, delayMs);
    
    autoResetTimer = { timer: timer, timeout: timeout };
}

// Функция перезагрузки
function rebootSystem(reason) {
    rebootCounter++;
    
    log("========================================");
    log("Cloud watchdog: " + reason);
    log("Reboot #" + rebootCounter);
    log("========================================");
    
    dev.cloud_watchdog.rebooted_by_watchdog = true;
    dev.cloud_watchdog.status = "REBOOTING (#" + rebootCounter + ")";
    dev.cloud_watchdog.last_reboot = new Date().toLocaleString();
    dev.cloud_watchdog.last_reboot_reason = reason;
    dev.cloud_watchdog.reboots_total = rebootCounter;
    
    // Запускаем таймер автосброса через 1 час
    startAutoResetTimer(3600000);
    
    // Задержка и перезагрузка
    runShellCommand("sleep 2 && reboot", { exitCallback: function() {} });
}

// Функция проверки облака
function checkCloud() {
    // Получаем текущие настройки из виртуального устройства
    var currentMaxFailures = dev.cloud_watchdog.max_failures;
    if (currentMaxFailures < 1) currentMaxFailures = 1;
    
    runShellCommand("ping -c 1 -W 10 " + PING_HOST + " > /dev/null 2>&1", {
        exitCallback: function(exitCode) {
            if (exitCode === 0) {
                if (failureCounter > 0) {
                    log("Cloud watchdog: Connection restored after " + failureCounter + " failures");
                }
                failureCounter = 0;
                dev.cloud_watchdog.status = "OK";
                dev.cloud_watchdog.failures_current = 0;
            } else {
                failureCounter++;
                totalFailures++;
                
                dev.cloud_watchdog.status = "ERROR (" + failureCounter + "/" + currentMaxFailures + ")";
                dev.cloud_watchdog.failures_current = failureCounter;
                dev.cloud_watchdog.failures_total = totalFailures;
                
                log("Cloud watchdog: Ping failed! Failures: " + failureCounter + "/" + currentMaxFailures);
                
                if (failureCounter >= currentMaxFailures) {
                    rebootSystem("Cloud unreachable after " + currentMaxFailures + " failures (crypto key issue)");
                }
            }
        }
    });
}

// === ОБРАБОТЧИКИ УПРАВЛЕНИЯ ===

// Ручной сброс флага перезагрузки
defineRule("handle_reset_flag", {
    whenChanged: "cloud_watchdog/reset_watchdog_flag",
    then: function(newValue) {
        if (newValue === true) {
            if (autoResetTimer) {
                clearInterval(autoResetTimer.timer);
                clearTimeout(autoResetTimer.timeout);
                autoResetTimer = null;
            }
            dev.cloud_watchdog.rebooted_by_watchdog = false;
            dev.cloud_watchdog.auto_reset_in = "None";
            log("Cloud watchdog: reboot flag manually reset");
            dev.cloud_watchdog.reset_watchdog_flag = false;
        }
    }
});

// Сброс всех счётчиков
defineRule("handle_reset_counters", {
    whenChanged: "cloud_watchdog/reset_counters",
    then: function(newValue) {
        if (newValue === true) {
            totalFailures = 0;
            rebootCounter = 0;
            failureCounter = 0;
            dev.cloud_watchdog.failures_total = 0;
            dev.cloud_watchdog.reboots_total = 0;
            dev.cloud_watchdog.failures_current = 0;
            dev.cloud_watchdog.last_reboot_reason = "None";
            dev.cloud_watchdog.status = "OK";
            log("Cloud watchdog: all counters reset");
            dev.cloud_watchdog.reset_counters = false;
        }
    }
});

// Принудительная перезагрузка (ручная)
defineRule("handle_reboot_now", {
    whenChanged: "cloud_watchdog/reboot_now",
    then: function(newValue) {
        if (newValue === true) {
            rebootSystem("Manual reboot requested");
            dev.cloud_watchdog.reboot_now = false;
        }
    }
});

// Обновление интервала проверки при изменении настройки
defineRule("handle_interval_change", {
    whenChanged: "cloud_watchdog/check_interval",
    then: function(newValue) {
        if (newValue >= 10 && newValue <= 3600) {
            log("Cloud watchdog: check interval changed to " + newValue + " seconds");
            // Перезапуск цикла проверки
            if (global.checkInterval) clearInterval(global.checkInterval);
            global.checkInterval = setInterval(checkCloud, newValue * 1000);
        }
    }
});

// === ЗАПУСК ===

// Запускаем периодическую проверку
var checkIntervalId = setInterval(checkCloud, CHECK_INTERVAL * 1000);
global.checkInterval = checkIntervalId;

// Первая проверка через 5 секунд
setTimeout(checkCloud, 5000);

// Лог запуска
log("========================================");
log("Cloud Watchdog STARTED");
log("Checking: " + PING_HOST);
log("========================================");

Добрый день!

После установки фикса контролер перезагружали?

Да, в вашей команде сразу прописан ребут.
После установки перезагрузил.
Потом, через час, связь пропала и его перезагрузили снова.
В процессе редактирования правил перезагрузил раза 2.

На данный момент выходные отработал без каких-то проблем со связью. Будем наблюдать дальше

Добрый день!

Еще проблемы с сервисом наблюдались?

приложен диагностический архив, доступен только сотрудникам поддержки
(564,3 КБ)

Только что проверил контроллер и увидел, что сегодня утром произошла перезагрузка контроллера из-за того, что было недоступно подключение к облаку. Контроллер перезагрузился сам по скрипту выше.
“Костыль” работает, но это костыль…

В 8:09 по времени контроллера - это 11:09 по местному времени

Благодарю, приложил к багрепорту.