Jump to content

Wiren Board Cloud — удалённое администрирование

From Wiren Board
This is the approved revision of this page, as well as being the most recent.

Описание

Wiren Board Cloud — сервис удалённого администрирования систем автоматизации на контроллерах Wiren Board. Подробное описание возможностей

Демонстрация.

Что умеет облако:

  • открывать веб-интерфейс контроллера из любой точки мира — без белого IP и проброса портов;
  • терминал SSH и файловый менеджер прямо в браузере;
  • открывать веб-интерфейсы сервисов на контроллере: Home Assistant, Node-RED, Zigbee2MQTT и других;
  • собирать метрики контроллеров и строить графики в облачной Grafana;
  • присылать оповещения в Telegram, Discord и на почту, когда метрика в Grafana вышла за заданные рамки;
  • давать совместный доступ к контроллерам другим людям — через организации и роли;
  • скачивать диагностический архив контроллера в пару кликов.

Работает на контроллерах Wiren Board 6 и новее. Интерфейс — на русском и английском.

Ошибки и пожелания присылайте на портал техподдержки. К сообщению о проблеме приложите диагностический архив — его можно скачать прямо из облака.

Полезные ссылки:

Варианты

Wiren Board Cloud существует в двух вариантах:

  • https://wirenboard.cloud — публичное облако. Бесплатное, без ограничений по количеству контроллеров.
  • On-Premise — тот же сервис на вашем сервере. Бесплатно до 100 контроллеров на экземпляр; для парков в сотни и тысячи контроллеров планируется платная версия.

Используйте самые свежие релизы On-Premise — в них выходят исправления безопасности. Следите за новыми версиями в списке изменений и регулярно обновляйте свою установку.

Демо-аккаунт

Облако можно посмотреть без регистрации и контроллера: на странице входа нажмите «Демо-аккаунт» — откроется личный кабинет с реальными контроллерами в режиме «только просмотр». Подробнее — на странице «Демонстрация работы».

Быстрый старт

Шаг 1. Создайте аккаунт

Страница входа: регистрация, восстановление пароля, демо-аккаунт
  1. Откройте https://wirenboard.cloud и нажмите «Регистрация».
  2. Укажите email и пароль — не короче 10 символов и не из одних цифр.
  3. Подтвердите почту по ссылке из письма (действует сутки). Письма приходят с адреса info@wirenboard.com — проверьте «Спам», если письма нет.

Вход — только по email и паролю, сторонних входов (Google, Яндекс и т. п.) нет. Вместе с аккаунтом создаётся личная организация с именем, равным email: контроллеры в облаке всегда привязаны к организации (подробнее).

Шаг 2. Проверьте агент на контроллере

На контроллер должен быть установлен агент wb-cloud-agent. В релизах ПО wb-2407 и новее он уже предустановлен (как узнать релиз ПО на контроллере).

На релизах старше wb-2407 (например, wb-2207) агент надо поставить вручную:

apt update; apt install wb-cloud-agent

Шаг 3. Добавьте контроллер в облако

Ссылка на добавление в веб-интерфейсе контроллера

По умолчанию контроллер к облаку не привязан:

  1. Откройте веб-интерфейс контроллера: НастройкиСистема → ссылка в разделе Подключение к облаку.
  2. Откроется страница добавления; если вы ещё не вошли в облако, сначала появится страница входа. Подтвердите добавление.

Та же ссылка есть в консоли — подключитесь по SSH и введите wb-cloud-agent:

# wb-cloud-agent
| Provider         | Controller Url / Activation Url                    |
|------------------|----------------------------------------------------|
| wirenboard.cloud | https://wirenboard.cloud/controllers?add=3d5...790 |

Ссылка действует 4 часа и меняется при перезапуске агента или контроллера. Не сработала — возьмите свежую.

Команда показывает состояние с задержкой: агент опрашивает облако раз в 10 секунд. После привязки или отвязки подождите несколько секунд.

Шаг 4. Готово

Контроллер появится в списке со статусом «Работает». Главные кнопки его страницы — «Веб-интерфейс», «SSH и файлы», «Grafana», «Сервисы» — описаны в разделе Доступ к контроллеру через облако.

Количество контроллеров в публичном облаке не ограничено.

Привязка к организации хранится в облаке, а авторизация идёт по аппаратному ключу, который не стирается при factory reset, — после сброса контроллер снова подключится сам. Перед продажей или передачей контроллера удалите его из своего облака — см. Отключение контроллера от облака.

Принцип работы

На контроллере работает агент wb-cloud-agent. Он соединяется с облаком, получает из него настройки и поднимает три сервиса (для публичного облака):

  • wb-cloud-agent@wirenboard.cloud — связь с облаком: статус, команды из личного кабинета;
  • wb-cloud-agent-frpc@wirenboard.cloud — туннели для доступа к веб-интерфейсу, терминалу и сервисам;
  • wb-cloud-agent-metrics@wirenboard.cloud — отправка метрик для Grafana.

Данные передаются по защищённым каналам. Авторизация контроллера — по ключу в аппаратном крипточипе ATECCx08; скопировать или подделать его нельзя.

Подробнее об архитектуре — в докладе Собственное облако, новый конфигуратор устройств и другие новости софта Wiren Board.

Порты

Здесь речь о сетевых портах между контроллером и облаком — пользователь с ними напрямую не работает. Это не локальные порты сервисов контроллера, которые указываются при добавлении сервиса.

Пробрасывать порты и иметь белый IP не нужно — все соединения исходящие с контроллера:

Контроллер может стоять за NAT. Порты облака наружу не открываются — туннельные порты существуют только внутри его инфраструктуры.

Справочник команд wb-cloud-agent

Полная справка: wb-cloud-agent -h.

Команда Что делает
wb-cloud-agent Показывает таблицу провайдеров со ссылкой на страницу контроллера (если привязан) или ссылкой на добавление
wb-cloud-agent add-provider <URL> Добавляет облако (провайдера) и запускает его сервисы. Для публичного облака: add-provider https://wirenboard.cloud
wb-cloud-agent del-provider <имя> Останавливает сервисы облака и удаляет его настройки с контроллера. Принимает имя (wirenboard.cloud) или URL
wb-cloud-agent del-all-providers Удаляет все настроенные облака разом
wb-cloud-agent cloud-unbind <URL> Удаляет запись контроллера на сервере облака — контроллер отвязывается от организации и появляется заново со свежей ссылкой на добавление
wb-cloud-agent use-on-premise <URL> Для On-Premise: удаляет всех провайдеров и подключает контроллер к вашему серверу

Личный кабинет

Список контроллеров

