Платформа UytHome — что сделано и как устроено
Платформа UytHome

Шестнадцать систем, собранных под одну работу

Умный дом и электрика обычно живут в разных мирах: тут смета в таблице, там панель в приложении, а между ними — память монтажника. Здесь это одна платформа: расчёт проекта, замер, щит, монтаж, панель в доме, обновления, диагностика и поддержка связаны данными, а не пересказом. Ниже — живые экраны каждой системы, архитектура внутри и честный разбор того, что оказалось сложным.

Главный экран панели UytHome: карточки дома, климата, энергии, пространств, камер и безопасности
Панель UytHome, экран «Обзор» · нажмите, чтобы увеличить
16работающих систем в контуре
3слоя: дом · облако · рабочее место
99статей внутренней документации
0открытых портов в дом заказчика
Новое в панели

Новые устройства подключает ИИ, а не установщик

Обычно каждый новый датчик или робот-пылесос — это вызов специалиста либо вечер наедине с инструкцией. В UytHome это разговор: вы говорите Джарвису, что купили, — остальное он делает сам.

«Я купил робот-пылесос»Скажите голосом или текстом — или просто пришлите фото коробки. Джарвис прочитает производителя и модель со снимка и поймёт вас, даже если название прозвучало неточно.
Найдёт и установит самПоиск по живым каталогам — 1184 встроенных интеграции и тысячи проверенных сторонних. По вашему «да» установит, перезапустит дом и сам вернётся закончить настройку. Пароли уходят напрямую в дом — ассистент их не видит.
Доведёт до комнатыZigbee-датчик мастер ловит за минуту: имя по-русски, комната — и устройство сразу в карточке комнаты. Спросите «я добавил, ты его видишь?» — ответит по данным дома: что появилось, какого типа и где.
Как это связано

Три слоя и одно направление данных

Дом всегда обращается наружу сам — входящих подключений в него нет. Облако считает и хранит, рабочее место читает. Канала команд из облака в дом не существует: это сознательное ограничение, а не недоделка.

ДОМ ЗАКАЗЧИКА Home Assistant Панель UytHome Интеграция и агент Голос · Джарвис ОБЛАКО Обновления панели AI-движок Подписки и касса Fleet: инциденты РАБОЧЕЕ МЕСТО Объекты и сметы Щиты и планы Документы и закупки Экран парка домов телеметрия и обращения версия панели и ответы AI только чтение
Дом ходит наружу сам — портов и VPN не требуется Облако считает круглосуточно и хранит историю Рабочее место читает и продолжает работать при недоступном облаке
Каталог систем

Что сделано

Каждая карточка — работающая система, а не концепт. На снимках — живые экраны (данные вымышленные), кнопка «как устроено» открывает архитектуру и инженерные решения.

Экран «Обзор» панели UytHomeувеличить
Умный дом01

Панель UytHome

Единый интерфейс дома вместо десятка приложений: комнаты, свет, климат, камеры, охрана, ворота, инженерия, энергия и сценарии — в одной логике и на всех экранах.

  • Разделы под реальный дом, а не под список устройств
  • Отдельный мобильный слой: нижняя навигация, шторки, поток камеры на главном экране
  • Конструктор сценариев мастером, без YAML
  • Встроенное руководство владельца — около 47 статей с поиском и диагностикой
Как устроено

Архитектура

  • Панель — одна веб-компонента для Home Assistant, а не форк интерфейса: ставится как карточка и не мешает штатному Lovelace.
  • Загрузка двухступенчатая: лёгкий загрузчик сразу показывает заставку и подтягивает основной файл — Lovelace не успевает показать «ошибку конфигурации».
  • Мобильный слой — последний в каскаде стилей и намеренно перекрывает десктопный; разметка телефона ветвится по медиазапросу, а не по ширине окна на лету.

Решения, которые дались опытом

  • Фоновые перерисовки на телефоне троттлятся: каждая пересборка DOM переносила видеоплеер и он мигал. Действия пользователя рисуются мгновенно, фон — раз в несколько секунд.
  • Кэш файла панели с почасовым ключом: раньше телефон качал мегабайты при каждом открытии.
  • Панель заперта во вьюпорт, скроллится только рабочая область — иначе iOS оставлял «зависший» скролл документа.
