Мои поиски физической панели управления умным домом

Довольно давно у меня появилась мысль установить управляющую панель, расположенную рядом с входной дверью внутри квартиры/дома.

Существует несколько вариантов реализации этой задумки:


  • сенсорная панель оператора ПЛК;
  • планшет;
  • сенсорный дисплей, подключенный к микрокомпьютеру.

flnjadfhyyyzg5zt5aesfig8fyg.gif
Дополнительное требование, которое сразу ограничило выбор устройства: на панель управления автоматически должно выводиться изображение с наружной камеры при срабатывания датчика движения (и только в случае присутствия людей дома).


1.Выбор девайса

После того как требования четко сформировались, сразу отпали айпады, которыми я не знал как управлять извне (жаль, потому что для них есть большой выбор настенного крепежа) и устройства HMI вроде Nextion, поскольку на них изображение с камеры не вывести.

n2xsodz7s1ciurk5uvqcmuojshq.jpeg
Один из вариантов iPad Wallmount от Loxone

И хотя на рынке сейчас появились и специализированные устройства, такие как:

Однако проблема с внешним управлением этими устройствами, насколько я понимаю, тоже остается и решена не полностью.

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

tisp4n5xa4ac3nu5sgelwf5rz3k.jpeg
Монтажная распаячная коробка


2. Влияние «чёрной пятницы» на выбор

Когда я снова вспомнил о своей идее в канун черной пятницы 2019 года, то решил купить что-нибудь недорогое для тестов. С пайкой и подключением сенсорной панели к Raspberry Pi мне заморачиваться не хотелось и выбор пал на планшет Amazon Fire 7 Tablet за $29.99 (около 1 700 ₽). Я рассудил, что в багетной мастерской потом можно будет сделать соответствующее обрамление нужного размера для размещения планшета на стене.

bvnjs6u-n2tqmvuwcra0okxawhg.jpeg
Team Win Recovery Project (TWRP) на Amazon Fire 7 Tablet

Дальше следуя инструкциям, найденным на популярном ресурсе xda-developers.com мне удалось программным методом без физической разборки разблокировать загрузчик планшета Fire 7 и установить TWRP.

b8gape_ziak4jx0ofkqsmini_re.png
В процессе разблокировки Fire 7 (2019, mustang)

Хочу заметить, что инструкция изначально выглядела пугающе, но по итогу — там все описано довольно прозрачно. Поскольку изначально планов пользоваться Fire OS у меня не было, то установил чистую LineageOS Android Distribution без дополнительных приложений и без сервисов гугла, то есть без установки GApps.

dtf7ifsb8hba6uoep5wyvp6cpym.jpeg
LineageOS на на Amazon Fire 7 Tablet (2019, mustang)

Я хотел получить именно чистое устройство с минимумом программ, которое не привязано к какому-либо аккаунту.


3. Удаленное управление через ADB

Поскольку у меня на руках оказался рутованный (с полным доступом) планшет на Android, то проблем с выбором программ быть не должно.
Однако мне хотелось воспользоваться каким-нибудь стандартными средствами и поэтому остановился на ADB. Это работает на всех Android-устройствах, где данный функционал не был намеренно заблокирован производителем — достаточно нажимать несколько раз на пункт меню «Номер сборки» и откроется новый пункт меню «Для разработчиков», где и производятся все настройки.