В списке — все контроллеры выбранной организации: статус, серийный номер, «Онлайн с», версия ПО, описание, группа.

  • «Работает» — агент на связи; «Проблема» — связи нет, рядом время, с которого контроллер недоступен.
  • Есть поиск по серийному номеру, версии, описанию и группе, фильтр по группам, карта всех контроллеров.
  • Кнопка в шапке выгружает список в CSV или XLSX.
  • Пустой список показывает подсказку «Как подключить контроллер».
Список контроллеров организации
Поиск и фильтры списка
Группы контроллеров

Группы контроллеров

Группы позволяют раскладывать контроллеры по объектам или заказчикам. Это дерево до 3 уровней вложенности; группы принадлежат организации.

  • Создание, переименование и удаление групп — в списке контроллеров.
  • В группу контроллер переносится из карточки или массово: чекбоксы → «Переместить»«Переместить в другую группу».
  • При удалении группы контроллеры остаются в организации без группы.
  • Фильтр по группе захватывает вложенные подгруппы.

Страница контроллера

Страница контроллера; раскрыто меню диагностики

На странице контроллера:

  • кнопки доступа: «Веб-интерфейс», «SSH и файлы», «Grafana», кнопки добавленных сервисов, «Сервисы» (настройка);
  • редактируемые Описание и Группа;
  • переключатель «Отправка метрик» (см. Метрики и облачная Grafana);
  • заметки «название — содержимое» («Добавить заметку», до 100) — адрес объекта, контакты, номер договора;
  • местоположение на карте — вручную или геопоиском;
  • четыре графика за последний час: средняя загрузка за 15 минут (load15), свободная RAM, место в / и /mnt/data (при включённых метриках, обновление раз в минуту);
  • внизу — «Опрошен агент» и «Получены метрики» со временем последней связи.

Диагностика из облака

Кнопки диагностики

Диагностический архив можно получить прямо из личного кабинета, без SSH:

  1. На странице контроллера нажмите «Запросить диагностику».
  2. Дождитесь сбора и нажмите «Скачать диагностику» — скачается zip-архив.
  3. Приложите архив к обращению на портал техподдержки.

Нужен агент 1.5.0+ и контроллер на связи.

Организации и совместный доступ

Список организаций: роли и сводка по проблемам

Организация — «папка» с контроллерами и списком людей с доступом к ним. Контроллер привязан ровно к одной организации; пользователь может состоять в нескольких.

  • При регистрации создаётся личная организация с именем, равным email. Её можно переименовать.
  • Кнопка «Создать организацию» в списке организаций создаёт новую; создатель — владелец. Количество не ограничено.
  • Настройки организации — кнопка-шестерёнка в шапке списка контроллеров (видна администратору и владельцу).

Роли

Роль Что может
Участник Видит участников организации; редактирует контроллеры, открывает их веб-интерфейсы, терминал и Grafana, удаляет контроллеры
Администратор Всё то же + приглашает и удаляет участников, переносит контроллеры, включает обязательную 2FA организации
Владелец Всё то же + назначает и снимает администраторов, переименовывает и удаляет организацию

Владелец один, передать владение через интерфейс нельзя — вместо этого перенесите контроллеры в организацию нового владельца, см. Перенос контроллеров. Служебная роль «Демо» — только просмотр (демо-аккаунт).

Приглашение участников

Страница организации: участники и роли
  1. На странице организации нажмите «Пригласить» и введите почту.
  2. Придёт письмо со ссылкой — она одноразовая и действует 5 дней.
  3. Если аккаунта нет, по той же ссылке приглашённый зарегистрируется и сразу попадёт в организацию.

Приглашённый получает роль «Участник»; роль меняет владелец.

Обязательная двухфакторная аутентификация

Владелец или администратор включает требование 2FA кнопкой «Двухфакторная аутентификация» на странице организации (у включающего 2FA должна быть включена; включение и отключение требования подтверждается кодом). Участники без 2FA не смогут работать с организацией, пока не включат её — см. Безопасность аккаунта.

Выход из организации и её удаление

  • «Покинуть организацию» может любой участник, кроме владельца.
  • «Удалить организацию» может только владелец и только когда в ней не осталось ни контроллеров, ни других участников. При включённой 2FA удаление подтверждается кодом.

Безопасность аккаунта

Раздел «Безопасность»: почта, пароль, 2FA и сессии

Все настройки безопасности собраны в разделе «Безопасность» — он открывается из меню под значком пользователя в правом верхнем углу.

Смена пароля и почты

  • Изменение пароля: старый и новый пароль; при включённой 2FA — ещё и код. После смены все сессии на других устройствах завершаются.
  • Настройки почты: новая почта подтверждается ссылкой из письма (действует 15 минут); при включённой 2FA — ещё и код.
  • Забыли пароль — «Забыли пароль?» на странице входа. Учтите: сброс по ссылке не завершает открытые сессии — при подозрении на чужой доступ завершите их вручную в «Безопасности».

После десятков неудачных попыток вход блокируется на 1 час. Забыли пароль — восстановите по ссылке, не перебирайте варианты.

Двухфакторная аутентификация

Облако поддерживает двухфакторную аутентификацию (2FA) по одноразовым кодам из приложения-аутентификатора (Google Authenticator, 2FAS, Authy, Microsoft Authenticator и т. п.).

Как подключить:

  1. В разделе «Безопасность» нажмите «Подключить» в блоке «Двухфакторная аутентификация».
  2. Сканируйте QR-код приложением. Камера недоступна — введите в приложение текстовый код под QR.
  3. Введите полученный код и нажмите «Подтвердить». Сессии на других устройствах завершатся.
  4. Сохраните 6 одноразовых кодов восстановления (кнопка «Скачать»).

Сохраните коды восстановления в надёжном месте и никому не передавайте. Если вы потеряете устройство с приложением-аутентификатором, войти в аккаунт можно будет только по этим кодам.

Теперь при входе кроме пароля нужен код из приложения.

Потеряли устройство — нажмите «Ввести код восстановления 2FA» на странице входа. После такого входа переподключите 2FA, чтобы не остаться без кодов.

Ещё факты:

  • отключение 2FA — кнопка «Отключить», с подтверждением кодом;
  • о включении и отключении 2FA приходит письмо;
  • чувствительные действия (смена пароля и почты, удаление и перенос контроллеров, удаление организации, изменение обязательной 2FA организации) запрашивают код повторно; подтверждение действует 3 минуты;
  • владелец или администратор может сделать 2FA обязательной для организации — см. выше.

Активные сессии

Активные сессии: свёрнутые и развёрнутые карточки

Блок «Активные сессии» показывает, на каких устройствах выполнен вход, и позволяет завершить лишние — например, после входа с чужого компьютера.

