Xiaomi Gateway 3: статистика работы ZigBee

1 февраля, 2021Изменена: 3 февраля, 2021 в 09:29

В какой-то момент времени, в компоненте HA для работы с 3м гейтом появился крайне интересный функционал – статистика по работе ZigBee и BT сетей – показатели link quality, RSSI, счетчики полученных и пропущенных сообщений, а так же прочая крайне интересная информация. Особенно она бывает полезна для диагностики всевозможных проблем ZigBee сети.
Но наличие данных это хорошо, а вот их визуализация – вопрос не менее важный. Вместе с новой версией компонента, был предложен и пример lovelace dashboard’а для отображения этой информации.
Т.к. меня эта тема увлекла, я немного развил предложенный пример, к слову, изначально позаимствованный в репозитории Дмитрия (to4ko) (это бездонный кладезь крайне интересных решений).

YAML конфиг этого дашборда всегда можно посмотреть здесь.

Текущий вариант выглядит так:

Основа всего этого – кастомная карточка для интерфейса HA – flex-table-card. Может быть установлена как вручную, так и через HACS. Инструкции по установке есть в репозитории карточки.

Из более-менее интересных моментов этого дашборда можно отметить:

  • Использование vertical-stack в качестве “обертки” для всех остальных, позволяет обойти ограничение в одну карточку, которое появляется при переключении view в режим панели и распределить данные по нескольким карточкам.
title: Radio Quality [GW 3]
path: gw3
icon: mdi:radio-tower
panel: true
cards:
  - type: vertical-stack
    cards:
  • Использование некоторого кол-ва JavaScript функций для изменения и форматирования вывода данных в ячейках.
    Например, колонка Connected Since для сенсоров самого шлюза форматируется с использованием такого кода:
- data: state
  name: Connected Since
  modify: >
    var dt = new Date(x);
    var hrs = parseInt((Date.now()-Date.parse(x)) / 3600000);
    var min = parseInt(((Date.now()-Date.parse(x)) / 60000) % 60);
    var sec = parseInt(((Date.now()-Date.parse(x)) / 1000) % 60);
    hrs = (hrs < 10) ? "0" + hrs : hrs;
    min = (min < 10) ? "0" + min : min;
    sec = (sec < 10) ? "0" + sec : sec;
    isFinite(dt) ? dt.toLocaleString(['ru-RU', 'en-US']) +
    " (Up: " + hrs + ":" + min + ":" + sec + ")" : ""
  • Добавление графика потерь сообщений от ZigBee устройств с помощью Grafana.
    Для работы этой части необходима, собственно, графана (как вариант – Add-On установленный через Supervisor) и какая-либо БД для нее (более-менее стандартный вариант здесь – InfluxDB, так же есть в Add-On’ах).
    Секция конфига HA для InfluxDB при этом может содержать следующее:
  include:
    entity_globs:
      # Данные всех сенсоров попадающих под эту маску будут отправлены в InfluxDB
      - sensor.*_zigbee
  component_config_glob:
    sensor.*_zigbee:
      # Часть атрибутов этих сенсоров при передаче в БД игнорируется, они нам не нужны
      ignore_attributes:
        - state
        - msg_received
        - last_msg

В графане должен быть создан график по атрибуту last_missed.
Код запроса к БД для построения графика может выглядеть как-то так:

SELECT "last_missed" FROM "state" WHERE ("domain" = 'sensor') AND $timeFilter GROUP BY "friendly_name"

Опции отображения графика – по вкусу.

Отображение графика в lovelace – с помощью карточки iframe
Кое-какие вещи могут быть настроены через параметры URL, например:
from=now-24h – график будет за последние сутки (24 часа)
theme=light – тема, светлая или темная (dark)
refresh=1m – частота обновления графика

https:// grafana-graf-url &from=now-24h&to=now&theme=light&panelId=2&refresh=1m

<grafana-graf-url> – URL графика, искать в меню графика Share, далее закладка Embed.

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