Поскольку мне надо было воспроизводить видео поток с IP-камеры (в моем случае RTSP, то для этого мне понадобился VLC плейер, а еще Google Chrome для полноэкранного отображение панели умного дома. Для того, чтобы произвести необходимые манипуляции с планшетом из терминала на компьютере надо выполнить нижеследующие команды.

Через командную строку установить приложение на планшете:
adb install VLC.apk
Через командную строку включить/выключить планшет:
adb shell input keyevent KEYCODE_POWER
Через командную строку запустить трансляцию с камеры:
adb shell am start -a android.intent.action.VIEW -d rtsp://login:pass@192.168.15.21:88/videoMain -t video/mp4
Через командную строку запустить панель управления умным домом в браузере:
adb shell am start -a android.intent.action.VIEW -d http://192.168.15.10:8123/lovelace/default_view

Для корректной работы задал настройки расширенного экрана — когда панели управления полностью скрываются.

rcrbocie4yuknkqszuwg_6pahzy.png
Настройка LineageOS

И конечно же отключил блокировку экрана — без этого сложно что-то автоматизировать.

ojx0xval66av7ezk4njg2ngwmba.png
Настройка LineageOS

Вот небольшой лайфхак как можно узнать список всех установленных приложений и команды для их запуска. Для начала войдите в консоль:
adb shell
а затем выполните:
pm list packages | sed -e "s/package://" | while read x; do cmd package resolve-activity --brief $x | tail -n 1 | grep -v "No activity found"; done
Это выведет список всех программ:

_l3z21t2uwufktefq52xnglcix8.png
Выполнение команды на вывод всех программ на устройстве

Полученной информацией можно воспользоваться по своему усмотрению и, например, запустить часы:
adb shell am start -a android.intent.action.VIEW -d -n com.android.deskclock/.DeskClock


4. Home Assistant

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


  1. Камера Hikvision DS-2CD2463G0-IW вместе со встроенным датчиком движения.
  2. Купольная камера в паре с микроволновым датчиком движения, скрытым над подвесным потолком подъездного коридора и подключенным к многофункциональному Ethernet-контроллеру MegaD-2561. Датчик движения не видим глазом, но работает. Камера обычной, не скрытой, установки.

Для начала необходимо разрешить ADB по сети:

rrtyvhhrwwzteayiwjwqvsuwwes.png
Настройка LineageOS

После этого планшет готов к удаленному управлению.

Поскольку я использую Hass.io, то воспользовался специальным дополнением ADB — Android Debug Bridge, которое позволяет управлять любым устройством, которое поддерживает управление по ADB. В конфигурации к этому дополнению указал своё единственное устройство:

{
  "devices": [
    "192.168.15.24"
  ],
  "reconnect_timeout": 90
}

После этого немного странно, но все подобные устройства идут к настройке в Home Assistant как androidtv.


configuration.yaml
media_player: 
  - platform: androidtv
    name: Amazon Fire 7
    host: 192.168.15.24
    adb_server_ip: 127.0.0.1 

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


automations.yaml
###################################################
#                                                 #
#    Управление android планшетом                 #
#                                                 #
###################################################

- alias: Amazon Fire 7 Mikhail 
  trigger:
    - platform: state
      entity_id: binary_sensor.kamera_u_liftov_pir_alarm
      from: 'off'
      to: 'on'
  condition:
    - condition: state
      entity_id: device_tracker.7c_xx_5c_b5_xx_1b #Михаил
      state: 'home'
  action:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: input keyevent KEYCODE_POWER
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: am start -a android.intent.action.VIEW -d rtsp://login:pass@192.168.15.21:88/videoMain -t video/mp4
    - delay: '00:00:30'
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: input keyevent KEYCODE_APP_SWITCH
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: input keyevent DEL
    - delay: '00:00:01'
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: am start -a android.intent.action.VIEW -d http://192.168.15.10:8123/lovelace/default_view
    - delay: '00:00:10'
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: input keyevent KEYCODE_APP_SWITCH
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: input keyevent DEL
    - delay: '00:00:01'
    - service: androidtv.adb_command
      data:
        entity_id: media_player.amazon_fire_7
        command: HOME

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

jtjk32ag1ty-nawvtkwzeylkxuc.jpeg
Вид сзади

Панель в действии я тоже снял, но не смог разобраться как на видео замазать все личные данные, а там их получилось достаточно много, поэтому привожу только вид сзади :)


Итог

Удалось создать физическую панель управления с заданными характеристиками. Из основных затрат — только лишь недорогой планшет. Осталось решить вопрос с качественной установкой на место использования, но это уже больше строительная тема.

Хочу поблагодарить Андрея Буртового и его сайт за подсказку с микроволновыми датчиками движения.

Автор: Михаил Шардин,
4 января 2020 г.

© Habrahabr.ru