Home Assistant
Железо и доступ
- Отдельный мини-ПК, HassOS (Home Assistant OS), локальная сеть
- Подключён к Tailscale, IP
100.81.252.67(устройствоhomeassistantв tailnet) - Доступ из Claude Code: HA MCP Server интеграция включена в самом HA (
mcpв components, эндпоинт/mcp_server/sseотвечает 200), подключена в~/.claude.json→mcpServers.homeassistant(типsse, токен из~/.claude/secrets/homeassistant.env) — 09.07.2026 - Дашборд же (“Дом”) правился напрямую через WebSocket API (
ws://100.81.252.67:8123, командаlovelace/config/save) — MCP это отдельный канал (для управления сущностями/сервисами), не для правки lovelace-конфига
Дашборд “Дом” (url_path moi-dom) — построен и работает
Собран и несколько раз доработан за одну сессию 04.07.2026 (storage mode, персистится в HA). Секции:
- Погода — weather-forecast карточка
- Курятник — датчики
sensor.sonoff_1000bd2131_temperature/_humidity, отопление (switch.sonoff_1000bd2131, “Отопление”), свет, ночник - Рассада + фитолампа — вынесены в отдельную секцию от курятника (по просьбе)
- Двор/улица — 7 mushroom-entity-card: прожектор, веранда, вольер, гирлянды, сарай, ворота, дерево
- Медиа — Яндекс Станция Макс, LG WebOS TV (плейбек/громкость)
- Сеть/устройства — скорость Keenetic (down/up), WAN-статус, локация
person.sergei, батарея iPhone
Всего 20-40+ устройств Sonoff + сенсоры. Карточки — кастомная библиотека Mushroom (mushroom-entity-card, mushroom-template-card, mushroom-media-player-card), grid-layout с переменной шириной блоков (column_span 1 или 2), цветовая кодировка иконок по типу (отопление — оранжевый, свет — жёлтый, растения — зелёный, фитолампа — фиолетовый и т.д.).
⚠️ Эта работа зафиксирована только в claude-mem (сессионная память проекта vpnbot-v3, где по всей видимости велась сессия) — в vault не попала вовремя, хотя должна была по правилу “сразу в той же сессии”. Восстановлено задним числом 09.07.2026.
Bubble Card — установлен, новый дашборд “Bubble” (url_path bubble-dom) — 09.07.2026
Установлена кастомная lovelace-библиотека Bubble Card (Clooos/Bubble-Card, HACS repo id 680112919, категория plugin, версия v3.2.4) через HACS.
- SSH/файлового доступа к машине HA нет — установка сделана полностью через недокументированный внутренний WebSocket API HACS (команды
hacs/repositories/list,hacs/repository/download,hacs/repository/info), схему команд подсмотрели в исходниках стороннего проектаhomeassistant-ai/ha-mcp(tools_hacs.py) черезgh - После
hacs/repository/downloadHACS сам зарегистрировал lovelace-resource (/hacsfiles/Bubble-Card/bubble-card.js, typemodule) — ручногоlovelace/resources/createне потребовалось - По решению Сергея (“Новый”) — не трогали существующий “Дом” (
moi-dom), создали отдельный дашборд:lovelace/dashboards/create→url_path: bubble-dom,title: "Bubble",icon: mdi:chart-bubble,show_in_sidebar: true,mode: storage - Контент вида залит через
lovelace/config/save(1 view, 20 карточек), собран на основе кастомныхcustom:bubble-card(card_type: buttonсоsub_buttonдля группировки родственных сущностей,card_type: separatorдля секций) + штатныеweather-forecast,todo-list:- Погода — weather-forecast
- Курятник — Отопление (
switch.sonoff_1000bd2131) с суб-кнопками: температура/влажность, Лампа/Ночник (switch.sonoff_10000af75b_1/_2) - Рассада —
switch.sonoff_1000378afcс суб-кнопкой Фитолампа (switch.sonoff_1000a61ee9) - Двор и улица — 7 отдельных switch-кнопок: Ёлка, Веранда, Вольер, Прожектор, Гирлянды, Калитка, Сарай
- Медиа — Яндекс Станция (bubble media-player card)
- Дела — todo-list (
todo.shopping_list) - Статус — person.sergei с суб-кнопками WAN (
binary_sensor.keenetic_gateway_wan_status), Giga (binary_sensor.giga_connectivity), батарея iPhone
- Все entity_id сверены с реальным дампом
/api/statesперед заливкой — совпали без ошибок - Проверено чтением обратно (
lovelace/config): 1 view, 20 карточек сохранены успешно - Не проверено визуально в браузере (доступа к браузеру у Claude Code нет) — Сергею стоит открыть и посмотреть, дальше дорабатывать по фидбеку
Баг: неверная схема sub_button — исправлено 09.07.2026
Сергей сообщил: на телефоне все карточки дашборда “Bubble” выдают ошибку конфигурации, кроме карточки погоды (единственная не-Bubble Card карточка на дашборде).
- Диагностика с сервера: lovelace-resource
/hacsfiles/Bubble-Card/bubble-card.jsзарегистрирован корректно, HTTP 200 без и с авторизацией; версия HA 2026.7.1 — актуальная. Проблема не в доступности JS-файла. - Найдена реальная причина в самом конфиге: в текущей версии Bubble Card (v3.2.4) поле
sub_buttonвнутриcard_type: button— это объект с ключомmain(массив суб-кнопок, опционально ещёbottomдля сгруппированных рядов), а НЕ плоский массив, как было в первой версии конфига. Плоский массив — устаревший/неверный формат, ломает валидацию карточки. - Исправлены все 3 карточки, где использовался
sub_button(Отопление, Рассада, Статус):sub_button: [...]→sub_button: {"main": [...]}. Пересохранено черезlovelace/config/save. - ⚠️ Фикс отправлен превентивно, до получения точного текста ошибки от Сергея — есть шанс, что реальная причина была другая (например, кэш фронта в мобильном приложении HA, который тоже давал бы такую картину — “всё Bubble Card ломается, нативная карточка работает”). Нужно подтверждение от Сергея, что дашборд теперь открывается нормально; если нет — смотреть на кэш companion-app или другую причину.
Баг: Sonoff интеграция — cloud auth password error, 4 устройства unavailable — 10.07.2026
Сергей сообщил: на новом (Bubble) дашборде Лампа и Ночник курятника в статусе “недоступны”. Проверено через REST API — реально unavailable в самом HA, не баг дашборда.
- Все 12 Sonoff-свитчей на одном config entry (
custom_components.sonoff, аккаунт eWeLinksergmak@gmail.com) — работает в гибридном режиме LAN+cloud - После рестарта HA в 04:52 UTC 10.07 — 8 устройств переподключились по LAN и показывают реальный статус (
off), 4 не переподключились по LAN:switch.sonoff_10000af75b_1/_2(Курятник Лампа/Ночник),switch.sonoff_1000a61ee9(Фитолампа),switch.sonoff_1000378afc(Рассада) - Без LAN-соединения эти 4 должны падать обратно на cloud fallback, но в логе (
system_log/listчерез WS API):custom_components.sonoff: Can't login in auto mode: AuthError('password error!')— сохранённый в HA пароль от eWeLink-аккаунта неверный/устарел - Перезагрузка config entry (
POST /api/config/config_entries/entry/{id}/reload) не помогла — залогиниться в облако не может, пароль всё равно неверный - В фирменном приложении eWeLink эти устройства доступны и переключаются — потому что у приложения своя, независимая авторизация (не завязана на сохранённый в HA пароль)
Как поменять пароль (интеграция не поддерживает reconfigure/reauth):
supports_reconfigure: false, Options flow не содержит поле пароля, HA Repairs не создаёт уведомление на этот auth-фейл — единственный путь: удалить интеграцию (⋮ на карточке в Settings → Devices & Services) и добавить заново через ”+ Добавить интеграцию” → поиск “Sonoff” → ввести username/password/country_code
Результат после переустановки (10.07.2026, ~06:26 UTC) — частичный фикс:
switch.sonoff_10000af75b_1/_2(Курятник Лампа/Ночник, изначальная жалоба) — восстановились,off, пароль был реальной причинойswitch.sonoff_1000a61ee9(Фитолампа),switch.sonoff_1000378afc(Рассада) — осталисьunavailable, ушли в offline в 06:21:50 (до переустановки), с тех пор не менялись- Проверено: оба привязаны к актуальному config_entry_id (
01KX5B10AY7YAHYSVAW4NMCBYG), не к старому/осиротевшему — не проблема регистрации. В system_log по ним больше нет auth-ошибок, только служебный варнинг “entity missing” (следствие, не причина) - Вывод: похоже на отдельную проблему именно этих 2 устройств (питание/Wi-Fi), не связанную с паролем интеграции. Нужно свериться со статусом в приложении eWeLink — если там тоже офлайн, дело в самих устройствах.
- Уточнение от Сергея: Фитолампа и Рассада — сезонное оборудование (рассада высаживается весной), сейчас намеренно отключены, появятся снова только через год. Не баг. По просьбе Сергея карточка “Рассада” (switch.sonoff_1000378afc + суб-кнопка Фитолампа switch.sonoff_1000a61ee9) убрана с дашборда Bubble (
lovelace/config/save, url_pathbubble-dom) — было 20 карточек, стало 18. Сущности в HA не удалены, только скрыты с этого дашборда.
Доступ (для Claude Code, не для Hermes)
- Long-lived access token лежит в
/home/claude/.claude/secrets/homeassistant.env(HASS_URL,HASS_TOKEN), права 600. Значение здесь не хранится. - Выдан 09.07.2026 повторно — предыдущий разовый токен (04.07) нигде не сохранялся и был потерян между сессиями.
Инцидент: Gateway shutdown loop (2026-07-14)
- После добавления HASS_TOKEN в
.envпоявились битые строки (MCP...) из-за коррумпированного tool_call - Gateway крашился при старте → systemd
Restart=always(RestartSec=5) → бесконечный цикл - Решение: удалить строки 482-484 из
/home/claude/.hermes/.env - Gateway стабилен после очистки
Доступ через Hermes Agent (2026-07-09)
- Плагин
hermes-homeassistant(bundled) — настроен и работает HASS_TOKENиHASS_URLдобавлены в/home/claude/.hermes/.env- Конфиг в
~/.hermes/config.yaml:platforms: homeassistant: enabled: true extra: url: http://100.81.252.67:8123 watch_all: true cooldown_seconds: 30 - Gateway перезапущен, адаптер подключён, события forward-ятся
- В Connected Platforms:
homeassistant: Connected ✓
Установленные skills (Claude Code)
homeassistant-ai/skills@home-assistant-best-practicesvercel-labs/skills@find-skills
Что осталось
- Проверить
/mcpв Claude Code после рестарта сессии — что HA MCP реально подключился и виден список тулов - Уточнить у Сергея, актуален ли ещё дашборд “Дом” 04.07 или требует доработки (последняя правка — реорганизация секции курятника)
Трекинг присутствия семьи (2026-07-17)
Проблема: Honour (MagicOS) убивает фоны Companion App
- На iPhone Companion App работает стабильно,
person.sergeiкорректно обновляется - На Honour (MagicOS) Companion App убивается системой через 5-15 минут
- Решение: Ping (ICMP) — единственный надёжный способ детектить присутствие
Решение: Ping sensor + Hermes cron
- Ping sensor —
binary_sensor.192_168_2_10, добавлен через HA UI (интеграция Ping)- IP 192.168.2.10 зарезервирован в DHCP Keenetic для Honour Танюшки
- Показывает
onкогда телефон в WiFi,offкогда вне сети
- Hermes cron —
no_agent: true, скриптha_sync_honor.sh- Запуск: каждые 2 минуты
- Сравнивает Ping state с
device_tracker.honor_wifi - При изменении: шлёт
device_tracker/seeAPI → HA обновляет трекер - При отсутствии изменений: молча, без сообщений
- device_tracker.honor_wifi — создан через HA API, привязан к
person.taniushka- Состояния:
home/not_home - Привязать в UI: Settings → Areas & Devices → Persons → Taniushka → add device_tracker.honor_wifi
- Состояния:
Bubble dashboard — карточка Honour
- Добавлена в секцию “Сеть и устройства” на дашборде Bubble
- bubble-card: показывает батарею, статус зарядки, локацию (home/not_home)
- Стиль: как у iPhone (battery-state-entity + зарядка иконкой)
Баг: cron падал с provider authentication error (2026-07-17)
- Причина: скрипт
ha_sync_honor.shбыл записан с***вместо$HASS_TOKEN— curl отправлялBearer ***→ HA 401 - Cron спамил 35 сообщений в чат, пока пользователь не заметил
- Фикс: замена
***на$HASS_TOKENв скрипте через sed - После фикса:
execution_success: true, статусok
Файл скрипта
/home/claude/.hermes/scripts/ha_sync_honor.sh — no_agent: true, каждые 2 мин
Цель
Стабильный доступ к HA: WebSocket для правки дашборда/lovelace, MCP для управления сущностями/автоматизациями напрямую из Claude Code.