Для каждой сессии видны: устройство и браузер, местоположение и IP-адрес, время последней активности. Ваша текущая сессия помечена «Текущая»; клик по строке раскрывает подробности (ОС, точное время входа).

  • «Завершить» — разлогинивает выбранное устройство.
  • «Завершить все, кроме текущей» — завершает все остальные сессии разом.

Сессии завершаются автоматически при смене пароля через раздел «Безопасность» и при подключении 2FA. Если с устройства не заходили 3 недели, его сессия истекает сама.

Местоположение определяется по IP-адресу приблизительно. При подключении через VPN или мобильный интернет может показываться страна и город, через который устройство выходит в интернет, а не фактический.

Если вы видите незнакомую сессию — нажмите «Завершить все, кроме текущей», смените пароль и подключите двухфакторную аутентификацию.

Перенос контроллеров в другую организацию

В облаке можно перенести один или несколько контроллеров (до 20 за раз) в другую организацию.

Перенос можно начать двумя способами:

  1. На странице контроллера — кнопка «Перенести в другую организацию».
  2. В списке контроллеров — выберите контроллеры чекбоксами и нажмите «Переместить».

Откроется окно, где нужно выбрать способ переноса. Если у вас включена 2FA, операции переноса подтверждаются кодом.

Перемещение между своими организациями

Перемещение контроллеров между своими организациями

Нужны права администратора или владельца в обеих организациях. Выберите «Переместить между своими организациями» и целевую организацию — контроллеры перенесутся сразу (если контроллер уже участвует в другой заявке на перенос, операция не выполнится).

Передача в чужую организацию

Передача контроллеров в чужую организацию

Нет доступа к целевой организации — выберите «Передать в чужую организацию» и укажите email пользователя, зарегистрированного в облаке. Создастся заявка, пользователю уйдёт письмо со ссылкой.

Получатель открывает ссылку, видит список передаваемых контроллеров, выбирает организацию, где он владелец или администратор, и нажимает «Переместить» (при 2FA — код).

Отмена заявки на перенос

Пока заявка активна, указанные контроллеры нельзя переносить или удалять. Заявку можно отменить — кнопкой «Отменить перенос» на странице контроллера или в списке.

Заявка завершается, если:

  • получатель принял перенос;
  • вы отменили заявку;
  • истёк срок действия заявки — 2 часа.

При отмене заявки отменяется перенос всех контроллеров, входящих в неё. Отправить заявку можно только пользователю, уже зарегистрированному в облаке.

Что происходит с данными при переносе

  • Группа сбрасывается всегда — группы принадлежат исходной организации.
  • История метрик не переносится: у новой организации графики начнутся с момента переноса, старые данные останутся видны только прежней организации.
  • Галочка «Очистить описание, заметки и координаты контроллера в облаке» удаляет описание, координаты и заметки. Кроме того, она удаляет добавленные сервисы — их кнопки и туннели; сами программы на контроллере продолжат работать, новый владелец добавит их в облако заново.

Контроллер привязан к чужой организации

Есть физический доступ к контроллеру, но нет доступа к организации, к которой он привязан (например, куплен б/у):

  1. Отвяжите контроллер: wb-cloud-agent cloud-unbind https://wirenboard.cloud (см. Отключение контроллера от облака). Если отвязка не срабатывает — обновите контроллер.
  2. Привяжите его к своей организации по свежей ссылке — см. Быстрый старт.

Доступ к контроллеру через облако

Веб-интерфейс контроллера

Кнопка «Веб-интерфейс» на странице контроллера открывает штатный веб-интерфейс контроллера по адресу:

https://XXXXXXXX.http.wirenboard.cloud, где XXXXXXXX — серийный номер контроллера.

Через облако интерфейс полностью функционален, включая обновление ПО контроллера. Инструкция по самому интерфейсу — в статье Веб-интерфейс Wiren Board.

Из облака нельзя сбросить контроллер к заводским настройкам — из-за вероятной потери связи с контроллером.

SSH и файлы

Форма входа и файловый менеджер

Кнопка «SSH и файлы» открывает терминал контроллера прямо в браузере — SSH-клиент на компьютере не нужен.

  • В форме входа укажите имя пользователя и пароль контроллера; кнопка «Реквизиты по умолчанию» подставляет заводские root/wirenboard.
  • Поддерживается вход по приватному ключу (RSA, ECDSA, Ed25519; можно с парольной фразой). Если на контроллере настроена двухфакторная аутентификация для SSH, терминал запросит одноразовый код.
  • На телефоне терминал удобен благодаря экранной панели с клавишами CTRL/ALT и стрелками.

Рядом с терминалом — блок «Файлы на контроллере»: файловый менеджер, в котором можно ходить по каталогам, скачивать и загружать файлы, удалять файлы и папки.

Ограничения файлового менеджера:

  • загрузка на контроллер — файлы до 350 МБ; если файл с таким именем уже существует, он будет перезаписан (появится предупреждение);
  • скачивание с контроллера — без ограничения размера файла; при обрыве связи браузер может докачать файл с места остановки.

Доступ к веб-интерфейсам сервисов контроллера

Кнопки сервисов на странице контроллера

Сервис — программа с веб-интерфейсом на контроллере: Home Assistant, Node-RED, Zigbee2MQTT или ваша собственная разработка. Его можно открыть прямо из облака — с любого устройства, где вы вошли в аккаунт и состоите в организации контроллера.

Сервис задаётся портом, на котором он работает. Добавленный сервис — отдельная кнопка на странице контроллера и свой адрес:

https://wirenboard.cloud/connect/PPPP/XXXXXXXX/
или
https://XXXXXXXX-PPPP.apps.wirenboard.cloud

где XXXXXXXX — серийный номер контроллера, а PPPP — порт сервиса на контроллере.

Добавление сервиса

Окно настройки и форма добавления сервиса
  1. На странице контроллера нажмите «Сервисы».
  2. Популярный сервис выберите из каталога — подсказка заполнит порт и название. Для своего сервиса укажите порт вручную (он в настройках сервиса на контроллере).
  3. Название опционально — оно пишется на кнопке; без него на кнопке будет номер порта.
  4. Сохраните — на странице контроллера появится кнопка сервиса.

Порт и название можно менять в любой момент: соединение перенастроится само, ссылка сохранится.