Руководство владельца версионируется вместе с панелью: обновилась функция — обновилась и статья о ней.
Web ComponentsHome AssistantМобильный слойСмоук-тесты
Экран настроек панели UytHome с редактором обзора и списком комнатувеличить
Умный дом02

Автонастройка под чужой дом

Панель сама разбирает незнакомый Home Assistant: находит комнаты, свет, климат, камеры, охрану и предлагает готовую конфигурацию. Установка перестала быть неделей ручной разметки.

  • Классификатор устройств по ролям, а не по жёстким идентификаторам
  • Мастер первого запуска с отчётом «что нашлось и с какой уверенностью»
  • Учится на исправлениях владельца и применяет их к похожим случаям
  • Комната угадывается из названия устройства, включая сокращения монтажника
Как устроено

Архитектура

  • Все конфигурации разделов — не константы в коде, а документ дома, который материализуется при загрузке. Встроенные значения — только дефолты «родного» дома.
  • Привязки описаны ролями: новое устройство получает роль, а не строчку в коде панели.
  • Настройки владельца синхронизируются между устройствами через профиль пользователя Home Assistant.

Честность важнее магии

  • Слабо распознанное помечается «средней» уверенностью и подписью «проверьте» — панель не делает вид, что уверена.
  • Обучение на исправлениях включается только там, где классификатор слаб: иначе одна случайная правка ломала бы уверенные связи.
  • Регрессия проверяется на нескольких синтетических домах разной архитектуры — от квартиры до дома с композитными воротами.
КлассификаторДокумент домаМиграция
Экран сценариев панели: карточки сценариев «Ушёл из дома», «Ночь», «Кино» и расписание автоматизацийувеличить
Умный дом03

Джарвис — AI-диспетчер дома

Не чат ради голосовых команд, а объясняющий и делающий слой: почему в комнате холодно, почему сработала сигнализация, куда ушло электричество — и подключение новых устройств разговором, без установщика.

  • Новое устройство — диалогом: нашёл интеграцию в каталогах, установил по вашему «да», перезапустил дом и довёл настройку до конца
  • Фото коробки вместо названия: прочитает производителя и модель со снимка; фото годится и для вопросов «что это за устройство»
  • Вопрос «почему холодно» разбирается по связям дома: уставка и факт, скорость прогрева, положение контура, подача котла, окна, соседние зоны — с диагнозом, а не показанием
  • Утренняя сводка, разбор событий, анализ энергии и климата, месячный отчёт
  • Голосовой диалог с распознаванием и синтезом речи
  • Сценарий из фразы — открывается в конструкторе на шаге «Проверка»
  • Опасные действия голосом не выполняются: замки и ворота требуют подтверждения кнопкой
Как устроено

Каскад

  • Сначала бесплатные интенты — простые команды выполняются локально и не стоят ничего. К модели уходит только то, что действительно требует рассуждения.
  • Факты считает дом и панель, модель их только объясняет — ответ не может «придумать» показания счётчика.
  • Все AI-кнопки панели ходят в один движок объяснений с разными видами запроса, а не в десяток разных промптов.

Граф дома

  • Между устройствами и ассистентом появился слой связей: комнаты, климатические зоны, контуры, источники тепла, счётчики, проёмы — и рёбра между ними («греет», «содержит», «управляет»). Список устройств отвечает на «что есть», граф — на «как соединено», и без второго вопрос «почему» неразрешим.
  • Граф собирается из уже описанной конфигурации дома, без единого нового идентификатора сущности, и переживает переименования так же, как связи панели.
  • Разбор идёт вторым ходом: модель просит факты по узлу — панель считает их локально по истории дома и присылает готовыми. Числа не выдумываются по построению.
  • Поверх фактов работают правила, а не модель: они дают вывод и обязаны уметь сказать «не хватает данных» вместо ближайшей подходящей причины.
  • Контур наблюдается каскадом «сервопривод → реле → термостат зоны»: отдельной сущности привода в доме может не быть, но команду контуру подаёт сам термостат — значит слепых зон нет.

Экономика и надёжность

  • Детерминированный кэш ответов: одинаковые по смыслу факты (с квантованием чисел) переиспользуют готовый текст, подставляя изменившиеся значения. Это не нейросеть — и в этом смысл: результат воспроизводим и бесплатен.
  • Поверх тарифных лимитов стоит общий предохранитель на дом — защита от разорительного цикла.
  • Провайдер модели переключаемый; контракт ответа для панели при этом не меняется.
  • Контекст диалога держится стабильным идентификатором разговора: без этого голосовой агент терял нить на каждой фразе.
