Идея
Давно хотелось поставить где-то на видном месте планшет-панель для Home Assistant — сценарии, термостат, камеры, всё в одном месте, без необходимости каждый раз доставать телефон. Готовые панели стоят как отдельный гаджет, а мысль «взять б/у планшет и допилить под себя» выглядела куда веселее.
На Авито нашлось объявление на два старых планшета за копейки — продавец явно расчищал полку. План был простой: вытащить аккумулятор (устройство и так будет висеть на постоянном питании, живой батарее там нечего делать — только распухнет через пару лет) и запитать напрямую от сети.
Вот что в итоге получилось — а дальше расскажу, как до этого дошёл.

Первый блин комом
Первым в разборку пошёл планшет постарше, на Android 4. Разобрал, вытащил батарею, подключил плату к лабораторному блоку питания — сначала же надо на стенде выяснить, какое напряжение и ток планшет реально просит, прежде чем городить постоянную схему. И тут я допустил единственную настоящую ошибку: начал подстраивать напряжение на лабораторнике, не отключая от него планшет. Оказалось, что лабораторный блок при подстройке «на живую» даёт короткие всплески напряжения — и около 5.5В хватило, чтобы убить контроллер питания на плате.
Дело было не в том, что я перепутал напряжение - с расчётами всё было в порядке. Просто не отключил нагрузку перед тем, как крутить ручку. Мелочь, а результат один — труп.

Второй заход — уже без экспериментов на живую
Со вторым планшетом, Lenovo TB-X103F, решил не наступать на те же грабли: сначала на обесточенном стенде выяснил, какие напряжение и ток ему нужны, и только потом собрал постоянную схему на LM2596S — понижающем DC-DC преобразователе, который стоит копейки и с запасом закрывает задачу из 5 В блока питания получить то, что нужно для работы.
Тащить к планшету открытый провод не хотелось, поэтому я впаял в корпус разъём USB-C — не для передачи данных, просто аккуратный вход питания. И чтобы планшет не лежал на столе плашмя, а стоял как задумано, напечатал на 3D-принтере подставку под конкретную модель. Пока планшет так и стоит на столе на этой подставке — до стены руки ещё не дошли, но и на столе свою задачу он выполняет.


Проблема, о которой я не подумал заранее
Планшет ожил, встал на подставке, крутит Home Assistant — и тут всплыли две вещи, которые я не продумал заранее.
Во-первых, у Lenovo TB-X103F физически нет датчика освещённости. Вообще. dumpsys sensorservice показывает один-единственный сенсор — акселерометр. Android в таких случаях даже не рисует переключатель автояркости в настройках: фреймворк просто прячет его, если сенсора нет. Штатного способа «пусть экран сам подстраивается под свет в комнате» тут не существует в принципе.
Во-вторых, экран, включённый круглые сутки — это лишняя нагрузка на понижайку, к которой я хоть и прикрутил радиатор, но всё же греется, да и просто неприятно, когда вечером светит как фонарик в глаза. А постоянно подходить и тыкать в экран, чтобы он проснулся так себе идея для штуки, которая должна работать сама по себе.
Тогда я и решил как обычно "героически" всё это решить.
Главная фишка — не яркость, а движение
Первая мысль была очевидной: раз нормального датчика света нет, а фронтальная камера есть — пусть камера её и заменит. Раз в секунду берём один маленький кадр превью и считаем среднюю яркость по Y-плоскости (luma) — вот и замена отсутствующему android.sensor.light.
Но по факту в приложении получилось две функции на одних и тех же кадрах, и вторая — определение движения — оказалась куда интереснее и полезнее первой. Раз кадр уже есть, почему бы не сравнить его с предыдущим и посчитать, сколько пикселей заметно изменилось? Детектор движения получаем буквально бесплатно.
Первая версия логики «есть движение - буди экран» на практике раздражала до дрожи: сидишь на диване в другом углу комнаты, чуть шевельнулся — и планшет с готовностью загорается. Один порог движения не различает «кто-то есть в комнате» и «кто-то подошёл к планшету».
Решение — считать одну и ту же разницу кадров по двум независимым порогам:
присутствие (по умолчанию 2% кадра) — не даёт погаснуть уже включённому экрану, само по себе ничего не включает;
«рядом» (по умолчанию 12% кадра) — и только это состояние будит экран.
Работает на простой физике: человек в полуметре от камеры занимает заметную часть кадра, человек на диване в другом конце комнаты — единицы процентов. Никакой сложной геометрии — просто доля изменившихся пикселей как грубая оценка расстояния. Эта штука работает настолько хорошо, что стала для меня главной фичей приложения, а автояркость оказалась просто приятным бонусом, который был рядом бесплатно.