Ограничения:

  • на один контроллер можно добавить до 20 сервисов;
  • сервис должен работать на самом контроллере и слушать порт на 127.0.0.1 (localhost). Программа, которая слушает только внешний сетевой интерфейс контроллера, через облако не откроется;
  • порты системных сервисов контроллера занять нельзя — облако не даст их указать: 22 (SSH), 80 (занят встроенным туннелем веб-интерфейса), 1883, 8883, 18883–18886 (MQTT), 6720 (knxd);
  • так открываются только веб-интерфейсы — то, что открывается в браузере. Подключиться к контроллеру по MQTT, Modbus TCP или обычным SSH-клиентом этим способом нельзя.

Ссылку на сервис можно сохранить в закладки: пока вы залогинены в облако, она открывает сервис сразу; иначе облако попросит войти и вернёт вас на ту же страницу.

При первом открытии нового сервиса, смене порта или удалении соединение контроллера с облаком кратко перезапускается — открытые вкладки этого контроллера прервутся на несколько секунд, обновите страницу.

Кто имеет доступ

Только залогиненные участники организации контроллера — посторонний по ссылке ничего не увидит.

При открытии облако выдаёт браузеру ключ на 15 минут и продлевает его автоматически, пока вкладка открыта. При кратком обрыве страница переподключается сама.

Что нужно знать про отдельные сервисы

Доступ из мобильного приложения Home Assistant не поддерживается, вместо него открывайте HA по ссылке в браузере телефона — ссылку можно вынести ярлыком на домашний экран для удобного перехода.

Home Assistant. По умолчанию не доверяет запросам через облако и отвечает 400: Bad Request. Добавьте в его configuration.yaml на контроллере и перезапустите Home Assistant:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    - ::1
    - 172.16.0.0/12

Node-RED и большинство других сервисов работают через облако сразу, без настроек.

Удаление сервиса

Удалите сервис в том же окне «Сервисы»: кнопка пропадёт, туннель закроется. Сама программа на контроллере продолжит работать.

Получение доступа к произвольным веб-интерфейсам на контроллере


В большинстве случаев используйте штатный механизм «Сервисы» — способ ниже нужен, только если приложение надо «подложить» в веб-интерфейс контроллера по под-адресу (URI), а не открыть по отдельному порту.

В nginx контроллера можно настроить прокси для произвольного (ранее не существующего) URI — работает с большинством приложений.

Инструкция с примером

Пример: доступ к веб-интерфейсу Zigbee2MQTT по URI «z2m». Интерфейс Zigbee2MQTT включён на порту 8081 (порт смотрите в настройках сервиса).

  1. Создаём файл с настройками проксирования:
    mcedit /etc/nginx/includes/default.wb.d/z2m.conf
    
  2. Добавляем запись location:
    location ~ ^/z2m/(.*)$ {
      set $upstream_app 127.0.0.1;
      set $upstream_port 8081;
      set $upstream_proto http;
      proxy_pass $upstream_proto://$upstream_app:$upstream_port/$1$is_args$args;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection upgrade;
    }
    
  3. После сохранения перезапускаем сервер с проверкой статуса:
    systemctl restart nginx; systemctl status nginx
    
  4. Для проверки откройте локально http://ip-address/z2m/, где ip-address — адрес контроллера. Замыкающий слеш обязателен.
  5. Через облако так: https://XXXXXXXX.http.wirenboard.cloud/z2m/, где XXXXXXXX — серийный номер контроллера.

Дополнительная информация для конфигурирования других сервисов — в документации nginx.

Отключение контроллера от облака

Есть три способа, они делают разное:

Способ Когда использовать Что произойдёт
Удаление из личного кабинета Штатный путь: контроллер больше не нужен в облаке, продаёте или передаёте его Контроллер пропадёт из организации, его описание, заметки и сервисы очистятся. Агент на контроллере остановит все свои сервисы и удалит настройки провайдера — контроллер совсем перестанет ходить в облако. Чтобы подключить его снова, выполните на контроллере:
wb-cloud-agent add-provider https://wirenboard.cloud
cloud-unbind по ssh с контроллера Есть физический доступ к контроллеру, но нет доступа к личному кабинету (например, купили б/у контроллер, привязанный к чужой организации) Запись контроллера в облаке удаляется — связь с прежней организацией разрывается. Агент продолжает работать и через несколько секунд получает новую ссылку на добавление. Ни к какой организации контроллер при этом не привязан и никому не виден — привяжите его к своей организации по этой ссылке
del-provider по ssh с контроллера Нужно, чтобы контроллер вообще не обращался к облаку Агент останавливает все свои сервисы и удаляет настройки провайдера. Привязка в облаке при этом остаётся — контроллер будет отображаться как недоступный, пока вы не удалите его из личного кабинета

Удаление из личного кабинета: на странице контроллера нажмите «Удалить контроллер» и введите его серийный номер (при включённой 2FA — ещё и код). Пока по контроллеру есть активная заявка на перенос, удаление недоступно.

Команды на контроллере (по SSH).

Отвязать от организации:

wb-cloud-agent cloud-unbind https://wirenboard.cloud

Полностью отключить от облака:

wb-cloud-agent del-provider wirenboard.cloud

Вернуть всё как было с завода:

wb-cloud-agent add-provider https://wirenboard.cloud

Через облачный терминал эти команды запускать не стоит: обе разрывают соединение с облаком, терминал закроется на середине работы, а после del-provider вернуть контроллер командой add-provider можно только по обычному SSH.

Метрики и облачная Grafana

Облако собирает метрики контроллеров (значения MQTT-каналов) и показывает их во встроенной Grafana: готовый дашборд, свои графики, алерты.

Включение отправки метрик

Для отправки метрик нужен пакет wb-cloud-agent версии 1.7.0 или новее — он доступен с релиза wb-2507. Если агент старее, облако само покажет на странице контроллера баннер с командой обновления.

Чтобы обновить только агент, без обновления всех пакетов системы, выполните на контроллере:

apt update; apt install --only-upgrade wb-cloud-agent
Переключатель отправки метрик на странице контроллера
Окно управления отправкой метрик

Отправкой управляет переключатель «Отправка метрик» (Включена/Отключена) на странице контроллера. После обновления агента или включения подождите до получаса — агент получит настройки и запустит сервис отправки; дальше метрики уходят каждые 2 минуты.

Метрики хранятся в облаке от 30 до 32 дней.

Отключение — тем же переключателем: агент остановит сервис отправки на контроллере.

Какие топики отправляются в облако

В облако попадают только каналы (топики), которые хранит локальная база wb-mqtt-db. Отключите запись канала в историю в веб-интерфейсе контроллера — он перестанет уходить и в облако (меньше трафика).

Каналы, нужные облачным дашбордам, оставляйте включёнными — иначе их панели будут пустыми (No data). Небольшой набор служебных топиков (серийный номер, прошивка, общие объёмы памяти и дисков) отправляется независимо от настроек истории — пока включена «Отправка метрик».