Каскад интенты→LLMГраф домаПравила диагнозаСтруктурированный выводКэш ответовSTT/TTS
Одна команда в доме заказчика Интеграция UytHome панель обновления копии
Умный дом04

Интеграция для Home Assistant

Установка UytHome в новом доме — одна команда и перезапуск. Дальше система сама держит панель в актуальном состоянии и выгружает резервные копии.

  • Ставит панель, регистрирует ресурс интерфейса, заводит паспорт дома
  • Сущность обновления в самом Home Assistant — как у любой штатной интеграции
  • Ежедневная выгрузка резервной копии по расписанию
  • Телеметрию обслуживания можно выключить в параметрах
Как устроено

Архитектура

  • Это интеграция, а не набор скриптов: обновление и бэкап оформлены сервисами, старые скрипты остались запасным путём для старых панелей.
  • Регистрация ресурса идёт через хранилище интерфейса с защитой от дублей — повторная установка не плодит записи.
  • Существующий паспорт дома никогда не перезаписывается: переустановка не рвёт связь с подпиской и историей.

Безопасность

  • Секретов внутри нет; токен агента лежит в закрытом хранилище, а не в веб-каталоге — иначе он утёк бы в браузер.
  • Резервные копии шифруются на стороне дома паролем владельца: сервер их прочитать не может.
Custom integrationUpdate entityШифрованные копии
Файл панели версия внутри кода Выпуск центр обновлений дом 1дом 2дом 3
Облако05

Система обновлений и центр управления

Новая версия панели выкладывается одной командой и приезжает во все дома. Есть админка: кто на какой версии, что произошло, кому что переиздать.

  • Выпуск версии из терминала или перетаскиванием файла в браузере
  • Список домов, версий и событий обновления
  • Прогресс установки виден владельцу прямо в панели
  • Обращения из панелей — с текстом и скриншотами — попадают в ту же админку
Как устроено

Механика

  • Версия берётся из самого файла панели — рассинхронизировать «версию в списке» и «версию в коде» невозможно.
  • Установщик пишет этапы (скачивание → проверка → установка) в статус-файл, панель читает его раз в секунду и двигает прогресс-бар.
  • Раздача файла привязана к подписке, но со «страховкой»: сбой чтения подписки не блокирует обновление, а старые пути оставлены открытыми, пока не обновятся все дома.

Правило эксплуатации

  • Обратная совместимость проверяется перед каждой выкладкой: панель обновляется у людей, которые не звали инженера.
Каналы выпускаАдминкаОбратная связь
Дом отчёт раз в 5 мин Правила считаются в облаке Инцидент у инженера обратного канала команд домам нет
Эксплуатация06

UytHome Fleet — мониторинг парка домов

Дома сами рассказывают о своём здоровье: связь, версии, батарейки датчиков, недоступные устройства, возраст резервных копий. Проблема видна раньше, чем позвонит заказчик.

  • Отчёт о состоянии каждые несколько минут исходящим соединением
  • Правила здоровья считаются в облаке круглосуточно, а не при открытии экрана
  • Инциденты с историей и версией набора правил
  • Экран парка в рабочем месте инженера
Как устроено

Три места и одно направление

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

Сознательные ограничения

  • Канала команд домам нет вообще. Мониторинг не должен уметь ничего выключать — иначе компрометация облака становится компрометацией домов.
  • Дочерние проблемы подавляются: одна поломка даёт один инцидент, а не двадцать.
  • В историю пишутся счётчики, а не списки устройств — иначе парк домов за год съел бы десятки гигабайт.
Движок правилИнцидентыПриватность телеметрии
Намерение дом + тариф Касса платёж Проверка суммы тариф определяет сумма несовпадение = платёж не активирует ничего
Облако07

Подписки, касса и выдача доступа

Оплата на сайте включает тариф в конкретном доме автоматически: без ручной сверки, переписки и «пришлите скриншот чека».

  • Помесячно и на год, привязка дома по QR из панели
  • Активация сразу после подтверждённого платежа
  • Лимиты по видам запросов — вместо мнимых «безлимитов»
  • Журнал платежей и непривязанных списаний
