Пульт сломался.
Телевизор остался умным.
Приложение для iPhone, которое управляет телевизором на Android TV напрямую по домашней сети. Без облака, без аккаунта, без рекламы. Исходный код открыт — забирайте и собирайте себе.
Шесть причин, по которым это появилось.
Каждая строчка ниже — не выдумка для лендинга, а то, обо что я споткнулся сам, пока делал этот пульт для своего телевизора.
Пульт сломался, потерялся или его залили чаем.
Телефон всегда под рукой — и он уже в той же сети, что телевизор. Ставится один раз, дальше просто открываете.
В Google Home кнопка «Открыть пульт» серая и не нажимается.
Приложение не зависит от Google Home вообще. Оно говорит с телевизором напрямую, тем же протоколом, что и фирменный пульт.
Пульты из App Store просят аккаунт, показывают рекламу и куда-то отправляют нажатия.
Ни аккаунта, ни рекламы, ни единого запроса наружу. Интернет не нужен — только домашняя сеть. Код открыт, проверить можно построчно.
Кнопки нажимаются, а до нужного приложения всё равно долго идти по лаунчеру.
Плитки быстрого запуска с настоящими баннерами приложений — теми, что рисует сам телевизор. Одно касание вместо десяти нажатий на стрелки.
В протоколе пульта есть команда «запусти приложение», но телевизор её молча игнорирует.
Так и оказалось на живых прошивках: команда принимается и не выполняется. Поэтому внутри есть собственный клиент ADB — через него приложение открывается всегда.
Роутер выдал телевизору другой адрес — и пульт перестал его видеть.
Телевизор ищется по имени в сети, а адрес берётся прямо из установленного соединения. Смена адреса больше ничего не ломает.
Два протокола вместо одного.
Так вышло не от любви к сложности. Одного протокола не хватает, и это выясняется только на живом телевизоре.
Android TV Remote v2
Тот же протокол, которым пользуется приложение Google. Отвечает за кнопки, громкость, питание и ввод текста. Официального описания у него нет — он восстановлен и переписан на Swift с нуля, вместе с разбором сообщений.
Собственный клиент ADB
Нужен ровно для двух вещей: запускать приложения и читать состояние VPN. Потому что штатная команда запуска из протокола пульта на живых прошивках принимается и молча не выполняется — проверено на всех известных формах записи.
Обе части — свои, на Swift, без сторонних библиотек: около 1650 строк кода, который можно прочитать целиком.
Пульт, а не пульт из веб-страницы.
Клавиши с настоящей отдачей: вибрация, утопленное состояние, повтор при удержании. Мелочи, из-за которых им пользуются, а не терпят его.
Кольцо навигации
Стрелки и OK собраны в один круг — единственный круглый элемент на экране, палец находит его не глядя. Удержание повторяет нажатие, как на настоящем пульте.
Крупная качелька звука
Тише, без звука, громче — одной цельной клавишей под навигацией. Кнопка выключения звука остаётся утопленной, пока звук выключен: состояние читается с телевизора.
Плитки приложений
Свой набор под свой телевизор. Картинки не рисованные: баннеры достаются прямо из установленных на телевизоре приложений.
Индикатор VPN
Зелёная точка загорается, только если на телевизоре действительно поднят туннель. Приложение читает состояние сети телевизора, а не помнит последнее нажатие.
Ввод текста
Пароли и поиск набираются клавиатурой телефона и уходят на телевизор целиком. Больше не надо ходить стрелками по экранной раскладке.
Сам находит телевизор
Устройства видны по именам, выбираются в один тап. Работает и когда в доме несколько телевизоров.
Чего это приложение не умеет.
Лучше узнать сейчас, чем после установки.
Нужен Mac, чтобы собрать
Приложения нет в App Store и не будет: внутри ключи от вашего телевизора, такое не публикуют. Сборка ставится себе — один раз с компьютера.
Один телевизор на сборку
Привязка делается к конкретному телевизору. Для второго нужна отдельная привязка и отдельная сборка.
Спящий телевизор недоступен
Многие Android TV в глубоком ожидании отключают сеть целиком — их не будит ни пульт, ни Wake-on-LAN. Это лечится настройкой, она описана в инструкции.
Код открыт. Собирайте себе.
В репозитории лежат исходники, скрипты установки и пошаговая инструкция. Она написана так, что её может выполнить и человек, и ИИ-агент: скачали, открыли у себя Claude Code и сказали «поставь по SETUP.md» — дальше он сам найдёт телевизор в сети, проведёт привязку и соберёт пульт под ваши приложения.
Ключей внутри репозитория нет: привязка к телевизору делается у вас на компьютере. Поэтому раздавать нужно ссылку на код, а не собранное приложение — в чужой сборке лежат ключи от чужого телевизора.
Открыть на GitHub→