Если контроллер был без интернета, данные не теряются: после восстановления связи агент дозальёт в облако всё, что за время простоя успела сохранить локальная история wb-mqtt-db. Сколько данных удастся восстановить, зависит от настроек хранения wb-mqtt-db и от интенсивности потока метрик: чем больше каналов пишется, тем меньший период умещается в локальной истории. Заливка идёт пачками — до нескольких тысяч записей в минуту, поэтому после долгого простоя графики в Grafana заполняются постепенно.

Работа с Grafana

Дашборд по умолчанию в Grafana, выбор организации и контроллера
  1. На странице контроллера нажмите «Grafana».
  2. Авторизация пройдёт автоматически, откроется наш дашборд Controller Metrics с уже выбранным этим контроллером.
  3. Панели дашборда: аптайм, температуры процессора и платы, аппаратная ревизия, место на дисках, RAM, загрузка, таблица последних MQTT-данных (список topic). Список controller вверху переключает контроллер; диапазон по умолчанию — 6 часов.
  4. Организация меняется в левом верхнем углу Grafana — доступны только ваши организации.

Права зависят от роли в облаке: владелец и администратор создают дашборды и правила оповещений, участник только просматривает.

Если метрик нет (No data):

  • контроллер ещё не успел их отправить после обновления агента или включения опции;
  • отправка метрик отключена на странице контроллера;
  • выбран диапазон, за который метрик нет.

Не редактируйте дашборд по умолчанию. Он управляется нашей командой и периодически обновляется из облака — при обновлении все ваши изменения в нём пропадут. Чтобы строить свои графики, сделайте копию дашборда или создайте дашборд с нуля.

Принцип работы: контроллер, TimescaleDB и облачная Grafana

Скрипт сбора метрик входит в пакет wb-cloud-agent. Из облака агент получает только настройки (адрес приёма, интервалы, служебные топики) и сохраняет их в metrics_collector.conf; из настроек и шаблона пакета собирается готовый скрипт. Оба файла — в каталоге провайдера:

/var/lib/wb-cloud-agent/providers/wirenboard.cloud/metrics_collector.conf
/var/lib/wb-cloud-agent/providers/wirenboard.cloud/metrics_collector.py

Скрипт запускается сервисом wb-cloud-agent-metrics@wirenboard.cloud, читает данные из wb-mqtt-db и локального MQTT-брокера и раз в 2 минуты отправляет их по HTTPS на timescale.wirenboard.cloud — в TimescaleDB, откуда их читает Grafana.

Не правьте metrics_collector.py вручную: агент пересобирает его при каждом запуске и при изменении настроек — правки будут перезаписаны.

Представления для запросов

Данные метрик доступны через представления (view) — виртуальные таблицы, которые вы выбираете в поле Table в Query Builder или указываете в SQL-запросах.

mqtt_metrics_readable — основное представление для пользовательских дашбордов:

Поле Что содержит
time Время метрики
host Серийный номер контроллера
topic MQTT-топик, например /devices/hwmon/controls/CPU Temperature
value Исходное значение как текст
value_numeric То же значение как число, если его удалось преобразовать (иначе пусто)

Есть ещё вспомогательные представления, чтобы не писать лишние условия вручную.

mqtt_metrics_numeric_readable — только числовые значения, удобно для графиков: условие value_numeric IS NOT NULL не нужно.

Поле Что содержит
time Время метрики
host Серийный номер контроллера
topic MQTT-топик
value Значение — уже число

mqtt_metrics_topics_readable — готовый способ узнать, какие топики есть у контроллера.

Поле Что содержит
host Серийный номер контроллера
topic MQTT-топик
first_seen Когда топик впервые появился у контроллера

org_controllers — список доступных вам контроллеров, удобен для переменных своих дашбордов.

Поле Что содержит
host Серийный номер контроллера

Во всех представлениях действует разграничение доступа по организациям: вы видите данные только контроллеров из доступных вам организаций. По серийному номеру чужого контроллера запрос вернёт пусто — это касается любых дашбордов, Query Builder и SQL.

Создание дашборда

Для простых графиков не обязательно знать SQL: используйте представление mqtt_metrics_readable и режим Query Builder.

Копирование дашборда по умолчанию

Проще всего скопировать дашборд по умолчанию и дорабатывать копию — в ней остаётся список controller, переключающий контроллер для всех панелей сразу.

  1. Откройте дашборд по умолчанию (кнопка «Grafana» на странице контроллера).
  2. Нажмите Edit в правом верхнем углу, затем Save dashboardSave as copySave. Появится ваша копия, её можно свободно менять.
  3. Добавляйте в копию свои панели (AddVisualization). Чтобы панель следовала за выпадающим списком, в фильтре по серийному номеру используйте переменную ${controller} вместо конкретного номера. В режиме Code это выглядит так:
    WHERE host = '${controller}'
    
  4. В режиме Builder в фильтре host укажите значение ${controller}.

Пример: график температуры CPU без SQL

Как это выглядит в Grafana

Пошаговая инструкция

  1. Откройте DashboardsNewNew dashboard.
  2. Нажмите Add visualization.
  3. Выберите источник данных timescaledb.
  4. В редакторе запроса выберите режим Builder.
  5. В поле Format выберите Time series.
  6. В поле Table выберите mqtt_metrics_readable.
  7. В качестве визуализации выберите Time series.
  8. Добавьте фильтры, предварительно включив их нажатием на чекбокс Filter:
    • host = серийный номер контроллера;
    • topic = /devices/hwmon/controls/CPU Temperature;
    • value_numeric is not null.
    • time → оператор MacrostimeFilter. Этот фильтр обязателен: без него Grafana может взять старые строки вне выбранного диапазона и показать ошибку Data outside time range.
  9. Для значения в Data operations выберите Column value_numeric и агрегат AVG (среднее значение).
  10. Для времени добавьте ещё один Data operations: выберите макрос $__time и Column time. Он превращает колонку времени в формат, который Grafana использует как ось X.
  11. Включите Group и в Group by column выберите time.
  12. Включите Order и выберите сортировку по time в порядке ASC. Поле Limit сделайте пустым.
  13. В настройках панели Standard options (справа) задайте единицы измерения Unit Temperature Celsius (°C).
  14. В поле Title в панели Panel options задайте название панели, например CPU Temperature (°C).
  15. Нажмите кнопку Save dashboard, задайте Title и сохраните, нажав кнопку Save.

Такой график показывает изменение температуры CPU во времени. Для других числовых MQTT-топиков действия те же: меняется только фильтр topic.