Как устроено

Стыковка платежа с домом

  • Платёжная страница не принимает собственных параметров, поэтому дом и тариф записываются в журнал намерений до ухода в кассу, а списание стыкуется по плательщику.
  • Продление идемпотентно по номеру платежа: повторное уведомление не добавляет лишний месяц.

Найденная и закрытая дыра

  • Тариф определяет сумма платежа, а не поле в запросе. Журнал намерений открыт всем — иначе можно было заплатить за младший тариф и заявить старший. Из намерения берётся только дом.
  • Уведомления без проверяемой подписи ничего не активируют — только логируются.
Рекуррентные платежиИдемпотентностьАудит
Дом исходящее соединение только наружу Сервер свой поддомен телефон портов на роутере заказчика не открывается ни одного
Инфраструктура08

Доступ к дому снаружи и HTTPS внутри

Дом доступен с телефона из любой точки — без белого IP, проброса портов и настроек на роутере заказчика. А внутри локальной сети работает нормальный сертификат, а не «сайт небезопасен».

  • Исходящий туннель из дома: входящих подключений в дом нет
  • Свой поддомен на каждый дом
  • Локальный HTTPS с автопродлением сертификата
  • Голосовые функции в браузере работают только в защищённом контексте — ради этого всё и делалось
Как устроено

Решения

  • Туннель поднимает сам дом и держит автоматически; цель жёстко ограничена одним локальным адресом — туннель не превращается в проход в сеть заказчика.
  • Сертификат на локальный адрес выпускается проверкой владения доменом через DNS: наружу ничего публиковать не нужно.
  • Продление автоматическое и выполняется в доме — истёкший сертификат не превращается в выезд.
Практический вывод, которого не было в плане: маршрут наружу пришлось выбирать по реальной проходимости у мобильных операторов, а не по красоте схемы.
Обратный туннельACME · DNS-01Secure context
Раздел камер панели UytHome с сеткой камер участкаувеличить
Витрина09

Демонстрация панели на сайте

На сайте крутится настоящая панель заказчика — на виртуальном доме. Можно потрогать свет, сцены, комнаты и увидеть, как система реагирует, ничего не устанавливая.

  • Тот же файл панели, что стоит в домах
  • Виртуальный дом со своей автоматикой: сцены, протечка, септик, техника во дворе
  • Ноль внешних запросов — демонстрация полностью самодостаточна
Как устроено

Ключевое ограничение

  • Второй панели не существует и заводить её нельзя. Демо отличается только источником данных: подменяется интерфейс связи с домом, всё остальное — продакшн-код. Иначе витрина через месяц начала бы врать.
  • Роль автоматики играет отдельный движок сценариев виртуального дома — он и создаёт «жизнь» на экране.
  • Состояния устройств генерируются из самой панели, а не пишутся руками: обновилась панель — пересобралась демонстрация.

Мелочи, которые решают

  • Кадры фасада дома пережаты с сотен мегабайт до десятка, а виртуальное солнце ходит только по тем фазам, для которых кадры собраны.
  • Мастер первого запуска в демо не показывается — гость попадает сразу в готовый дом.
Провайдер данныхiframe + postMessageСборка ассетов
Экран сметы в UytHome Manager со списком позиций, количествами и ценамиувеличить
Электрика10

UytHome Manager — рабочее место

Объект — центральная сущность: смета, коммерческое предложение, закупки, финансы, задачи, фото, документы, история и умный дом собраны в одной карточке, а не в шести файлах и мессенджере.

  • Стадии проекта от заявки до сдачи
  • Согласование сметы автоматически создаёт закупки со снимком цен
  • КП для клиента по короткой ссылке, с вопросами по позициям
  • Каталог цен, который сам пополняется из реальных смет
Как устроено

Данные

  • Автосинхронизация «смета → каталог»: ручная позиция с ценой попадает в каталог и дальше следует за правками строки. Каталог наполняется работой, а не отдельным вечером ввода данных.
  • Полсотни исторических смет разобраны и загружены — система подсказывает, что обычно бывает в таком проекте и чего в смете не хватает.
  • Закупки создаются идемпотентно: повторное согласование не удваивает заказ.

