Форум

Немного неудобно участвовать под постами в переписке, не хватает нормальных инструментов и юзабилити ... поэтому предлагаю небольшой форум организовать. Он узконаправлеенный и нацелен на небольшую аудиторию и задач.
Пожалуйста or Регистрация для создания сообщений и тем.

Выполняем удаленные скрипты из докера HomeAssistant Supervise

По политически соображения пришлось мигрировать на 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 консоль выполняем

вообщем выполняем до конца всю процедуру. На выходе будет приватный ключ в /root/.ssh/id_rsa и id_rsa.pub (публичный ключ) , первый копируем по пути нашего HA (HomeAssistant), это папка /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"]}'

Ну собственно и все.