Чтобы не добавлять фильтр value_numeric is not null, в поле Table можно выбрать представление mqtt_metrics_numeric_readable — в нём остаются только числовые значения, а само число лежит в поле value.

Процесс создания панели для дашборда. (Кликните по картинке для воспроизведения.)

Пример: плитка со свободной RAM без SQL

Как это выглядит в Grafana

Пошаговая инструкция

  1. Добавьте ещё одну панель на дашборд, нажав AddVisualization.
  2. Выберите визуализацию Stat.
  3. Выберите источник данных timescaledb.
  4. В редакторе запроса выберите режим Builder.
  5. В поле Format выберите Table.
  6. В поле Table выберите mqtt_metrics_readable.
  7. Добавьте фильтры, предварительно включив их нажатием на чекбокс Filter:
    • host = серийный номер контроллера;
    • topic = /devices/metrics/controls/ram_available;
    • value_numeric is not null.
    • time → оператор MacrostimeFilter.
  8. Для значения в Data operations выберите Column value_numeric.
  9. Включите Order и выберите сортировку по time в порядке DESC. В поле Limit поставьте 1, чтобы плитка показывала только последнее значение.
  10. В настройках панели Value options (справа) выберите Calculation Last (последнее значение).
  11. В поле Title в панели Panel options задайте название панели, например RAM available MiB.
  12. Нажмите кнопку Save dashboard, сохраните, нажав кнопку Save.

Для текстовых значений используйте колонку value. Например, топик /devices/system/controls/Current uptime хранит аптайм строкой, а /devices/system/controls/HW Revision — аппаратную ревизию.

Что должно получиться в итоге после повторения примеров

Полезные SQL-запросы (для продвинутых пользователей)

SQL можно использовать в Grafana Explore или в панели, если возможностей Query Builder недостаточно.

Примеры SQL-запросов

Список топиков конкретного контроллера за последние сутки с количеством записей:

SELECT
  topic,
  count(*) AS rows_24h,
  max(time) AS latest
FROM mqtt_metrics_readable
WHERE host = '<подставьте сюда серийный номер контроллера>'
  AND time > now() - interval '24 hours'
GROUP BY topic
ORDER BY rows_24h DESC, topic;

Если нужен просто список топиков контроллера, без подсчёта строк, используйте готовое представление mqtt_metrics_topics_readable:

SELECT topic
FROM mqtt_metrics_topics_readable
WHERE host = '<подставьте сюда серийный номер контроллера>'
ORDER BY topic;

Последние значения нескольких топиков контроллера:

SELECT DISTINCT ON (topic)
  topic,
  time,
  value
FROM mqtt_metrics_readable
WHERE host = '<подставьте сюда серийный номер контроллера>'
  AND topic IN (
    '/devices/system/controls/HW Revision',
    '/devices/system/controls/Release name',
    '/devices/system/controls/Current uptime',
    '/devices/metrics/controls/ram_available',
    '/devices/metrics/controls/ram_total'
  )
  AND time > now() - interval '24 hours'
ORDER BY topic, time DESC;

График температуры CPU для панели Grafana в режиме Code:

SELECT
  AVG(value_numeric),
  $__time("time")
FROM
  mqtt_metrics_readable
WHERE
  (
    host = '<подставьте сюда серийный номер контроллера>'
    AND topic = '/devices/hwmon/controls/CPU Temperature'
    AND value_numeric IS NOT NULL
    AND $__timeFilter("time")
  )
GROUP BY
  "time"
ORDER BY
  "time" ASC

Экспорт данных в CSV

Экспорт данных в CSV
  1. Откройте Query inspector.
  2. Перейдите во вкладку Data.
  3. Нажмите Download CSV, чтобы выгрузить результат запроса в файл.

Помощь от нейросетей

Сложный дашборд можно попросить у нейросети:

  1. Выгрузите данные контроллера в CSV (см. выше) и приложите список его топиков — запрос к mqtt_metrics_topics_readable из раздела Полезные SQL-запросы.
  2. Опишите, что нужно: панели, период, единицы, фильтры, тип визуализации.

Например: «Сделай JSON дашборда Grafana для TimescaleDB. Источник данных — timescaledb, таблица — mqtt_metrics_readable. Нужны графики температуры CPU, свободной RAM и свободного места на /mnt/data для выбранного контроллера».

Проверяйте результат после каждой итерации и уточняйте запрос — обычно достаточно нескольких.

Импорт дашборда

Для импорта .json файла дашборда:

  1. Откройте Dashboards.
  2. В правом верхнем углу нажмите NewImport.
  3. Выберите файл для импорта.

Оповещения о событиях

Grafana сама следит за метриками и присылает сообщение, когда значение вышло за рамки: перегрелся процессор, пропало питание, включился вход, кончается место на диске. Каналы доставки — почта, Telegram, Discord, вебхук и ещё полтора десятка сервисов (полный список).

Настройка — в разделе Alerting облачной Grafana. Всё созданное принадлежит организации; создавать и менять правила могут владелец и администратор, остальные видят их в режиме чтения.

Нужны две вещи:

  1. Точка контакта (Contact point) — куда отправлять.
  2. Правило (Alert rule) — что проверять и при каком условии сработать.

В одну точку контакта можно добавить несколько каналов — одно правило разошлёт сообщение во все.

Шаг 1. Куда отправлять

Настройка точки контакта
  1. Откройте AlertingContact points+ Create contact point.
  2. В поле Name задайте понятное имя, например «Мой Telegram».
  3. В поле Integration выберите сервис и заполните его поля — как получить реквизиты для каждого, расписано ниже:
    • TelegramBOT API Token и Chat ID;
    • DiscordWebhook URL;
    • Email — адреса получателей.
  4. Нажмите Test — сообщение придёт сразу, ещё до создания правила. Это самый быстрый способ проверить, что канал работает.
  5. Если нужно слать сразу в несколько мест, нажмите + Add contact point integration и добавьте ещё один сервис в эту же точку контакта.
  6. Нажмите Save contact point.

Telegram: как получить токен и Chat ID

Своего бота нужно завести один раз, дальше он работает для всех ваших правил.

Инструкция

  1. Откройте в Telegram бота @BotFather и нажмите кнопку Open, затем + Create a New Bot.
  2. Придумайте отображаемое имя бота (любое) и username — он обязан заканчиваться на bot, например my_wb_alerts_bot.
  3. Нажмите кнопку Create, затем Copy — скопируется строка вида 1234567890:AAFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Это BOT API Token — вставьте его в одноимённое поле в Grafana.
  4. Найдите своего бота в поиске Telegram по логину, откройте чат с ним и нажмите кнопку Start. Шаг обязательный: пока вы не написали боту первым, Telegram запрещает ему присылать вам сообщения.
  5. Узнайте Chat ID: напишите боту @userinfobot, он ответит Id: числом вида 846068007. Это и есть Chat ID для личных сообщений — вставьте его в одноимённое поле в Grafana.