AI в рабочем месте

  • Модель правит тексты КП и возвращает только изменённые поля; применяются исключительно текстовые поля снимка — цены и состав она трогать не может физически.
  • Есть режим «сообщение клиенту»: тот же смысл, но языком мессенджера.
PHP + SQLiteАудит действийТесты перед выкладкой
Конструктор электрических щитов: раскладка аппаратов по рейкам, список линий и параметры щитаувеличить
Электрика11

Shield Designer — конструктор щитов

Щит собирается визуально: рейки, модули, группы, фазы, маркировка, спецификация и печатные листы. Расчёты помогают, но решение всегда за электриком.

  • Раскладка по рейкам с шириной в модулях и резервом
  • Группы УЗО и распределение по фазам с цветами по ГОСТ
  • Проверки набора правил с версией — видно, по какой редакции проверялся щит
  • Спецификация и передача позиций в смету
Как устроено

Главный принцип

  • Никакого «магического автопроекта». Расчётный ток не равен проектному номиналу: расчёт возвращает формулу, входные данные и единицы, а при нехватке данных честно говорит «недостаточно данных» — и ничего не меняет сам.
  • Авторазмещение, подбор корпуса и перенумерация работают только через предпросмотр и подтверждение. Закреплённые аппараты и резервные блоки не двигаются.

Инженерия

  • Автосохранение с оптимистичной блокировкой: две открытые вкладки не затирают друг друга молча, конфликт виден.
  • Рендерер схемы общий для экрана и печати — распечатка не может отличаться от того, что видно.
  • Деньги в спецификации справочные; настоящие появляются только после переноса в смету.
  • Тестовые щиты от простого до трёхфазного на 45+ линий — для проверки интерфейса на реальном масштабе.
Набор правил с версиейОптимистичная блокировкаПечатные формы
Конструктор электрики: план дома с расставленными розетками, выключателями и светомувеличить
Электрика12

Electrical Planner — публичный конструктор

Клиент без регистрации загружает или рисует план, расставляет розетки, выключатели, свет и умные точки — и получает понятный проект и диапазон стоимости. Заявка превращается в готовый объект в рабочем месте.

  • Распознавание плана из фото или PDF прямо в браузере
  • Помещения определяются автоматически по геометрии стен
  • Высоты установки пресетами, с массовым применением
  • Схематичный вид с условными обозначениями и экспорт для клиента
Как устроено

Ограничения, заданные до начала работы

  • Себестоимость запроса нулевая: никаких платных сервисов распознавания. Компьютерное зрение написано под задачу и работает в браузере клиента.
  • Сценарий «плохое фото» обязан честно давать слабый результат и ручной режим, а не рисовать выдуманные стены.
  • Во фронтенде нет ни одной цены: элемент ссылается на ключ, ключ — на позицию каталога. Ненастроенный ключ показывается как «не настроено», а не как выдуманное число.

Где проходит граница ответственности

  • Номиналы защиты, сечения, УЗО и распределение по фазам не назначаются автоматически — это работа щита и живого инженера.
  • Условные обозначения описаны один раз примитивами и проигрываются тремя разными рендерерами — на экране, в векторе и в картинке они совпадают.
Диапазон цены честный с двух сторон: нижняя граница — только работы, верхняя — под ключ, и обе подписаны у числа.
CV в браузереПланарный графГеометрия в ммВодяной знак
Экран заявок с сайта: карточка заявки с площадью, числом помещений и точекувеличить
Электрика13

Калькулятор проекта

Расчёт с сайта по анкете: площадь, этажи, состав систем, «умный дом или обычная электрика». На выходе — диапазон стоимости с обоснованием и готовый черновик проекта.

  • Разбивка по разделам понятным клиенту языком
  • Ответ «не знаю» не ломает расчёт, а расширяет диапазон
  • Результат продолжается в конструкторе плана — переписывать нечего
Как устроено

Почему это не отдельная система

  • Калькулятор — «шаг 0» того же проекта: он синтезирует модель по нормативам и передаёт её в общий расчётный движок. Иначе появились бы второй прайсинг, вторая база заявок и вторая смета, которые разъедутся.
  • Двойного учёта «электрика + умный дом» нет по построению: умная точка заменяет тип точки, а не добавляет вторую линию.

