Home Assistant¶
Умный дом за дашбордом: работает ли Home Assistant или он запустился в режиме восстановления, сущности, недоступные или неизвестные по домену, низкий заряд батарей, ожидающие обновления (ядро, операционная система, дополнения, прошивка устройств) и открытые исправления.
DumbMonit читает REST API Home Assistant с долгоживущим токеном доступа выделенного пользователя без прав администратора, и список исправлений через WebSocket API. Он никогда не вызывает сервис, никогда не запускает событие и никогда не меняет состояние.
Отказ, за которым стоит следить, — не «Home Assistant не отвечает» (это уже видит проверка сайта), а Home Assistant отвечает, но что-то за ним перестало работать: интеграция, у которой все сущности стали недоступны после обновления, Zigbee-стик, отвалившийся от шины USB, датчик двери, батарея которого достигла 5 %, исправление, ожидающее неделями.
Что отслеживается¶
Все метрики с префиксом dumbmonit_homeassistant_.
| Метрика | Что | Метки |
|---|---|---|
info |
значение 1 | version |
running |
1, когда состояние ядра — RUNNING, 0 — пока оно запускается или останавливается |
|
recovery_mode |
1 в режиме восстановления (или безопасном режиме на старых версиях): конфигурация не загрузилась | |
entities |
сущности по домену | domain |
entities_unavailable, entities_unknown |
сущности в этом состоянии, по домену | domain |
entity_unavailable |
значение 1 на каждую недоступную сущность, не более 50 | entity, name, domain |
batteries |
датчики батарей и булевы датчики батарей | |
batteries_low |
батареи ниже порога, и булевы датчики батарей, которые включены | |
battery_low |
один ряд на каждую низкую батарею, значение = её уровень в процентах (0 для булевого датчика), не более 50 | entity, name |
updates_available |
сущности update.*, которые включены |
|
update_available |
значение 1 на каждое ожидающее обновление, не более 50 | entity, name, installed, latest |
repairs |
открытые исправления (ни игнорируемые, ни отклонённые) по серьёзности: critical, error, warning |
severity |
repair |
значение 1 на каждое открытое исправление, не более 50 | issue, domain, severity |
scrape_errors |
вызовы, завершившиеся ошибкой при последней проверке |
Некоторые домены по природе находятся в состоянии unknown: никогда не
нажатая кнопка, никогда не полученное событие, сервис уведомлений или речи.
Они не считаются unknown: button, input_button, event, scene,
notify, tts, stt, conversation, wake_word, ai_task, person.
Опция Domains left out убирает дополнительные домены (например,
device_tracker или media_player для устройств, которые часто выключены)
из счётчиков недоступных и неизвестных.
Исправления не в REST API: DumbMonit открывает WebSocket API, отправляет
repairs/list_issues и закрывает его. Пользователь без прав администратора
может их перечислять. Опция Read the repairs отключает это.
Применяемые встроенные правила: «Home Assistant в режиме восстановления», «Home Assistant не запущен», «Сущности Home Assistant стали недоступны», «Низкий заряд батареи Home Assistant», «Доступно обновление Home Assistant», «Требуется исправление Home Assistant», плюс «Монитор недоступен».
Устройства¶
Каждый телефон и планшет, вошедшие в приложение-компаньон (интеграция
mobile_app), публикуются в общем семействе, разделяемом каждой
интеграцией DumbMonit, отслеживающей клиентские устройства —
dumbmonit_client_device_*, с префиксом без homeassistant, полностью
описанным в разделе
Клиентские устройства:
| Метрика | Что | Метки |
|---|---|---|
last_seen_timestamp_seconds |
Последнее обновление сущности device_tracker устройства |
device, type (Mobile), os (пусто), user (человек, с которым связано, если есть), kind |
stale_seconds |
Положительно, когда устройство превысило device_stale_days (по умолчанию 3) без обновления; управляет правилом Клиентское устройство устарело |
device, type, os, user, kind, signal (всегда connection: у Home Assistant нет резервной копии для сообщения) |
Как распознаётся устройство: /api/states не сообщает, какая интеграция
создала сущность — для этого нужен реестр сущностей, который REST API не
обслуживает. device_tracker приложения-компаньона — единственный, кто
задаёт атрибут battery_level; сторонние интеграции геолокации (Life360,
OwnTracks, демо-интеграция, используемая при тестировании) задают максимум
battery. Сторонняя интеграция, которая случайно скопировала бы точно это
имя атрибута, была бы принята за приложение-компаньон; и наоборот, устройство
приложения-компаньона с отключённым сообщением о батарее отсутствует в
таблице, а не показывается неправильно. Учётная запись устройства, когда
известна, берётся из сущности person.*, чей атрибут device_trackers
называет его.
Страница монитора¶
Панель над графиками читает то, что сохранила проверка; открытие страницы никогда не обращается к Home Assistant. Сначала она сообщает, что не так (режим восстановления, исправления уровня error, недоступные сущности), затем — низкие батареи по уровню, ожидающие обновления с их версиями, сущности по домену, и таблицу устройств приложения-компаньона с их последним подключением.
Как это проверялось¶
На Home Assistant 2026.9.4, с долгоживущим токеном пользователя без прав
администратора: конфигурация, состояния сущностей демо-интеграции и шаблонных
датчиков (уровни батарей, булевый датчик батареи, недоступный датчик),
сущности обновлений и список исправлений через WebSocket API. Атрибуты
device_tracker приложения-компаньона (battery_level, source_type) были
проверены по исходному коду интеграции mobile_app, а не на реальном
телефоне.
Создание выделенного пользователя и долгоживущего токена в Home Assistant¶
-
В Home Assistant: Settings → People → Users → Add user (включите режим Advanced в своём профиле, если вкладки Users нет). Назовите пользователя так, дайте ему длинный случайный пароль и оставьте переключатель Administrator выключенным. Обычный пользователь может читать каждую сущность и список исправлений, и не может менять конфигурацию.
dumbmonit -
Войдите в Home Assistant один раз этим пользователем, откройте его профиль (имя внизу боковой панели) → Security → Long-lived access tokens → Create token. Назовите его по имени DumbMonit и скопируйте сразу: он показывается только один раз.
-
В DumbMonit введите адрес Home Assistant, например «homeassistant.local» (порт 8123) или «https://ha.example.net» за обратным прокси, и вставьте токен. Батареи ниже 20 % считаются низкими; опция Low battery threshold это меняет.
-
DumbMonit читает только /api/config, /api/states и, через WebSocket API, список исправлений. Он никогда не вызывает сервис, никогда не запускает событие и никогда не меняет состояние.
Warning
Долгоживущий токен несёт все права своего пользователя и остаётся действительным десять лет: создавайте его для выделенного пользователя, никогда для своего собственного. Home Assistant обслуживает обычный HTTP, если TLS не настроен, а токен путешествует с каждым запросом: в недоверенной сети используйте HTTPS. Каждый телефон и планшет, вошедшие в приложение-компаньон (интеграция mobile_app), появляются в таблице Devices ниже с их последней активностью; это опционально и молчит без этого приложения.
Учётные данные¶
| Учётные данные | Поля |
|---|---|
| Долгоживущий токен доступа | Токен выделенного пользователя, отправляется как Authorization: Bearer. |
Адрес: имя хоста или IP (homeassistant.local), host:port, или полный
URL (https://ha.example.net, с префиксом пути за обратным прокси);
завершающий /api допускается. Опции: протокол (по умолчанию HTTP), порт
(8123), проверка сертификата, таймаут запроса (10 с), порог низкой батареи
(20 %), исключённые домены (нет), исправления (чтение) и устаревание
устройства (device_stale_days, по умолчанию 3 дня).