Чтобы оповещения приходили в группу, а не в личку:

  1. Добавьте своего бота в группу как участника.
  2. Отправьте в группу любое сообщение и перешлите его боту @userinfobot — он покажет Id этой группы.

Discord: как получить Webhook URL

Инструкция

  1. Нужны права Управление вебхуками на сервере — у владельца сервера они есть.
  2. Наведите курсор на нужный канал, нажмите шестерёнку Настроить каналИнтеграцияВебхукиНовый вебхук.
  3. Задайте имя — оно будет отображаться как автор сообщений, например «Wiren Board Cloud».
  4. Убедитесь, что выбран нужный канал, и нажмите Копировать URL вебхука.
  5. Получится ссылка вида https://discord.com/api/webhooks/1234567890/AbCdEf... — вставьте её в поле Webhook URL в Grafana.

Webhook URL равносилен паролю: кто им владеет, тот может писать в ваш канал от имени вебхука. Не публикуйте его. Если ссылка утекла — удалите вебхук той же кнопкой, старая ссылка сразу перестанет работать.

Email: что заполнить

  1. В поле Addresses впишите адреса получателей; разделители — перевод строки, запятая или точка с запятой.
  2. Больше ничего настраивать не нужно, почтовый сервер уже настроен на стороне облака.

Письма приходят с адреса alerts@wirenboard.com. Если письма нет — загляните в папку «Спам» и добавьте отправителя в белый список, чтобы следующие приходили во «Входящие».

Шаг 2. Что проверять

Настройка правила алерта (часть 1)
Настройка правила алерта (часть 2)
  1. Откройте AlertingAlert rules+ New alert rule.
  2. В поле Name задайте понятное имя, например «Перегрев контроллера».
  3. В блоке Define query and alert condition выберите источник данных timescaledb и соберите запрос в режиме Builder — как и для панелей дашборда, SQL знать не нужно:
    • В поле Format выберите Time series, в поле Table — mqtt_metrics_readable.
    • Добавьте фильтры, предварительно включив их чекбоксом Filter: host = серийный номер контроллера; topic = /devices/hwmon/controls/CPU Temperature; value_numeric is not null; time → оператор MacrostimeFilter.
    • В Data operations выберите Column value_numeric, агрегат не нужен — последнее значение возьмёт само условие ниже. Вторым Data operations добавьте макрос $__time с Column time.
    • Включите Order по time в порядке ASC, поле Limit очистите.
  4. Ниже, в Alert condition: в WHEN выберите функцию Last — она берёт последнее значение, а в OF QUERY задайте условие, например IS ABOVE 55.
  5. В блоке Add folder and labels выберите папку (создайте, если её ещё нет), в блоке Set evaluation behavior задайте Evaluation group and interval — как часто проверять (создайте группу, если её ещё нет). Минимум — 30 секунд.
  6. Pending period — сколько времени условие должно продержаться, прежде чем уйдёт сообщение. Поставьте 0s, если сообщение нужно сразу.
  7. В блоке Configure notifications выберите точку контакта из первого шага.
  8. Нажмите Save в самом низу страницы.

Вариант запроса на SQL (режим Code)

SELECT time, value_numeric AS value
FROM mqtt_metrics_readable
WHERE host = '<подставьте сюда серийный номер контроллера>'
  AND topic = '/devices/hwmon/controls/CPU Temperature'
  AND value_numeric IS NOT NULL
  AND $__timeFilter(time)
ORDER BY time

Правило появится в списке. Когда условие выполнится (температура станет выше 55 градусов), правило перейдёт в состояние Firing и уйдёт сообщение; когда значение вернётся в норму, придёт уведомление о восстановлении.

Здесь описан минимум; все настройки правила подробно разобраны в документации Grafana: Configure Grafana-managed alert rules.

Пример: сигнал по переключателю

Тот же приём работает с любым каналом, у которого значение 0 или 1: вход, реле, дискретный выход, флаг из wb-rules. Соберите правило точно так же, как в шаге 2, только:

  • в фильтре topic укажите свой канал, например /devices/wb-gpio/controls/A1_OUT;
  • условие задайте IS ABOVE 0.5 — всё, что не ноль, считается включённым.

Переключите канал в веб-интерфейсе контроллера — и через 1–3 минуты придёт сообщение.

Дискретные каналы записываются в историю по изменению, а не по расписанию. Поэтому в запросе берите диапазон пошире (несколько часов), иначе после переключения правило быстро вернётся в Normal просто потому, что новых строк больше не приходило. По той же причине в настройках правила поставьте Alert state if no dataNormal: отсутствие строк здесь не авария. Подробнее про состояния No data и Error — в документации Grafana: No data and error states.

Через сколько придёт сообщение

На практике — через 1–3 минуты после события. Задержка складывается из:

  • отправки метрик с контроллера — раз в 2 минуты (интервалом управлять нельзя);
  • проверки правила — раз в Evaluation interval (минимум 30 секунд);
  • Pending period, если задан;
  • Group wait — 30 секунд на сбор одновременных срабатываний в одно сообщение.

Подробнее о цикле проверки — Alert rule evaluation.

Как часто повторяются сообщения

Grafana складывает алерты в группы и разносит сообщения по времени. Три настройки в AlertingNotification policies (Timing options):

  • Group wait — пауза перед первым сообщением группы, собирает одновременные срабатывания в одно. У нас 30 секунд.
  • Group interval — пауза перед сообщением об изменениях в группе. Главный ограничитель частоты: скачущее правило при интервале 5 минут даст 12 сообщений в час вместо 60. У нас 5 минут.
  • Repeat interval — пауза перед напоминанием, если авария всё ещё висит. У нас 4 часа.

Менять можно и для всей организации (Notification policies), и у конкретного правила (Muting, grouping and timings).

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

Группа — это набор алертов с одинаковыми метками. В облаке группировка по умолчанию: одно правило = одна группа = одно сообщение. Так правило, которое вернуло сто строк, пришлёт одно сообщение, а не сто.

Подробнее о том, как это устроено, — в документации Grafana: Group alert notifications и Configure notification policies.

Как изменить текст сообщения

Стандартное сообщение Grafana — служебное: имя правила, метки, значения. Его можно дополнить или заменить.

Простой способ — поля Summary и Description в блоке Configure notification message правила: текст попадёт в сообщение во всех каналах. Работают подстановки: Температура CPU поднялась до {{ $values.B }} °C — число, по которому сработало условие (полный список подстановок).

