Однажды у моей метеостанции Ecowitt умер комнатный дисплей. Через неделю на стене гостиной висел планшет с панелью умного дома, а на GitHub лежало открытое Android‑приложение, которое я написал вместе с ИИ‑ассистентом Claude. Расскажу, как так вышло, какие задачи пришлось решить (от вздувающихся батарей до сына, который хотел смотреть YouTube) и чему меня научила разработка с ИИ, если ты сам не Android‑разработчик.

Как всё началось

В один солнечный день у моей метеостанции Ecowitt перестал работать комнатный дисплей. Уличные датчики при этом продолжали исправно передавать данные. Покупать новую станцию целиком не хотелось: хотелось вернуть данные, потратив как можно меньше.

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

В итоге обе задачи решились вместе:

  • Wi‑Fi‑шлюз Ecowitt вернул уличные датчики в Home Assistant. Это заметно дешевле новой метеостанции.

  • Старый Android‑планшет (Lenovo Tab M9) показывает погоду вместе с долгожданной панелью умного дома. Это тоже намного дешевле специализированного дисплея для Home Assistant.

Три проблемы

Батарея. Настенная панель должна работать всё время, а для батареи планшета это плохо. Литий‑ионный аккумулятор, который круглосуточно держат на 100%, быстро стареет и может вздуться. Для планшета на стене это реальный риск. Логичное решение: подключить зарядку через умную розетку, которой управляет сам Home Assistant, и держать заряд в щадящем диапазоне. Но для этого планшет должен сообщать Home Assistant уровень своего заряда.

Лицензия. Для настенных панелей есть готовые киоск‑приложения, самое известное из них Fully Kiosk Browser. Это хороший продукт, но многие его функции требуют платной лицензии на каждое устройство. Мне хотелось обойтись без неё.

YouTube. Планшет должен показывать только панель Home Assistant. Иначе он быстро превращается в телевизор для других членов семьи:) Значит, нужен режим киоска, из которого нельзя просто так выйти.

Как я работал с ИИ

Я не Android‑разработчик. У меня была подписка на Claude, и я решил проверить, можно ли с ним довести такой проект до рабочего состояния. ИИ писал Андроид приложение, я «ковырял» Home Assistant. Работа шла в двух окнах: в обычном чате с Claude я обсуждал идеи, решения и формулировки, а код писал Claude Code прямо в VS Code на моём компьютере под Windows.

Что сработало:

  • Подробное техническое задание в начале. Первым сообщением я отправил большой документ: цель, устройство, окружение, требования, этапы. Claude Code сначала проверил окружение (JDK, Android SDK, adb) и только потом начал писать код.

  • Работа по фазам. Каждая фаза начиналась с плана, который я читал и утверждал, и заканчивалась рабочей сборкой на планшете. Никаких «напиши всё сразу».

  • Роли и ревью. Для проекта были настроены отдельные роли: архитектор, разработчик, специалист по Home Assistant, тестировщик и ревьюер безопасности. Архитектор проверял каждый план до реализации и не раз находил в нём настоящие ошибки.

  • Файл памяти проекта. Все решения, правила и статус проекта записывались в CLAUDE.md. Благодаря этому новая сессия продолжала работу там, где закончилась предыдущая.

  • Тесты на реальном планшете. Планшет был подключён через adb, сначала по кабелю, потом по Wi‑Fi. Claude Code собирал, устанавливал и читал логи сам, а я проверял поведение руками по чек‑листам.

Моя роль была не в написании кода, а в решениях: что нужно, что не нужно, где остановиться. Как оказалось, это самая важная часть работы. Несколько раз приходилось «бить ИИ по рукам» и убирать ненужные фичи. Иначе бы мы никогда не закончили. В общем‑то ничего нового. Все довольно банально при работе с ИИ. Но я тут и не претендую на уникальность. Просто хотелось поделится опытом и похвалится результатом.:)

Интересные технические решения

Зарядка через умную розетку. Приложение сообщает Home Assistant уровень заряда и температуру батареи. Блюпринт в Home Assistant включает розетку зарядки при 40% и выключает при 80%. При температуре батареи 40 °C зарядка отключается, а вспомогательный переключатель «блокировка перегрева» не даёт её включить, пока батарея не остынет до 35 °C, даже после перезапуска Home Assistant. Если планшет пропал из сети на 30 минут, розетка включается на всякий случай. Все эти параметры настраиваются или в параметрах MQTT устройства или в свойствах приложения работающего на планшете. Или там и там. На практике график заряда выглядит как ровная «пила» между 40 и 80%, примерно три цикла в день. Розетка у меня Zigbee, через Zigbee2MQTT, с поведением «включена после отключения питания», чтобы планшет заряжался, даже если Home Assistant недоступен.