Две неочевидные детали расчёта

  • Кабель считается нормативом «метров на точку», а не по геометрии: у калькулятора нет плана, а схематичная раскладка давала три километра кабеля и больше половины стоимости проекта.
  • Неопределённости складываются в квадратуре, а не перемножением: перемножение считало один риск дважды и раздувало вилку почти вдвое.
Нормативы в настройкахОценка неопределённостиЕдиный прайсинг
Мобильный экран замера объекта: список зон дома с перечнем позицийувеличить
Электрика14

Замер объекта — полевой режим

Инструмент замерщика на телефоне: зоны, количества, фото с пометками, голосовые заметки, чек-лист и предварительный расчёт прямо на объекте. Из замера всё уходит в смету, план и щит.

  • Быстрый ввод количеств и точное размещение — в одном замере
  • Фото с пометками и голосовые заметки без выхода из процесса
  • Итог замера сразу превращается в смету
Как устроено

Полевые реалии

  • Связь на объекте пропадает, поэтому правки складываются в очередь на устройстве и уходят, когда сеть вернётся. Обрыв связи не роняет работу.
  • Быстрый ввод и размещённые на плане точки не складываются: в расчёт идёт максимум, а разница показана как «осталось разместить» — иначе замер удваивал бы объём.
  • Завершение замера делает снимок цен; пересчёт по новому прайсу — только через предпросмотр и подтверждение.

Без дублей

  • Подробный режим использует тот же конструктор плана — второго редактора геометрии в системе нет.
  • Цены берутся из общей с конструктором таблицы привязок: прайс один на всю платформу.
Офлайн-очередьСнимок ценМобильный экран
Смета согласована Договор из шаблона Подписано заморожено снимком дальше — только новая редакция или допсоглашение
Документы15

Договоры и документы из сметы

Договор собирается из согласованной сметы: состав работ, суммы, приложения. Слева переменные, справа живой лист A4, на выходе — печать и файл для клиента.

  • Два режима поставки: подряд иждивением подрядчика или оборудование покупает заказчик
  • Подписанный документ замораживается; правки — только новой редакцией или допсоглашением
  • Видно, когда смета разошлась с подписанным договором
Как устроено

Принципы

  • Юридический текст живёт только в шаблонах и не переписывается моделью — требование владельца, и оно правильное: договор не место для творчества.
  • Предпросмотр, печать и файл рендерятся из одного источника — «на экране одно, в файле другое» невозможно.
  • Подписанное хранится снимком вместе с готовым файлом: через год видно ровно то, что подписывали.
  • Суммы считает расчётный слой сметы с каскадом скидок — строки не суммируются в обход.
Шаблоны DOCXРедакции и ДССнимки
Раздел документации: счётчики актуальности, список проектов и разделовувеличить
Эксплуатация16

Объект и умный дом в одном окне · база знаний

Карточка объекта показывает живой умный дом заказчика, а вся внутренняя документация платформы лежит рядом и сверяется с кодом автоматически.

  • Связь объекта с установленным домом, состояние и обращения владельца
  • Обращение из панели становится задачей инженера
  • Документация со статусом «требует проверки», если код изменился
Как устроено

Разделение прав

  • Рабочее место читает облако только на чтение и через фасад — прямого доступа к боевым базам у него нет. Компрометация рабочего места не даёт админку облака, а падение облака не ломает работу: остаются кэш и честный баннер.

Документация как часть работы

  • Источник истины — файлы документации, база данных только производная и её можно удалить без потерь.
  • Статья помнит отпечаток кода на момент последней проверки: разошлось — статья помечается как требующая проверки. Документация не может тихо устареть.
  • Списки маршрутов и таблиц собираются из реального кода, а не поддерживаются руками.
Фасадное APIКэш и деградацияDocs-as-code
Галерея

Панель изнутри

Девять экранов одной панели. Снято с публичной демонстрации — это тот же код, что стоит в домах, только дом виртуальный. Листайте вбок, нажимайте для увеличения.

Раздел «Пространства»
ПространстваКомнаты дома одним экраном: температура, влажность, свет, техника
Раздел «Свет»
СветГруппы, сцены и наружное освещение — без списка технических сущностей
Раздел «Климат»
КлиматЗоны отопления и кондиционирования с понятными режимами
Раздел «Камеры»
КамерыПотоки участка; в демонстрации вместо видео — подготовленные кадры
Раздел «Безопасность»
БезопасностьОхрана, протечки, двери и замки; опасные действия — с подтверждением
Раздел «Энергия»
ЭнергияРасход и деньги за день и месяц, распределение по фазам, газ
Раздел «Сценарии»
СценарииМастер вместо YAML; черновик от ассистента открывается здесь на проверку
Раздел «Настройки»
НастройкиВладелец меняет содержимое экрана сам — сетка при этом не разъезжается
Раздел «Обзор»
ОбзорГлавный экран настенного планшета: состояние дома одним взглядом