Пара слов про яркость и код
Раз уж камера уже даёт кадр для движения, туда же прикрутил и подмену датчика света:
long sum = 0; for (int i = 0; i < lumaSize; i++) { sum += data[i] & 0xFF; } int avgLuma = (int) (sum / lumaSize); // 0..255
Сверху — экспоненциальное сглаживание и гистерезис, иначе любой человек, прошедший мимо камеры, дёргал бы яркость экрана туда-сюда.
По пути пришлось разобраться с парой вещей, без которых всё это тормозило бы или падало на слабом железе:
Camera1, не Camera2. На MT8163 в Android 6 Camera2 API работает в LEGACY-режиме — по факту это обёртка над тем же старым HAL, только с лишним слоем сложности. Camera1 (
android.hardware.Camera), хоть и deprecated, но именно на этом железе стабильнее и проще.Минимальное разрешение превью — 160×120, этого с запасом хватает и для яркости, и для грубой детекции движения, а нагрузка на слабый CPU почти нулевая.
Буферы кадра переиспользуются (
setPreviewCallbackWithBuffer) — на 1 ГБ RAM лишние аллокации на каждый кадр сборщик мусора бы заметно тормозили.
Живучесть на 24/7
Планшет работает без присмотра, значит сервис обязан переживать всё подряд: зависание камеры (watchdog перезапускает камеру, если кадров нет дольше 15 секунд), смерть HAL-процесса, перезагрузку устройства, попытки системы прибить фоновый сервис. Отдельно неприятный случай — поток камеры может застрять прямо внутри нативного вызова Camera.open(), и тогда даже внутренний watchdog не успевает сработать. На такой случай есть второй, более грубый уровень защиты: если состояние камеры не меняется дольше 90 секунд, весь контроллер камеры вместе со своим потоком пересоздаётся с нуля.
Что приложение умеет
пробуждение экрана при приближении, с раздельными порогами присутствия и «рядом» (можно ограничить зону реакции центром кадра);
поддержка датчика приближения как дополнительного триггера, если он у устройства есть;
автояркость по камере вместо отсутствующего датчика, с настраиваемой кривой «освещённость → яркость»;
«тихие часы» с ограничением яркости и/или запретом пробуждения ночью;
интеграция с Home Assistant через REST API — планшет отдаёт освещённость, яркость, факт движения и состояние экрана как обычные сущности;
диагностика прямо в приложении: график истории, живые показания, журнал событий, экспорт в CSV — без этого пороги под конкретную комнату не подобрать;
управление снаружи через
adb broadcast, экспорт/импорт настроек;пара приятных мелочей для тех, у кого есть root (не обязательно для основной работы).
Камера при этом никогда никуда не «смотрит» в смысле съёмки: кадр обрабатывается в памяти и тут же выбрасывается, сохранения или передачи изображения нет в принципе — наружу уходят только два числа в секунду.
Home Assistant
Включаете интеграцию, вписываете свой адрес и long-lived токен — получаете sensor.screenvigil_luma, sensor.screenvigil_brightness, binary_sensor.screenvigil_motion, binary_sensor.screenvigil_screen и sensor.screenvigil_status. Планшет заодно превращается в датчик освещённости и присутствия для той комнаты, где стоит.
Отдельно наступил на грабли: токен Home Assistant для записи состояний через REST API обязан принадлежать администратору — обычный пользовательский токен читает без проблем, а на запись тихо отвечает 401 Unauthorized, и по коду ошибки это не отличить от банально неверного токена. Если у вас похожая интеграция и всё падает с 401 — проверьте именно права токена, а не только его правильность.
Итого
GitHub — исходники, инструкция по сборке, подробности по каждому порогу, apk билды.
Google Play — если хочется установить в пару тапов.
RuStore — если нет Google-сервисов.
Если у вас похожий планшет без датчика освещённости, или свой вариант решения той же задачи — пишите в комментариях, интересно будет сравнить.
Комментарии (30)

select26
15.08.2026 09:35Отличная работа! Спасибо!
Не могли бы вы еще описать как настроить планшет на работу в режиме киоска: автозапуск браузера на весь экран сразу на необходимый URL?

vasmarfas Автор
15.08.2026 09:35На своём у меня вышло чуть проще - банально обновил WebView, установил приложение Home Assistant и оно постоянно открыто. Но в целом можно написать или самому или через ИИ простейший лаунчер и установить его лаунчером по умолчанию в системе, там задача простейшая

Aquahawk
15.08.2026 09:35Недавно вот такая штука вышла, но она жестко завязана на HA https://github.com/exraaaa/KioskZen

vasmarfas Автор
15.08.2026 09:35Хм, интересно, не видел. Ну у меня немного другая задача в процессе появилась, не встречал приложений, которые будили бы экран по определению движения с камеры

JBFW
15.08.2026 09:35Если это свое веб-приложение - превратить его в PWA и запускать.
Нюанс в том, что нужен будет ssl, подписанный сертификат, т.е. это имеет смысл делать если это действительно домен на сервере, где можно получить для него реальные сертификаты, ну а запускаться оно может и дома с подменой DNS на уровне роутера.