MQTT discovery. Планшет появляется в Home Assistant как устройство автоматически, без YAML. Сущностей намеренно мало, всего пять: уровень заряда, температура батареи, ночной режим, яркость и кнопка перезагрузки страницы. (Изначально ИИ «наваял» из штук 30, но волевым решением большинство были удалены как не нужные)

MQTT свойства дашборда
MQTT свойства дашборда

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

Режим киоска. Здесь используется стандартный механизм Android: приложение становится владельцем устройства (device owner, настраивается один раз через adb) и включает Lock Task Mode. Строка состояния, уведомления, кнопки «Домой» и «Недавние» блокируются, меню питания остаётся. Главное требование: не запереть самого себя. Поэтому блокировка включается отдельным переключателем только при заданном PIN‑коде, а в настройках есть «аварийные выходы»: разблокировка на 15 минут, открытие настроек Android и полное снятие прав владельца. adb по Wi‑Fi и USB продолжает работать, сброс к заводским настройкам никогда не блокируется.

Самовосстановление. Раз в минуту приложение проверяет, отвечает ли страница, и пересоздаёт её, если она зависла. Оно также замечает, когда интерфейс Home Assistant потерял соединение, перезагружает страницу после сетевых сбоев и перезапускается после падения, с защитой от бесконечного цикла перезапусков.

Ошибки и уроки

ИИ любит переусложнять. Это главный урок проекта. Первоначальное ТЗ было написано «для паритета с Fully Kiosk», и в нём было всё: детекция движения камерой, синтез речи, локальный REST API, десятки настроек, уведомления о каждом сбое. Раз за разом ИИ предлагал добавить ещё датчик, ещё настройку, ещё оповещение. В какой‑то момент на экране настроек были параметры, которые я не понимал сам. Что такое user agent и зачем он мне?

Переломом стал принцип, который я записал в память проекта: это бытовой прибор, а не критичная для бизнеса система. Если панель на время станет недоступна, я это и так замечу. Каждая настройка и каждая сущность должны служить одному из четырёх: показывать панель, спать ночью и просыпаться от касания, беречь батарею, не пускать детей в YouTube. Всё остальное ушло: число сущностей в Home Assistant сократилось примерно с тридцати до пяти, а настроек осталось столько, сколько реально нужно при установке. Фазу с камерой и голосом я выкинул целиком. Приложение от этого стало только лучше.

Разрешение экрана — не то, что видит страница. Панель я сначала нарисовал под разрешение планшета 1340×800. На планшете часть панели не поместилась: Android масштабирует страницы с коэффициентом 1,25, и браузер видит экран размером 1072×640. Теперь приложение само показывает реальный размер области в настройках.

ИИ‑ревью действительно находит ошибки. Архитектор до реализации нашёл, что перезапуск приложения через системный будильник не сработает из‑за ограничений Android на запуск из фона. Ревью безопасности нашло, что любой, кто может отправлять MQTT‑сообщения, мог бы подделывать строки в журнале. Это стоит того, чтобы каждую фазу проводить через ревью.

Вовремя остановиться. В какой‑то момент я сказал: «Мы не можем бесконечно дорабатывать то, что уже работает». После этого проект был заморожен по функциям: только исправления ошибок до версии 1.0.

Результат и что дальше

Панель уже несколько недель висит на стене гостиной и работает без моего участия: показывает время, погоду с собственной метеостанции, поток энергии солнечных панелей, осадки, розу ветров и состояние дверей. Батарея живёт между 40 и 80%, ночью экран чёрный, а YouTube на планшете больше не открывается.

Приложение называется Kiosara. Оно открытое (Apache 2.0), бесплатное, без аналитики и сторонних сервисов: общается только с вашим Home Assistant и MQTT‑брокером. В репозитории есть APK, блюпринт зарядки с кнопкой импорта, пример панели с тёмной темой и подробная инструкция по настройке.

Сейчас это бета‑версия 0.9.0: она проверена ежедневной работой, но только на одном планшете. Если вы попробуете её на своём устройстве, буду очень благодарен за короткий отчёт на GitHub, даже если что‑то не заработало. Это сейчас самое полезное.

Комментарии (0)