Полностью свой формат — шаблон: AlertingContact pointsNotification Templates+ Add notification template group (можно из примеров, Add example) → Save. Затем в точке контакта раскройте Optional settings интеграции и в поле Message (у Email — при желании и Subject) впишите {{ template "имя_шаблона" . }}. Шаблоны — на языке шаблонов Go (Customize notifications).

Шаблон действует на уровне точки контакта: он поменяет вид всех сообщений, которые через неё приходят, от всех правил.

Ограничения

  • до 20 правил на организацию (а также до 20 дашбордов);
  • отправка метрик с контроллера — 1 раз в 2 минуты, интервалом нельзя управлять из облака;
  • проверка правила — не чаще 1 раза в 30 секунд;
  • сообщения группируются по правилу: правило, вернувшее сто строк, пришлёт одно сообщение, а не сто;
  • одно правило должно возвращать не больше 100 строк. Не делайте запрос сразу по всем топикам контроллера — фильтруйте по topic, иначе правило упрётся в лимит;
  • история срабатываний хранится 30 дней;
  • свой вебхук — только по HTTPS (порт любой). Адрес на http:// облако не пропустит — будет 403 Forbidden: по http секретный адрес вебхука и содержимое уведомлений шли бы открытым текстом;
  • из облака до вашей локальной сети хода нет — вебхук должен быть доступен из интернета.

Если сообщение не приходит

  1. Нажмите Test в точке контакта. Пришло — канал в порядке, дело в правиле; не пришло — смотрите текст ошибки, он появится прямо в окне.
  2. Откройте правило и посмотрите состояние. Normal — условие не выполнилось, проверьте порог. No data — запрос ничего не вернул: проверьте серийный номер, топик и что метрики вообще идут. Error — ошибка в запросе, текст рядом.
  3. Убедитесь, что в правиле выбрана нужная точка контакта, а не оставлена стандартная.
  4. Что означают типичные ошибки:
    • 401 Unauthorized у Telegram — неверный токен бота;
    • Unknown Webhook у Discord — неверный или удалённый Webhook URL;
    • 403 Forbidden у вебхука — адрес на http:// вместо https:// либо ведёт во внутреннюю сеть.

Поиск и устранение неисправностей

Начните с личного кабинета и статуса облака, потом переходите к командам на контроллере. Не помогло — пришлите вывод команд и диагностический архив в поддержку.

Статус облака

Откройте страницу мониторинга статуса:

https://status.wirenboard.cloud

Все индикаторы должны быть зелёные. Если есть сбои — дождитесь восстановления.

Контроллер в статусе «Проблема»

  1. На странице контроллера посмотрите строку «Опрошен агент» — это время последней связи контроллера с облаком.
  2. Проверьте, что контроллер включён и у него есть интернет (см. проверки по SSH ниже).
  3. Если контроллер на связи, а туннели не открываются — попробуйте через минуту: облако само перезапускает туннели контроллера при сбое.

Нет ссылки на добавление в облако

Если в веб-интерфейсе контроллера нет ссылки на добавление, подключитесь по SSH и проверьте провайдеров командой wb-cloud-agent:

  • No one provider was found — провайдер не настроен. Добавьте его: wb-cloud-agent add-provider https://wirenboard.cloud;
  • No connect to: https://wirenboard.cloud — у контроллера нет связи с облаком, проверьте интернет (см. ниже);
  • если ссылка есть, но не срабатывает — возьмите свежую: ссылка действует 4 часа и меняется при перезапуске агента. Если контроллер уже привязан к другой организации, ссылки не будет — сначала отвяжите его (см. Отключение контроллера от облака).

Нет метрик в Grafana

  • Проверьте, что на странице контроллера «Отправка метрик: Включена» и версия агента не ниже 1.7.0 (при старом агенте облако показывает баннер с командой обновления).
  • Подождите: после включения или обновления агента первые данные появляются в течение получаса; далее метрики приходят раз в 2 минуты.
  • Проверьте выбранный диапазон времени и фильтры host/topic; список топиков контроллера смотрите в представлении mqtt_metrics_topics_readable.
  • Для графиков используйте value_numeric (или представление mqtt_metrics_numeric_readable), для текстовых значений — value.
  • Метрики берутся из локальной истории wb-mqtt-db: если запись канала в историю отключена, в облако он не попадёт.
  • Проверьте сервис отправки на контроллере:
systemctl status wb-cloud-agent-metrics@wirenboard.cloud
  • Если сервис падает, посмотрите его журнал и приложите вывод в обращение в техподдержку:
journalctl -u wb-cloud-agent-metrics@wirenboard.cloud -n 300 --no-pager

Нет связи с облаком: проверки по SSH

Эти проверки нужны, когда контроллер не выходит на связь с облаком — статус «Проблема» или нет ссылки на добавление. По очереди исключаем: нет интернета, не работает DNS, недоступен сервер облака, остановлен агент.

Подключитесь к контроллеру по SSH и выполните по порядку.

Проверка подключения к интернету:

ping 8.8.8.8 -c 4

Ожидается: успешные ответы. Если нет — проверьте подключение к интернету.

Проверка разрешения доменного имени:

getent hosts agent.wirenboard.cloud

Ожидаемый вывод:

5.35.10.8       wirenboard.cloud agent.wirenboard.cloud

Если вывод пустой — проблема в DNS.

Проверка доступности сервера облака:

ping wirenboard.cloud -c 4

Ожидается: успешные ответы от 5.35.10.8. Интернет есть, а сервер облака не отвечает — посмотрите статус облака.

Проверка сервиса wb-cloud-agent:

systemctl status wb-cloud-agent@wirenboard.cloud

Ожидается: статус active (running). Если сервис остановлен, запустите его:

systemctl enable wb-cloud-agent@wirenboard.cloud
systemctl start wb-cloud-agent@wirenboard.cloud

Проверка HTTPS-соединения с облаком (для Wiren Board 7 и новее):

curl --connect-timeout 45 --retry 8 --retry-delay 1 --retry-all-errors \
  --cert /var/lib/wb-cloud-agent/device_bundle.crt.pem \
  --engine ateccx08 \
  --key ATECCx08:00:02:C0:00 \
  --key-type ENG \
  -w '|||{"code":"%{response_code}"}' \
  https://agent.wirenboard.cloud/api-agent/v1/agent-start-up/

Ожидается: ответ с HTTP-кодом 200.

На Wiren Board 6 аппаратный ключ другой — в команде выше замените ATECCx08:00:02:C0:00 на ATECCx08:00:04:C0:00, иначе команда завершится ошибкой.