Рабочее место изнутри

Инженерная часть, которую клиент обычно не видит: объект, смета, щит, план, замер и внутренняя документация. Данные на снимках вымышленные.

Карточка объекта в UytHome Manager
ОбъектОдна карточка на весь проект — от заявки до сдачи и обслуживания
Смета в UytHome Manager
СметаКоличества приходят из конструктора, цены — из каталога, КП собирается отсюда
Конструктор щитов
ЩитРейки, модули, группы УЗО, фазы по ГОСТ, маркировка и спецификация
Конструктор электрики
ПланЭлектрика на плане дома; помещения находятся по геометрии стен
Раздел документации
База знаний99 статей; статус «требует проверки» появляется сам при изменении кода
Мобильный экран замера
ЗамерПолевой экран: зоны, количества, фото и расчёт прямо на объекте
Честно

Что оказалось сложным и как это решали

Хорошая система выглядит простой, потому что сложность из неё вынули и куда-то дели. Вот куда.

САМАЯ СЛОЖНАЯ СТРУКТУРА

Панель — один файл, который живёт в чужом доме

Панель ставится как ресурс интерфейса Home Assistant, поэтому физически это единый монолит: внутри слой автонастройки, мобильная вёрстка, руководство владельца, ассистент и собственный механизм обновления. Разделить его на модули нельзя — установка в чужом доме должна оставаться одной командой. Значит, любая правка задевает соседей, а ошибка сразу видна людям, которые не звали инженера.

  • Смоук-тесты гоняются на нескольких синтетических домах разной архитектуры — от квартиры до дома с композитными воротами.
  • Порядок стилей зафиксирован правилом: мобильный слой всегда последний, иначе телефон разъезжается.
  • Регистрация карточки двухступенчатая: заставка появляется мгновенно и потом «апгрейдится» до настоящей панели.
  • Над файлом работали параллельно из нескольких сессий, поэтому перед записью сверяется контрольная сумма, а замены применяются точечно и атомарно.
План из фотографии
Помещения ищутся обходом граней планарного графа стен. Пока рёбра не дедуплицировались, целый этаж схлопывался в одну комнату, а плохое фото давало уверенно нарисованную чушь.
Решение: дедупликация рёбер, геометрия в миллиметрах и обязательный честный режим «распознано слабо» с ручной доводкой.
Кабель съедал смету
Калькулятор пытался считать кабель по схематичной раскладке помещений и выдавал три километра — больше половины стоимости проекта из ничего.
Решение: кабель считается нормативом «метров на точку», а неопределённость от отсутствия плана вынесена в отдельный вес.
Вилка цены раздувалась
Неопределённости перемножались, и каждый ответ «не знаю» считался дважды: диапазон уезжал с отношения 1,29 до 1,85 — клиенту такая оценка бесполезна.
Решение: веса складываются в квадратуре, как независимые погрешности.
Просьба занизить цену
Была задача опустить нижнюю границу на 30 %, «чтобы забрать лид». Занижение коэффициентом — это просто неправда в интерфейсе.
Решение: нижней границей стала стоимость работ (оборудование покупает заказчик) — минус 40 % и при этом правда. Есть тест, который проверяет обоснование границы.
Голос долго не получался
Локальный синтез на домашнем железе выдавал битый звук, детектор речи резал фразы на середине, а диалог терял контекст: агент отвечал «предыдущего разговора нет» на каждую вторую фразу.
Решение: облачные распознавание и синтез, собственный детектор паузы и стабильный идентификатор разговора, который переживает переподключение.
Дом снаружи
Классическая схема доступа не пережила реальность: часть протоколов резалась провайдерами, зарубежный адрес фильтровался мобильными операторами, крупные ответы рвались на середине.
Решение: исходящий туннель из дома и маршрут, выбранный по фактической проходимости, а не по красоте схемы. Портов в доме по-прежнему ноль.
Дыра в оплате
Журнал намерений открыт всем — иначе платёжная страница не связала бы платёж с домом. Значит, можно было заплатить за младший тариф и заявить старший.
Решение: тариф определяет сумма платежа, из намерения берётся только дом, несовпадение уходит в «непривязанные» без активации.
Телефон против видео
Каждая фоновая перерисовка переносила видеоплеер, и камера мигала; iOS оставлял «зависший» скролл; при каждом открытии телефон тянул мегабайты панели заново.
Решение: троттлинг фоновых рендеров при мгновенном отклике на действия, панель заперта во вьюпорт, кэш файла с почасовым ключом.
Железо в доме
Zigbee-стик и GSM-модем делили один и тот же системный порт: после перезагрузки дом мог остаться без половины датчиков.
Решение: привязка устройств по постоянному идентификатору, а не по номеру порта. Мелочь, которая стоит выезда.
РАБОТА С AI-АССИСТЕНТОМ

