Wiren Board Cloud — удалённое администрирование
This is the approved revision of this page, as well as being the most recent.
Описание
Wiren Board Cloud — сервис удаленного администрирования систем автоматизации на контроллерах Wiren Board. Подробное описание возможностей
Работает в контроллерах Wiren Board 6 и новее.
Информацию об ошибках и пожелания присылайте на портал техподдержки. Если вы сообщаете о проблемах — приложите к сообщению диагностический архив.
Варианты
Wiren Board Cloud существует в двух вариантах:
- https://wirenboard.cloud — публичное облако. Без ограничений до конца 2025 года. В 2026 году планируем сделать платным хранение данных в Grafana сверх лимита, который мы пока обсуждаем. Ограничения по количеству контроллеров в публичной версии не планируем.
- On-Premise — тот же сервис, но ставится на ваш сервер. Бесплатно до 100 контроллеров в одном установленном вами экземпляре; для компаний с сотнями и тысячами контроллеров планируется платная версия. Список изменений.
Принцип работы
На контроллер Wiren Board устанавливается агент wb-cloud-agent, который соединяется с облаком и получает из него настройки для создания туннелей и отправки метрик. Для отправки метрик используется сервис wb-cloud-agent-telegraf@wirenboard.cloud, а для туннелей wb-cloud-agent-frpc@wirenboard.cloud, а для статуса wb-cloud-agent@wirenboard.cloud.
Данные передаются по защищённому каналу. Авторизация контроллера в облаке происходит по ключу, хранящемся в чипе ATECCx08.
Подробнее об архитектуре смотрите в нашем докладе Собственное облако, новый конфигуратор устройств и другие новости софта Wiren Board.
Порты
Для работы Wiren Board Cloud не нужно пробрасывать порты, так как все соединения с контроллера исходящие:
- агент стучится по адресу https://agent.wirenboard.cloud ;
- для туннелей на стороне облака открываются порты из диапазона 10000 - 30000 и frpc на контроллере подключается по ним.
Это позволяет держать контроллер за NAT, что повышает безопасность.
Подключение контроллера к облаку
Установка агента
Агент доступен и установлен на контроллерах Wiren Board 6 и новее в релизах ПО wb-2407 и новее. Как узнать релиз ПО на контроллере.
На старом релизе wb-2207 агент надо поставить вручную:
apt update && apt install wb-cloud-agent
Добавление контроллера в облако
По умолчанию контроллер отключен от облака, надо его добавить:
- Откройте веб-интерфейс контроллера, перейдите Настройки → Система и кликните на появившейся ссылке в разделе Подключение к облаку.
- После перехода по ссылке вы попадёте в личный кабинет, либо система попросит авторизоваться или создать аккаунт.
Также ссылку на добавление можно получить в консоли, для этого подключитесь к контроллеру по SSH и введите команду wb-cloud-agent:
# wb-cloud-agent
| Provider | Controller Url / Activation Url |
|------------------|----------------------------------------------------|
| wirenboard.cloud | https://wirenboard.cloud/controllers?add=3d5...790 |
Команда wb-cloud-agent отображает подключение агента к облаку с задержкой, после привязки или отвязки контроллера подождите несколько секунд перед очередной проверкой состояния.
К личному кабинету в облаке можно подключить неограниченное количество контроллеров.
Если ссылки на подключение нет — проверьте, что сервер облака доступен с контроллера.
Важно! Так как авторизация происходит по аппаратному ключу, то даже после factory reset контроллер подключится к облаку автоматически. Перед продажей или передачей контроллера третьей стороне, удалите его из своего облака.
Двухфакторная аутентификация
Облако поддерживает двухфакторную аутентификацию.
Как подключить:
- Откройте раздел «Безопасность» в меню под значком «Пользователь».
- Нажмите «Подключить».
- Сканируйте QR-код с помощью приложения-аутентификатора.
- Введите полученный код. (Активные сессии на других устройствах будут завершены автоматически.)
- Сохраните коды восстановления в надежном месте и никому их не передавайте — они нужны для восстановления доступа, если вы потеряете секрет/устройство с приложением-аутентификатором.
После этого при входе система запросит не только пароль, но и код из приложения. Срок действия кода ограничен и показан в приложении-аутентификаторе, поэтому не сохраняйте их для повторного ввода, они не сработают.
В случае утраты секрета или устройства с приложением-аутентификатором вы можете воспользоваться кодами восстановления для доступа к аккаунту. Для их использования нажмите «Ввести код восстановления 2FA» на странице входа в аккаунт.
Владельцы организаций могут включить обязательную двухфакторную аутентификацию в настройках. В этом случае все участники должны будут её включить в своём профиле перед началом работы.
Перенос контроллеров в другую организацию
В облаке можно перенести один или несколько контроллеров в другую организацию.
Перенос можно инициировать двумя способами:
- На странице контроллера нажмите кнопку «Перенести в другую организацию».
- В списке контроллеров выберите один или несколько контроллеров и нажмите кнопку «Переместить».
После этого откроется модальное окно, где необходимо выбрать способ переноса.
Сценарии переноса
Перемещение между своими организациями
Если у вас есть права администратора или владельца в обеих организациях, выберите опцию «Переместить между своими организациями» и укажите целевую организацию.
Контроллеры будут перенесены сразу, если у вас есть необходимые права и состояние контроллеров не изменилось с момента открытия окна (например, не был запущен другой перенос).
Передача в чужую организацию
Если у вас нет доступа к целевой организации, выберите опцию «Передать в чужую организацию» и укажите email пользователя, зарегистрированного в облаке.
После этого создаётся заявка на перенос, а пользователю отправляется письмо со ссылкой для подтверждения. Перейдя по ссылке, пользователь сможет выбрать организацию, в которую нужно перенести контроллеры, и подтвердить перенос.
Пока заявка активна, указанные контроллеры нельзя переносить или удалять. При необходимости вы можете отменить заявку.
Заявка будет завершена, если:
- пользователь примет перенос;
- вы отмените заявку;
- истечёт срок действия (заявка действует 2 часа).
При отмене заявки отменяется перенос для всех контроллеров, входящих в неё.
Дополнительные параметры
При переносе вы можете:
- очистить пользовательскую мета-информацию контроллера (местоположение, заметки, заголовок, описание), установив соответствующую галочку в окне переноса.
Особенности:
- информация о группах удаляется всегда, так как группы привязаны к организациям;
- метрики контроллера остаются доступными только за периоды, когда контроллер находился в соответствующей организации.
Отключение контроллера от облака
Чтобы удалить контроллер из облака, перейдите в личный кабинет, откройте страницу контроллера и удалите контроллер.
Также можно отключить контроллер от облака без доступа к личному кабинету:
- Подключитесь к контроллеру по SSH.
- Введите команду:
wb-cloud-agent cloud-unbind https://wirenboard.cloud
Если вы хотите, чтобы контроллер совсем не отправлял данные в облако, удалите провайдер из агента:
wb-cloud-agent del-provider wirenboard.cloud
Вернуть всё как было с завода:
wb-cloud-agent add-provider https://wirenboard.cloud
Справка по всем командам:
wb-cloud-agent -h
Обновление прошивки контроллера из облака
Процесс обновления прошивки из облака аналогичен обновлению прошивки через веб-интерфейс.
Из облака нельзя сбросить контроллер к заводским настройкам из-за вероятной потери связи с контроллером.
Поиск и устранение неисправностей
Если не работает подключение к облачным сервисам (например, устройство не отображается в личном кабинете), выполните пошаговую проверку ниже и пришлите вывод команд в поддержку.
Статус облака
Откройте страницу мониторинга статуса:
Все индикаторы должны быть зелёные. Если есть сбои — дождитесь восстановления.
Отвязка контроллера от организации, к которой нет доступа
Если у вас есть физический доступ к контроллеру, но по какой-то причине нет доступа к организации в Cloud, к которой привязан контроллер, то вы можете отвязать и перепривязать его самостоятельно:
1. Поскольку контроллер не может быть не привязан ни к какой организации, следует сначала отвязать контроллер от Cloud. Если отвязка не срабатывает - обновите контроллер.
2. После сообщения об успешной отвязки контроллера, если нужно, можете привязать его заново к нужной организации.
Нет ссылки на добавление в облако
Если в веб-интерфейсе контроллера нет ссылки на добавление в облако, проверьте есть ли добавленные провайдеры. Ниже пример, когда провайдера нет:
# wb-cloud-agent
No one provider was found
Проверка подключения к интернету
ping 8.8.8.8 -c 4
Ожидается: успешные ответы. Если нет — проверьте подключение к интернету.
Проверка маршрута до облака
traceroute wirenboard.cloud
Убедитесь, что пакеты уходят за пределы вашей локальной сети и достигают внешних узлов.
Проверка разрешения доменного имени
host agent.wirenboard.cloud
Ожидается: IP-адрес. Если пишет `not found` — проблема в DNS.
Проверка службы 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-соединения с облаком
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`.
Получение доступа к произвольным веб-интерфейсам на контроллере
В nginx на контроллере доступна настройка прокси для произвольного (обязательно до этого не существующего) URI. Это работает с большинством приложений.
Для примера, получим доступ к веб-интерфейсу Zigbee2mqtt по uri «z2m». Веб-интерфейс zigbee2mqtt включен на контроллере на порту 8081.
- Создаём файл с настройками проксирования:
mcedit /etc/nginx/includes/default.wb.d/z2m.conf
- Добавляем запись 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; }
- После сохранения перезапускаем сервер с проверкой статуса
systemctl restart nginx && systemctl status nginx
- Для проверки можно открыть локально веб-интерфейс контроллера с URL
http://ip-address/z2m/, где ip-address — адрес контроллера. Замыкающий слеш обязателен. - Через облачный сервис так:
https://XXXXXXX.http.wirenboard.cloud/z2m/, где XXXXXXX — серийный номер контроллера.
Дополнительная информация для конфигурирования других сервисов документации nginx.
Облачная Grafana
Это инструкция для работы со встроенной в облако Grafana: вход, просмотр метрик контроллера, создание своих дашбордов и экспорт данных для получения помощи.
Важные изменения и ограничения
Для отправки метрик необходим актуальный пакет wb-cloud-agent 1.7.0 или выше, он доступен на версиях релизов 2507 и выше.
Чтобы обновить только агент, без обновления всех пакетов системы, выполните на контроллере:
sudo apt update; sudo apt install --only-upgrade wb-cloud-agent
После обновления подождите 5-10 минут: агент получит из облака скрипт сбора метрик, запустит сервис отправки, и новые данные появятся в Grafana.
Метрики контроллеров хранятся в TimescaleDB по умолчанию от 14 дней до 16 дней.
Работа с Grafana
- В Wiren Board Cloud на странице любого контроллера нажмите кнопку Grafana.
- Авторизация в Grafana произойдёт автоматически под вашей учётной записью.
- По умолчанию вы попадёте в Grafana-организацию, связанную с организацией в облаке, из которой вы перешли. Откроется дашборд, подготовленный нашей командой.
- Если в дашборде по умолчанию не отображаются метрики (пишет No data), возможны следующие причины:
- выбран контроллер, который ещё не успел отправить метрики после обновления агента;
- на странице контроллера установлена опция Отправка метрик: Отключена;
- выбран временной диапазон, за который нет метрик, например метрики начали отправляться только сегодня, а вы пытаетесь смотреть метрики за вчера.
- Сменить активную организацию можно в левом верхнем углу интерфейса Grafana. Вам будут доступны только те организации, в которых вы состоите в облаке.
- В дашборде по умолчанию можно выбрать интересующий контроллер из активной организации и посмотреть его метрики за указанный период.
Принцип работы: контроллер, TimescaleDB и облачная Grafana
На контроллере работает агент wb-cloud-agent. Он получает из облака скрипт сбора метрик и сохраняет его в файл:
/var/lib/wb-cloud-agent/providers/<провайдер>/metrics_collector.py
Скрипт запускается systemd-сервисом:
wb-cloud-agent-metrics@wirenboard.cloud
Скрипт читает MQTT-данные контроллера из локальной базы wb-mqtt-db и из локального MQTT-брокера, затем отправляет их в облако по HTTPS. В публичном облаке данные отправляются на адрес timescale.wirenboard.cloud, записываются в TimescaleDB и затем читаются Grafana.
Скрипт metrics_collector.py автоматически синхронизируется из облака. Не изменяйте его вручную на контроллере: при следующей синхронизации изменения будут перезаписаны.
В Grafana основное представление для пользовательских дашбордов называется mqtt_metrics_readable. В нём есть удобные поля:
time— время метрики;host— серийный номер контроллера;topic— MQTT-топик, например/devices/hwmon/controls/CPU Temperature;value— исходное значение как текст;value_numeric— то же значение как число, если его удалось преобразовать в число.
Если отправка метрик не нужна или вы хотите уменьшить сетевой трафик, отключите её на странице контроллера в Wiren Board Cloud опцией Отправка метрик: Отключена. Агент wb-cloud-agent остановит сервис отправки метрик wb-cloud-agent-metrics@wirenboard.cloud.
Создание дашборда
Для простых графиков не обязательно знать SQL. Используйте представление mqtt_metrics_readable и режим Query Builder в Grafana.
Пример: график температуры CPU без SQL
- Откройте Dashboards → New → New dashboard.
- Нажмите Add visualization.
- Выберите источник данных timescaledb.
- В редакторе запроса выберите режим Builder.
- В поле Format выберите Time series.
- В поле Table выберите
mqtt_metrics_readable. - В качестве визуализации выберите Time series.
- Добавьте фильтры, предварительно включив их нажатием на чекбокс Filter:
host= серийный номер контроллера;topic=/devices/hwmon/controls/CPU Temperature;value_numericis not null.time→ оператор Macros → timeFilter. Этот фильтр обязателен: без него Grafana может взять старые строки вне выбранного диапазона и показать ошибку Data outside time range.
- Для значения в Data operations выберите Column
value_numericи агрегатAVG(среднее значение). - Для времени добавьте ещё один Data operations: выберите макрос
$__timeи Columntime. Он превращает колонку времени в формат, который Grafana использует как ось X. - Включите Group и в Group by column выберите
time. - Включите Order и выберите сортировку по
timeв порядке ASC. Поле Limit сделайте пустым. - В настройках панели Standard options (справа) задайте единицы измерения Unit Temperature Celsius (°C).
- В поле Title в панели Panel options задайте название панели, например CPU Temperature (°C).
- Нажмите кнопку Save dashboard, задайте Title и сохраните, нажав кнопку Save.
Такой график показывает изменение температуры CPU во времени. Для других числовых MQTT-топиков действия те же: меняется только фильтр topic.
Пример: плитка со свободной RAM без SQL
- Добавьте ещё одну панель на дашборд нажав Add → Visualization.
- Выберите визуализацию Stat.
- Выберите источник данных timescaledb.
- В редакторе запроса выберите режим Builder.
- В поле Format выберите Table.
- В поле Table выберите
mqtt_metrics_readable. - Добавьте фильтры, предварительно включив их нажатием на чекбокс Filter:
host= серийный номер контроллера;topic=/devices/metrics/controls/ram_available;value_numericis not null.time→ оператор Macros → timeFilter.
- Для значения в Data operations выберите Column
value_numeric. - Включите Order и выберите сортировку по
timeв порядке DESC. Поле Limit оставьте как есть или установите 1 для того чтобы убрать историю изменений. - В настройках панели Value options (справа) выберите Calculation Last (последнее значение).
- В поле Title в панели Panel options задайте название панели, например RAM available MiB.
- Нажмите кнопку Save dashboard, сохраните, нажав кнопку Save.
Для текстовых значений используйте колонку value. Например, топик /devices/system/controls/Current uptime хранит аптайм строкой, а /devices/system/controls/HW Revision — аппаратную ревизию.
Полезные SQL-запросы (для продвинутых пользователей)
SQL можно использовать в Grafana Explore или в панели, если возможностей Query Builder недостаточно.
Для следующих запросов вы должны состоять в организации, к которой привязан контроллер из запроса.
Список топиков конкретного контроллера за последние сутки с количеством записей:
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;
Последние значения нескольких топиков контроллера:
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
Просмотр структуры данных в TimescaleDB с помощью Grafana Explore
Чтобы понять, какие данные доступны и в каком виде:
- Откройте Explore.
- Выберите источник данных timescaledb.
- Переключитесь в режим Code.
- Выполните SQL-запрос для просмотра доступных представлений (views) в схеме
public:SELECT table_name, table_schema FROM information_schema.views WHERE table_schema = 'public' ORDER BY table_name;
- Для просмотра примера одной строки из основного представления метрик за последний час выполните запрос:
SELECT * FROM mqtt_metrics_readable WHERE time > now() - interval '1 hour' LIMIT 1;
Экспорт данных в CSV
- Откройте Query inspector.
- Перейдите во вкладку Data.
- Нажмите Download CSV, чтобы выгрузить результат запроса в файл.
Помощь от нейросетей
Если нужен сложный дашборд, можно подготовить данные для нейросети:
- В Explore выполните запрос к
mqtt_metrics_readableпо нужному контроллеру и периоду. - Выгрузите результат в CSV через Query inspector → Data → Download CSV.
- Дополнительно приложите список топиков контроллера за сутки из SQL-запроса выше.
- Опишите, что нужно получить: какие панели, за какой период, какие единицы измерения, какие фильтры и какой тип визуализации нужен.
Например: «Сделай JSON дашборда Grafana для TimescaleDB. Источник данных — timescaledb, таблица — mqtt_metrics_readable. Нужны графики температуры CPU, свободной RAM и свободного места на /mnt/data для выбранного контроллера».
Проверяйте дашборд, который сгенерировала нейросеть, после каждой итерации и при необходимости уточняйте запрос. Обычно после нескольких итераций результат становится заметно лучше.
Импорт дашборда
Для импорта .json файла дашборда:
- Откройте Dashboards.
- В правом верхнем углу нажмите New → Import.
- Выберите файл для импорта.
Диагностика и типичные неисправности
Данные в пользовательском дашборде не отображаются:
- проверьте выбранный интервал времени вверху справа: возможно, за этот период метрик ещё нет;
- проверьте фильтр
host: он должен совпадать с серийным номером контроллера, и контроллер должен быть в той организации, в которой вы сейчас находитесь в Grafana; - проверьте фильтр
topic: список доступных топиков можно получить изmqtt_metrics_readableза последние сутки; - для графиков используйте
value_numeric, а для текстовых значений —value; - убедитесь, что на странице контроллера не включена опция Отправка метрик: Отключена;
- проверьте, что на контроллере запущен сервис отправки метрик:
systemctl status wb-cloud-agent-metrics@wirenboard.cloud
- если сервис падает, посмотрите его журнал и приложите вывод в обращение в техподдержку:
journalctl -u wb-cloud-agent-metrics@wirenboard.cloud -n 300 --no-pager