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

From Wiren Board
(Redirected from 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 не нужно пробрасывать порты, так как все соединения с контроллера исходящие:

  1. агент стучится по адресу https://agent.wirenboard.cloud ;
  2. для туннелей на стороне облака открываются порты из диапазона 10000 - 30000 и frpc на контроллере подключается по ним.

Это позволяет держать контроллер за NAT, что повышает безопасность.

Подключение контроллера к облаку

Установка агента

Агент доступен и установлен на контроллерах Wiren Board 6 и новее в релизах ПО wb-2407 и новее. Как узнать релиз ПО на контроллере.

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

apt update && apt install wb-cloud-agent

Добавление контроллера в облако

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

По умолчанию контроллер отключен от облака, надо его добавить:

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

Также ссылку на добавление можно получить в консоли, для этого подключитесь к контроллеру по 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 контроллер подключится к облаку автоматически. Перед продажей или передачей контроллера третьей стороне, удалите его из своего облака.

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

Облако поддерживает двухфакторную аутентификацию.

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

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

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

В случае утраты секрета или устройства с приложением-аутентификатором вы можете воспользоваться кодами восстановления для доступа к аккаунту. Для их использования нажмите «Ввести код восстановления 2FA» на странице входа в аккаунт.

Владельцы организаций могут включить обязательную двухфакторную аутентификацию в настройках. В этом случае все участники должны будут её включить в своём профиле перед началом работы.

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

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

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

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

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

Сценарии переноса

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

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

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

Контроллеры будут перенесены сразу, если у вас есть необходимые права и состояние контроллеров не изменилось с момента открытия окна (например, не был запущен другой перенос).

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

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

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

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

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

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

Заявка будет завершена, если:

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

При отмене заявки отменяется перенос для всех контроллеров, входящих в неё.

Дополнительные параметры

При переносе вы можете:

  • очистить пользовательскую мета-информацию контроллера (местоположение, заметки, заголовок, описание), установив соответствующую галочку в окне переноса.

Особенности:

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

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

Чтобы удалить контроллер из облака, перейдите в личный кабинет, откройте страницу контроллера и удалите контроллер.

Также можно отключить контроллер от облака без доступа к личному кабинету:

  1. Подключитесь к контроллеру по SSH.
  2. Введите команду:
    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

Обновление прошивки контроллера из облака

Процесс обновления прошивки из облака аналогичен обновлению прошивки через веб-интерфейс.

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

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

Если не работает подключение к облачным сервисам (например, устройство не отображается в личном кабинете), выполните пошаговую проверку ниже и пришлите вывод команд в поддержку.

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

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

https://status.wirenboard.cloud

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

Отвязка контроллера от организации, к которой нет доступа

Если у вас есть физический доступ к контроллеру, но по какой-то причине нет доступа к организации в 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.

  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. Для проверки можно открыть локально веб-интерфейс контроллера с URL http://ip-address/z2m/, где ip-address — адрес контроллера. Замыкающий слеш обязателен.
  5. Через облачный сервис так: 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

Дашборд по умолчанию в Grafana, выбор организации и контроллера.
  1. В Wiren Board Cloud на странице любого контроллера нажмите кнопку Grafana.
  2. Авторизация в Grafana произойдёт автоматически под вашей учётной записью.
  3. По умолчанию вы попадёте в Grafana-организацию, связанную с организацией в облаке, из которой вы перешли. Откроется дашборд, подготовленный нашей командой.
  4. Если в дашборде по умолчанию не отображаются метрики (пишет No data), возможны следующие причины:
    • выбран контроллер, который ещё не успел отправить метрики после обновления агента;
    • на странице контроллера установлена опция Отправка метрик: Отключена;
    • выбран временной диапазон, за который нет метрик, например метрики начали отправляться только сегодня, а вы пытаетесь смотреть метрики за вчера.
  5. Сменить активную организацию можно в левом верхнем углу интерфейса Grafana. Вам будут доступны только те организации, в которых вы состоите в облаке.
  6. В дашборде по умолчанию можно выбрать интересующий контроллер из активной организации и посмотреть его метрики за указанный период.

Принцип работы: контроллер, 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

Как это выглядит в 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.

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

Пример: плитка со свободной 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 недостаточно.

Для следующих запросов вы должны состоять в организации, к которой привязан контроллер из запроса.

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

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

Просмотр доступных представлений.

Чтобы понять, какие данные доступны и в каком виде:

  1. Откройте Explore.
  2. Выберите источник данных timescaledb.
  3. Переключитесь в режим Code.
  4. Выполните SQL-запрос для просмотра доступных представлений (views) в схеме public:
    SELECT table_name, table_schema
    FROM information_schema.views
    WHERE table_schema = 'public'
    ORDER BY table_name;
    
  5. Для просмотра примера одной строки из основного представления метрик за последний час выполните запрос:
    SELECT *
    FROM mqtt_metrics_readable
    WHERE time > now() - interval '1 hour'
    LIMIT 1;
    

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

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

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

Если нужен сложный дашборд, можно подготовить данные для нейросети:

  1. В Explore выполните запрос к mqtt_metrics_readable по нужному контроллеру и периоду.
  2. Выгрузите результат в CSV через Query inspectorDataDownload CSV.
  3. Дополнительно приложите список топиков контроллера за сутки из SQL-запроса выше.
  4. Опишите, что нужно получить: какие панели, за какой период, какие единицы измерения, какие фильтры и какой тип визуализации нужен.

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

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

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

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

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

Диагностика и типичные неисправности

Данные в пользовательском дашборде не отображаются:

  • проверьте выбранный интервал времени вверху справа: возможно, за этот период метрик ещё нет;
  • проверьте фильтр 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