Что было сложно в самой разработке

Платформа писалась в паре с ассистентом Claude, и это отдельный инженерный навык. Главная сложность не в генерации кода, а в удержании контекста: шестнадцать систем, три сервера, общие таблицы и решения, принятые полгода назад по неочевидным причинам.

  • Правила каждого проекта записаны в файл-инструкцию и в базу знаний со сверкой по хешам — иначе ассистент честно предложит «переписать красиво» то, что специально сделано иначе.
  • Ни одного выдуманного числа: если цена не настроена, интерфейс обязан сказать «не настроено». Это правило проверяется тестами.
  • Юридические шаблоны и инженерные номиналы моделью не правятся вообще — только человеком.
  • Решение владельца выигрывает у «как принято»: занижение цены не прошло, а безлимитные тарифы заменены честными лимитами.
Общие правила

Чем это отличается от «сделали на коленке»

Через все шестнадцать систем проходят одни и те же принципы. Они дороже в разработке и заметно дешевле в эксплуатации.

Автоматика советует, человек решаетРасчёты, распознавание и подсказки никогда не меняют инженерные величины сами. Предпросмотр и подтверждение обязательны.
Честное «не знаю»Слабое распознавание помечается слабым, ненастроенная цена показывается как ненастроенная. Выдуманных чисел в системе нет.
Один источник правдыОдин прайс, один редактор геометрии, одна панель на сайте и в домах. Каждая копия — это будущее расхождение.
Дом ходит наружу самНи портов, ни VPN, ни канала команд снаружи. Меньше возможностей — меньше поверхности атаки.
Деградация вместо отказаНедоступное облако — баннер и кэш. Нет связи на объекте — очередь правок. Сбой проверки подписки — не блокировка обновления.
Тесты и документация в одном тактеГотово — значит код, тесты, статья и сверка. Иначе через полгода никто не вспомнит, почему сделано именно так.
Хроника

Как это росло

Панель для своего домаОдин интерфейс вместо разрозненных приложений: комнаты, свет, климат, камеры, инженерия.
Мобильный слой и удалённые обновленияПанель стала продуктом: телефон как полноценный экран, выпуск версий в чужие дома, центр управления.
Джарвис, голос и подпискаПоявился объясняющий слой и экономика: тарифы, лимиты, кэш ответов, автоматическая выдача доступа.
Автонастройка и интеграцияУстановка в новом доме сжалась до одной команды и мастера первого запуска.
Рабочее место: сметы, щиты, документыЭлектрическая часть бизнеса переехала из таблиц в систему, где объект связывает всё.
Публичные инструменты и мониторинг паркаКалькулятор, конструктор электрики и замер приводят проект в систему; Fleet следит за уже сделанными домами.
Джарвис подключает устройстваРазговором, фото коробки или мастером: поиск по каталогам, установка интеграций с согласия владельца, перезапуск и раскладка по комнатам — без установщика.
Джарвис разбирает «почему»Панель отдаёт ассистенту не список устройств, а граф дома — связи от котла до окна комнаты. Вопрос «почему холодно» превращается в диагноз с числами дома и честным «чего не хватает».
Дальше

Посмотреть вживую или обсудить

Панель на сайте — не видео и не макет: это тот же код, что работает в домах. Про внутреннюю часть — конструкторы, щиты, документы и мониторинг — расскажу и покажу отдельно.