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.jsonmcpServers.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/download HACS сам зарегистрировал lovelace-resource (/hacsfiles/Bubble-Card/bubble-card.js, type module) — ручного lovelace/resources/create не потребовалось
  • По решению Сергея (“Новый”) — не трогали существующий “Дом” (moi-dom), создали отдельный дашборд: lovelace/dashboards/createurl_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, аккаунт eWeLink sergmak@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_path bubble-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-practices
  • vercel-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

  1. Ping sensorbinary_sensor.192_168_2_10, добавлен через HA UI (интеграция Ping)
    • IP 192.168.2.10 зарезервирован в DHCP Keenetic для Honour Танюшки
    • Показывает on когда телефон в WiFi, off когда вне сети
  2. Hermes cronno_agent: true, скрипт ha_sync_honor.sh
    • Запуск: каждые 2 минуты
    • Сравнивает Ping state с device_tracker.honor_wifi
    • При изменении: шлёт device_tracker/see API → HA обновляет трекер
    • При отсутствии изменений: молча, без сообщений
  3. 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.