Erop_M
15.08.2026 09:35Берём родные провода, которые идут от аккума к материнке, подкидываем туда от понижайки, например, 4В, батарею убираем.. Зачем там что-то крутить? Или вы как-то иначе реализовали питание, я не совсем понял..

JBFW
15.08.2026 09:35Тогда девайс видит "батарея заряжена", но питание отключено.
И будет засыпать, придётся его отдельно будить из программы.Если подать питание на разьем и включить Developer options - do not sleep when charge on - не будет засыпать.
Но у меня например ни разу не было проблем с отсутствием аккумулятора, работало и так.
Возможно, если бы были - попробовал бы воткнуть вместо него конденсатор или ионистор.

vasmarfas Автор
15.08.2026 09:35Грубо говоря так и делал. Предварительно проверял на лабораторнике просто, т.к. не каждый девайс запустится просто подав 4.2в в контакты аккума, у некоторых ещё датчики стоят

eCAH
15.08.2026 09:35какие же "датчики" о.О

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

huanotis
15.08.2026 09:35срезать плату с акб и на нее подать 4.2в постоянки, прокинув допом на гнездо питание.
Проблемы сразу решаются.

noxxx
15.08.2026 09:35У меня в качестве панели для HA используется iPad Mini 6 в держателе на стене. В стене была предварительно подготовлена коробка для панели домофона, но потом решил использовать приложение для домофона в том же планшете.
В коробке лежит poe-сплиттер, в щитке poe-инжектор. Инжектор вставлен в умную розетку, которой управляет HA по Zigbee в зависимости от уровня заряда плантеша (30-80%).
iPad в любой момент можно вытащить из держателя и использовать как планшет.

vasmarfas Автор
15.08.2026 09:35Не боитесь что старая батарея в один момент вздуется и лопнет?)

noxxx
15.08.2026 09:35Почему?
Она же не постоянно на зарядке. Обычное использование.

vasmarfas Автор
15.08.2026 09:35Хоть и не постоянно, но батарея всё же расходник, да и необычное это использование, при обычном 24/7 планшет не работает. У меня немного паранойя просто насчёт лития, поэтому мне для своего спокойствия было проще выдернуть АКБ в принципе

noxxx
15.08.2026 09:35Так он у меня на стене висит с выключенным экраном.
Я тыкаю в него и он включается. Думал датчик движения подключить чтобы экран включался когда проходишь мимо, но что-то руки не дошли.

riky
15.08.2026 09:35Паранойя пароноей а аккум вынуть не так просто сейчас. Надо дисплей сначала снимать. Но в режиме 30 80 его на много лет должно хватить. Проблемы могут возникнуть если НА зависнет и перестанет включать выключать

Telmah
15.08.2026 09:35всё в одном месте, без необходимости каждый раз доставать телефон.
Теперь вместо того чтоб достать телефон, необходимо идти к месту нахождения планшета? Я вот сколько ни думал про планшет на стене - так и не смог уговорить себя что это удобно…
kalapanga
Вопрос от чайника в мобильной схемотехнике. А что, родная схема зарядки-питания при отключенной батарее питание на устройство не даёт?
vasmarfas Автор
На своём веку ни одного устройства не видел, которое может работать без аккума, от родного порта зарядки без доработок
kalapanga
Понятно. Спасибо!
(Возможно тоже не все, но некоторые ноутбуки работают. Отсюда и вопрос был.)
vasmarfas Автор
А, ну я про мобильную электронику) Телефоны, планшеты там, ноуты понятно что большинство умеют (особенно те, что не от TypeC питаются)
max9
был старый msi ноут, вполне работал
house2008
Одно время был sim роутер для путешествий на батарейке https://www.gl-inet.com/products/gl-e750. Я его случайно оставил на солнце и батарейка вздулась, я его разобрал и убрал батарею и думал всё на помойку выкидывать модем, но был удивлен, что питание через шнур работало. Когда был дома, то просто питал его от розетки, в путешествии через повербанк, причем через повербанк оказалось решение лучше, потому что батарея самого роутера очень грелась + его процессор, а так только стал греться от процессора, что было гораздо меньше и он стал тупить меньше на жаре.
vasmarfas Автор
Я по той же причине переделкой планшета и занялся, чтобы не бояться что в один момент батарея полыхнёт)
aPiks
Samsung Смартфоны защищеные работают без аккумулятора. Использовали на работе для мобильной фермы.
fndrey357
И эти доработки не все стандартные.
Я, загоняя телефон в настенные часы, перепаял кучу кондеров и настраивал потом все DC-DC преобразователем. Через год видимо подсел АКБ и опять настройка.
JBFW
У меня всё прекрасно работает и без аккумулятора