Конечно же, одной из причин является желание понять из ваших отзывов, что же я все-таки “понаделал не так”, реализуя данный сценарий.
Есть три пути настройки вышеуказанного функционала: “без заморочек”, “короткий” и “самостоятельный”. В первом случае, вы, скачав готовый образ с сайта https://ViaMyBox.com/downloadpage для вашей Raspberry pi, можете посмотреть, как все выглядит в уже настроенном виде. Во втором случае, вы можете скачать zip с сайта или с гитхаб проекта, проинсталлировать и поставить HA docker образ через утилиту (sudo via-setup.sh), чтобы посмотреть, как все настроено. И, наконец, третий путь — настроить “все по-своему”: взять что-нибудь полезное с сайта или githab проекта, или из этого туториала. Ссылки на все в конце статьи.
Предположим, что у вас уже есть работающий Home Assistant (HA). В данной статье мы рассмотрим только аспекты формирования yaml конфигураций и описания последовательности правил и условий, приводящих к конкретному действию, в нашем случае — подключению “охраны дома” и срабатыванию скрипта, который начинает фотографировать в течение 5 секунд после срабатывания датчика движения. И в результате, Home Assistant посылает сделанные снимки по почте. Я не специалист по yaml или по созданию конфигураций для Home Assistant, но, следуя рабочим примерам, я получил рабочую конфигурацию, коей и хочу поделиться.
Все файлы, к которым мы будем обращаться, я выложу в конце статьи для более удобного рассмотрения. Я не буду здесь касаться тем работы скриптов записи видео на bash или python в данном примере. Только Home Assistant. Но если будут вопросы — Велкам!
В конечном итоге, у меня все выглядит так (красным выделил то, что мы рассмотрим в статье):
Я использую Raspberry pi в качестве платформы. И мой путь к конфигурационным файлам это /usr/share/hassio/homeassistant/. Путь к вашим конфигурационным файлам может отличаться от моего пути. На тот момент у меня стоял Home Assistant 0.101.3. Нас будут интересовать конфигурационные файлы в этой директории: configuration.yaml и automation.yaml.
После каждого изменения данных файлов важно помнить, что надо будет проверять конфигурацию после наших изменений на наличие сделанных в ней ошибок. Это делается во вкладке Home Assistant dashboard -> Configuration -> Server Controls -> Check Config. И затем, там же делаем Reload Automations и Reload Scripts, если проверка прошла успешно. И, если есть сомнения, — Server Management restart в той же вкладке точно обновляет конфигурацию.
Подключение датчика движения HC-SR501 осуществляется к GPIO шине Raspberry pi. Необходимо правильно подключить три контактных провода к GPIO, и мы сможем использовать наш датчик в действии. Датчик имеет три контакта: питание gcc(+), ноль gnd(-), управляющий контакт (data). Ознакомившись с описанием GPIO, я к своей малинке подключал их следующим образом. К GPIO разъему я подключил hc-sr501: pin#2 – 5.5vvcc; pin#26 (13ряд) – data контакт и pin#6 – gnd(-) датчика.
В качестве источника фото я использую либо usb камеру, либо csi камеру в связке с mjpg-streamer. Как установить и настроить mjpg-streamer на Raspberry pi, здесь мы рассматривать не будем. Примеров быстрой установки в инете много. Тем не менее, хочу сказать, что я использую данные из этого проекта Там же подробно описана и инсталляция данного модуля. Или используйте любой способ, удобный вам для получения фотоснимков и видео. Ведь какой bash скрипт прикрутить к HA, в конечном счете, решать только вам.
Опишем наш датчик теперь в configuration.yaml, скажем так, через командную строку:
sudo nano /usr/share/hassio/homeassistant/configuration.yaml
хотя через notepad++ с winscp может быть и удобнее…
Опишем последовательность настроек для HC-SR501 так:
binary_sensor:
- platform: rpi_gpio
#name: HC-SR501
ports:
7: Sensor HC-SR501
invert_logic: false
Надо отметить, что здесь важный момент играют настройки в строках, которые описывают подключение к управляющим (data) контактам датчиков: pin#7
ports:
7: Sensor HC-SR501
В Home Assistant есть встроенный инструмент для включения функции охраны дома. Опишем его в нашем configuration.yaml, воспользовавшись описанием: www.home-assistant.io/integrations/manual
alarm_control_panel:
- platform: manual
name: Home Alarm
pending_time: 60
delay time 40
triggered:
pending_time: 0
code: 1234
Данная настройка означает, что у нас есть 60 секунд для выхода из дома (по истечении этого времени включится сигнализация), и 40 секунд — для ее отключения (с паролем 1234) по возвращении домой. Почему-то уходишь всегда дольше, чем приходишь.)
Опишем теперь механизм включения и выключения фотографирования по срабатыванию датчика движения в нашем configuration.yaml (подробнее о платформе switch – command_line можно прочитать здесь):
- platform: command_line
switches:
start_stop_motion_rec_timelapse:
friendly_name: 'Record motion timelapse video'
command_on: 'curl http://localhost/start_mjpgstrm.php && curl http://localhost//rec-motion-mjpg.php'
command_off: 'curl http://localhost/stop_mjpgstrm.php && curl http://localhost/rec-motion-mjpg-stop.php'
Здесь мы связали команды включения command_on и выключения command_off с нашими скриптами, которые управляют записью с камеры. В данном случае, при выполнении включения command_on выполняются последовательно 2 скрипта. Это запуск mjpg-streamer и запуск записи по датчику движения. Обращение к bash скриптам идет через php файл рабочего сайта на Raspberry pi. Для этого я настроил nginx и web доступ, и при обращении через браузер в виде http://<ip адрес вашей Raspberry pi>/start_mjpgstrm.php должен выполниться наш php скрипт. Этот скрипт выполняет в данной ситуации запуск mjpg-streamer-а.
Настройку web доступа в данной статье мы здесь не рассматриваем. Однозначно, это не секьюрно, но в связи с тем, что у меня HA на docker, я столкнулся с тем, что у меня изолированная docker среда и “внешний мир” ОС я могу увидеть, обратившись через php к своему сайту. Наверное, есть куча верных решений от docker или HA гуру. Пишите, было бы интересно узнать!
Листинг данных скриптов я оставлю под статьей, не будем останавливаться на них. В этой статье я хочу проследить только формирование последовательности действий в Home Assistant.
Все это помещено в объект start_stop_motion_rec_timelapse Он и будет нашим визуальным переключателем, с помощью которого мы будем управлять записью фотографий при срабатывании датчика движения.
Визуализировать эти созданные нами объекты мы сможем в закладке Home Assistant -> Overwiew, переключив в правом верхнем углу активацию режима конфигурирования Configure UI
Предварительно перезагрузите HA в браузере во вкладке “Configuration -> Server Control” для подхватывания нашего configuration.yaml.
Далее выбираем желтый плюс внизу окна браузера, нажимаем карточку Entities и привязываем наши созданные объекты к картам.
Для нашего датчика выбираем карту sensor. Она будет выглядеть так:
Как видно на картинке, во втором поле entity вышеописанный переключатель: switch.start_stop_motion_rec_timelapse.
Он позволяет нам включать и выключать нашу запись по датчику движения, независимо от включения функции ”охраны дома”. И, в общем-то, он уже должен работать после всех вышеописанных действий.
Ну и, соответственно, alarm panel карту:
Здесь есть еще один интересный момент. Я использую Home Assistant как docker контейнер. В связи с этим, путь к нашему скрипту будет отличаться от реального пути к файлу скрипта. Ведь файловая структура внутри контейнера виртуализирована и связана с реальной файловой структурой через смонтированные docker тома. Это выглядит, например, так: Путь внутри контейнера: /config/scripts/ Путь внутри ОС: /usr/share/hassio/homeassiatnt/scripts. Так что посмотрите на настройки вашего контейнера, как настроены эти тома в поле Binds. Если HA у вас там.
sudo docker inspect homeassistant|less
При срабатывании датчика движения, в момент, когда сигнализация включена: я хочу, чтобы помимо того, что у нас начинается быстрое фотографирование (timelapse snapshots), мне приходило бы предупреждение по почте и снимок. Я распараллелил процессы. В первом фото логирование (timelapse snapshots) происходит в течение нескольких секунд после срабатывания датчика. Для этого я запускаю mjpg-streamer curl localhost/start_mjpgstrm.php, стартую php: сurl http://localhost/rec-motion-mjpg.php. Он, в свою очередь, запускает python script mov.py. Все описываемые файлы и связки — в конце статьи по ссылке. И еще один скрипт takeSnapshotWebcam.sh делает снимок, который я отсылаю в письме. Эти скрипты я описываю в нашем configuration.yaml так:
shell_command:
#стартуем скрипт формирующий снимок для почтовой рассылки
take_snapshot_webcam: '/config/scripts/takeSnapshotWebcam.sh'
#стартуем наш mjpg-streamer
start_mgpg_streamer: 'curl http://localhost/start_mjpgstrm.php'
#останавливаем mjpg-streamer
stop_mgpg_streamer: 'curl http://localhost/stop_mjpgstrm.php'
#стартуем скрипт формирующий снимки в течение 5 сек
start_motion_rec: 'curl http://localhost/rec-motion-mjpg.php'
#останавливаем его
stop_motion_rec: 'curl http://localhost/rec-motion-mjpg-stop.php'
Там же в configuration.yaml описываем наш объект для почтовой рассылки:
notify:
- name: ha_sendmail
platform: smtp
#если почта на gmail
server: smtp.gmail.com
port: 587
timeout: 15
#от кого посылаем
sender: user@gmail.com
encryption: starttls
username: user@gmail.com
password: passwd
#кому посылаем (можно использовать один ящик и посылать самому себе, почему бы и нет)
recipient:
- user@gmail.com
sender_name: My Home Assistant
Важный момент! Для того чтобы наш HA смог законнектиться и посылать письма (поле sender), мы должны разрешить на gmail возможность пользоваться данным ящиком нашему HA сервису. Как это сделать — ссылка здесь: myaccount.google.com/lesssecureapps
И далее, описываем сам механизм автоматизации при включении сигнализации home_alarm в automation.yaml:
#первая связка действий (alias) “срабатывание по датчику, если охрана включена”
- alias: 'Trigger alarm while armed away'
#alias срабатывает, когда датчик в позиции “on”
trigger:
- platform: state
entity_id: binary_sensor.sensor_hc_sr501
to: 'on'
#при условии, что включен режим охраны при отсутствии людей дома “armed away”
condition:
- condition: state
entity_id: alarm_control_panel.home_alarm
state: armed_away
#и после этого выполняет действие
action:
#Запуск mjpg-streamer (если выключен)
- service: shell_command.start_mgpg_streamer
#Запуск срипта, записывающего с камеры
- service: shell_command.start_motion_rec
#Изменение визуализации нашей карточки “Охраны дома ” на панели HA в положение “сработала сигнализация”
- service: alarm_control_panel.alarm_trigger
entity_id: alarm_control_panel.home_alarm
Cледующая связка условий и действий — послать консольное сообщение при выключении “охраны” и выключить наши скрипты записи по движению:
- alias: 'Send notification when alarm is Disarmed'
trigger:
- platform: state
entity_id: alarm_control_panel.home_alarm
to: 'disarmed'
action:
- service: shell_command.stop_mgpg_streamer
- service: shell_command.stop_motion_rec
- service: persistent_notification.create
data:
message: The alarm is Disarmed at {{ states('sensor.date_time') }}"
И, наконец, третья связка – посылаем письмо с фото:
- alias: 'Send notification when alarm triggered'
trigger:
- platform: state
entity_id: alarm_control_panel.home_alarm
to: 'triggered'
action:
- service: persistent_notification.create
data:
message: Notification when alarm triggered. Motion sensor HC-SR501 detected.
- delay:
seconds: 4
#запускаем наш скрипт формирования одиночного скрипта
- service: script.webcam_snapshot
#и обращаемся к описанному объекту в configuration.yaml: notify.ha_sendmail
- service: notify.ha_sendmail
data:
title: 'Intruder alert'
message: '{{now().strftime("%H:%M %Y-%m-%d")}}:Notification when alarm triggered. Motion sensor HC-SR501 detected.'
data:
images:
# ссылочка на уже сделанный скриптом script.webcam_snapshot снимок
- /config/camera/snapshot.jpg
Помните, что в yaml файлах важна разметка строк, и символы пробелов перед командами играют важную роль формирования блоков кода, его структуру. Проверяйте все изменения ваших yaml через Home Assistant (далее HA) Configuration -> Server Controls -> Check Config.
Вроде все, и ваш Raspberry pi превращается в элегантные … если молнию не заело!)
Вот она – работающая автоматизация HA, НАстроенная своими руками! Обязательно напишите мне, что вы думаете по этому поводу!
И, если вы все-таки дочитали до конца, предлагаю обещанные ссылки:
https://viamybox.com/downloadpage
https://github.com/viatc/viamybox
Конфигурационные файлы описанные здесь:
automation.yaml, configuration.yaml, takeSnapshotWebcam.sh, rec-motion-mjpg.php, mov.py
habl
Автор, а могли бы сделать аналогичное на NodeRED?
ViatChi Автор
NodeRED пока не смотрел. Надеюсь руки дойдут.