По политически соображения пришлось мигрировать на Home Assistant Supervised. Ранее долго сидел на Home Assistant Core решении. Был хозяином и властелином env Linux. Возможно об этом будет отдельная статья … почему было принято такое решение. Но я категорически ранее не переносил все эти докеры и виртуализации на HomeAssistant, несмотря на то что на работе тоже приходится связываться с докером. Начнем …
Помимо процесса миграции я точно знал, что у меня будут проблемы с Home Assistant Supervised, но и у этого решения есть свои плюсы. Первая проблема с которой я столкнулся это выполнение скриптов php из различных библиотек. Так мне необходимо было использовать php-miio для управления сигнализацией от Xiaomi. Т.е. выполнение такой простой команды вылилось в кровьи много затреченного времени. Как все это настроить, если Linix на HomeAssistant умеет урезанную версию и что либо-туда установить не возможно. Даже если использовать docker-composer, но не хотелось усложнять себе жизнь
php /opt/php-miio/miio-cli.php --ip 192.168.1.30 --token 0e3628ef3d3c82cd15f18444a6e7a97c94 --sendcmd '{"id":1,"method":"set_arming","params":["on"]}'
Решением оказалось весьма не простым, но рабочим. Это выполнение bash скрипта в HomeAssistant CLI, в котором существует два этапа : 1) без парольная авторизация на удаленном хосте с полноценным Linux, где установлены приложения php/python/java … и прочее и 2) выполнение самой php команды на удаленном хосте, тоже через bash скрипт, но уже с непосредственным участием оборудования умного дома … т.е. нашим гейтом Xiaomi. Надеюсь мысль донес 🙂
Выполнение 1 этапа. Авторизация по ключу в SSH, чтобы можно было без участия пользователя pi авторизоваться на удаленном хосте и выполнять команды. Для этого войдя в HomeAssistant через SSH консоль выполняем
У вас должен быть установлен addon
через Web консоль в HA запускаем
вообщем выполняем до конца всю процедуру. Соглашается со всеми : Yes/yes/yes … (никакие пароли не вводим, Enter и вперед). На выходе будет приватный ключ в /root/.ssh/id_rsa и id_rsa.pub (публичный ключ), первый копируем по пути нашего HA (HomeAssistant), это папка /config, внутри для ключей сделал ему отдельную папку там и назвал ее systemha (полный путь /config/systemha), и скопировал этот ключ через команду cp туда. Забегаю чуть вперед и прикладываю скрин ошибки с которым вы можете столкнуться
меняем права сразу этого файла id_rsa:
chown 0744 /config/systemha/id_rsa
Публичный ключ (его содержимое) копируем на удаленный хост к которому мы собираемся цепляться для выполнения команд, у меня это хост 192.168.1.30 и папка пользователя pi (/home/pi/.ssh/autorized_keys)
Если такого файла autorized_keys нет – смело создавайте его и копируйте в него содержимое нашего приватного ключа
Теперь можно пробовать авторизоваться …
Как видим все хорошо.
Выполнения этапа 2. Сами скрипты в HomeAssistant. Пример
automation.yaml
- alias: TEST-Kalitka Open Status Update trigger: - platform: state entity_id: binary_sensor.0x00158d00044e2de3_contact to: 'on' for: seconds: 2 - platform: state entity_id: binary_sensor.0x00158d00044e2de3_contact to: 'off' for: seconds: 2 action: - service: notify.telegram data: message: > {% if is_state("binary_sensor.0x00158d00044e2de3_contact", "on") %} Вы забыли закрыть Калитку во Дворе. Вернитесь и закройте ее. {% elif is_state("binary_sensor.0x00158d00044e2de3_contact", "off") %} Калитка закрыта. Спасибо! {% else %} {% endif %} - service: script.gw1_alarm_off
scripts.yaml
gw1_alarm_on: alias: "Alarm Gateway-1 ON" sequence: - service: shell_command.c1_alarm_on
shell_command.yaml
# Xiaomi gateway Alarm on/off c1_alarm_on: '/config/php_scripts/gw_1_arm_on.sh' c1_alarm_off: '/config/php_scripts/gw_1_arm_off.sh'
папка /config/php_scripts в HomeAssistant
в ней наши скрипты
gw_1_arm_on.sh ssh -i /config/systemha/id_rsa -o StrictHostKeyChecking=no pi@192.168.1.30 /opt/ha/php_scripts/gw_1_arm_on.sh gw_1_arm_off.sh ssh -i /config/systemha/id_rsa -o StrictHostKeyChecking=no pi@192.168.1.30 /opt/ha/php_scripts/gw_1_arm_off.sh
На удаленном хосте я сделал идентичные имена скриптов и положил в папку /opt/ha/php_scripts. Эти скрипты уже предназначены непосредственно для выполнения через php
выделим ей права для пользователя pi
chown -R pi.pi /opt/ha/phscripts
gw_1_arm_on.sh #!/bin/bash php /opt/php-miio/miio-cli.php --ip 192.168.1.5 --token d9999ca70a49892c27033912a9295f283 --sendcmd '{"id":1,"method":"set_arming","params":["on"]}' gw_1_arm_off.sh php /opt/php-miio/miio-cli.php --ip 192.168.1.5 --token d9999ca70a49892c27033912a9295f283 --sendcmd '{"id":1,"method":"set_arming","params":["off"]}'
Ну собственно и все.