Connexion du capteur de mouvement et de l'alarme et de l'enregistrement vidéo dans Home Assistant sur Raspberry Pi

Je veux parler de ma petite expérience de travail avec Home Assistant (ci-après dénommé HA) sur le Raspberry pi et de la connexion de la fonction d'enregistrement vidéo, du capteur de mouvement et, en conséquence, de la fonction de sécurité à domicile pour recevoir des images par courrier en cas d'opération de «sécurité».

Bien sûr, l'une des raisons est le désir de comprendre à partir de vos commentaires que ce que j'ai fait «a mal fait» après tout, en mettant en œuvre ce scénario.

Il existe trois façons de configurer les fonctionnalités ci-dessus: «sans problème», «court» et «indépendant». Dans le premier cas, vous, après avoir téléchargé l'image finie depuis le site https://ViaMyBox.com/downloadpagepour votre Raspberry pi, vous pouvez voir à quoi tout ressemble sous la forme déjà configurée. Dans le second cas, vous pouvez télécharger le zip à partir du site Web ou du projet github, installer et installer l'image HA docker via l'utilitaire (sudo via-setup.sh) pour voir comment tout est configuré. Et enfin, la troisième façon est de mettre en place «tout à votre façon»: prendre quelque chose d'utile sur le site ou githab du projet, ou dans ce tutoriel. Liens vers tout à la fin de l'article.

Supposons que vous disposiez déjà d'un Home Assistant (HA) fonctionnel. Dans cet article, nous ne considérerons que les aspects de la formation des configurations yaml et une description de la séquence de règles et conditions qui conduisent à une action spécifique, dans notre cas, la connexion de la «sécurité de la maison» et un script qui commence à prendre des photos dans les 5 secondes après le déclenchement du capteur de mouvement. Et en conséquence, Home Assistant envoie les photos prises par courrier. Je ne suis pas un spécialiste du yaml ou de la création de configurations pour Home Assistant, mais, en suivant les exemples de travail, j'ai obtenu une configuration de travail que je souhaite partager.

Tous les fichiers auxquels nous ferons référence, je les disposerai à la fin de l'article pour une revue plus pratique. Je ne traiterai pas ici du travail des scripts d'enregistrement de vidéo en bash ou en python dans cet exemple. Seul Home Assistant. Mais si vous avez des questions - Bienvenue!

Au final, tout ressemble à ça pour moi (surligné en rouge que nous allons considérer dans l'article):





J'utilise Raspberry pi comme plateforme. Et mon chemin vers les fichiers de configuration est / usr / share / hassio / homeassistant /. Le chemin d'accès à vos fichiers de configuration peut être différent de mon chemin d'accès. À cette époque, j'avais Home Assistant 0.101.3. Nous serons intéressés par les fichiers de configuration de ce répertoire: configuration.yaml et automation.yaml.

Après chaque modification de ces fichiers, il est important de se rappeler qu'il sera nécessaire de vérifier la configuration après nos modifications pour détecter toute erreur qui s'y serait produite. Cela se fait dans l'onglet Tableau de bord Home Assistant -> Configuration -> Contrôles du serveur -> Vérifier la configuration. Et puis, au même endroit, nous effectuons le rechargement des automatisations et le rechargement des scripts, si la vérification a réussi. Et, en cas de doute, - Le redémarrage de la gestion du serveur dans le même onglet met à jour avec précision la configuration.

Le capteur de mouvement HC-SR501 est connecté au bus GPIO Raspberry pi. Il est nécessaire de connecter correctement les trois fils de contact au GPIO, et nous pouvons utiliser notre capteur en action. Le capteur a trois contacts: puissance gcc (+), zéro gnd (-), contact de commande (données). Après avoir lu la description du GPIO, je les ai connectés à ma framboise comme suit. J'ai connecté hc-sr501 au connecteur GPIO: broche # 2 - 5.5vvcc; broche n ° 26 (13e rangée) - contact de données et broche n ° 6 - gnd (-) du capteur.

J'utilise un appareil photo USB ou un appareil photo csi conjointement avec mjpg-streamer comme source de la photo. Comment installer et configurer mjpg-streamer sur Raspberry pi, nous ne considérerons pas ici. Exemples d'installation rapide sur Internet beaucoup. Cependant, je tiens à dire que j'utilise les données de ce projetL'installation de ce module y est également décrite en détail. Ou utilisez une méthode qui vous convient pour prendre des photos et des vidéos. Après tout, c'est vous qui décidez du script bash à attacher à HA.

Nous allons maintenant décrire notre capteur dans configuration.yaml, disons, via la ligne de commande:

sudo nano /usr/share/hassio/homeassistant/configuration.yaml

bien que l'utilisation de notepad ++ avec winscp puisse être plus pratique ...

Nous décrivons la séquence de paramètres pour le HC-SR501 comme ceci:

binary_sensor:
  - platform: rpi_gpio
    #name: HC-SR501
    ports:
      7: Sensor HC-SR501
    invert_logic: false

Il convient de noter qu'ici, l'important est les paramètres dans les lignes qui décrivent la connexion aux contacts de contrôle (données) des capteurs: broches # 7

ports:

7: Capteur HC-SR501

Le Home Assistant dispose d'un outil intégré pour activer la fonction de sécurité domestique. Nous le décrirons dans notre configuration.yaml, en utilisant la description: 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

Ce paramètre signifie que nous avons 60 secondes pour quitter la maison (après cette heure, l'alarme se déclenchera) et 40 secondes pour la désactiver (avec le mot de passe 1234) à notre retour à la maison. Pour une raison quelconque, vous partez toujours plus longtemps que vous venez.)

Nous allons maintenant décrire le mécanisme d'activation et de désactivation des photos par le fonctionnement du capteur de mouvement dans notre configuration.yaml (plus d'informations sur le commutateur - la plate-forme command_line peut être trouvée ici ):

 - 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'


Ici, nous avons lié les commandes enable enable command_on et command_off off à nos scripts qui contrôlent l'enregistrement de la caméra. Dans ce cas, lorsque la commande_on est exécutée, 2 scripts sont exécutés séquentiellement. Cela lance mjpg-streamer et déclenche l'enregistrement du capteur de mouvement. L'accès aux scripts bash passe par le fichier php du site de travail sur Raspberry pi. Pour ce faire, j'ai configuré l'accès nginx et web, et lors de l'accès via le navigateur sous la forme http: // <adresse ip de votre Raspberry pi> /start_mjpgstrm.php, notre script php doit être exécuté. Ce script exécute mjpg-streamer dans cette situation.

Nous ne considérons pas la configuration de l'accès Web dans cet article. Ce n'est certainement pas de la sécurité, mais étant donné que j'ai HA sur docker, j'ai été confronté au fait que j'ai un environnement de docker isolé et le «monde extérieur» du système d'exploitation que je peux voir en contactant mon site via php. Il existe probablement un tas de bonnes solutions de la part des gourous docker ou HA. Ecrivez, il serait intéressant de savoir!

Je vais laisser une liste de ces scripts sous l'article, nous ne nous attarderons pas sur eux. Dans cet article, je souhaite retracer uniquement la formation de la séquence d'actions dans l'assistant d'accueil.

Tout cela est placé dans l'objet start_stop_motion_rec_timelapse Ce sera notre interrupteur visuel, avec lequel nous contrôlerons l'enregistrement des photos lorsque le capteur de mouvement sera déclenché.



Nous pouvons visualiser ces objets créés par nos soins dans l'onglet Home Assistant -> Overwiew, en basculant l'activation du mode de configuration Configure UI dans le coin supérieur droit.



Redémarrez HA dans le navigateur dans l'onglet «Configuration -> Server Control» pour récupérer notre configuration.yaml.

Ensuite, sélectionnez le jaune plus au bas de la fenêtre du navigateur, cliquez sur la carte Entités et attachez nos objets créés aux cartes.



Pour notre capteur, sélectionnez la carte du capteur. Cela ressemblera à ceci:



Comme vous pouvez le voir sur l'image, dans le deuxième champ de l'entité, le commutateur ci-dessus est: switch.start_stop_motion_rec_timelapse.

Il nous permet d'activer et de désactiver notre enregistrement sur le capteur de mouvement, indépendamment de l'inclusion de la fonction «sécurité à domicile». Et, en général, cela devrait déjà fonctionner après toutes les actions ci-dessus.

Eh bien, et en conséquence, la carte du panneau d'alarme:



Il y a un autre point intéressant. J'utilise Home Assistant comme conteneur Docker. À cet égard, le chemin d'accès à notre script sera différent du chemin d'accès réel au fichier de script. Après tout, la structure de fichiers à l'intérieur du conteneur est virtualisée et connectée à la structure de fichiers réelle via des volumes de docker montés. Il ressemble à ceci: Chemin à l'intérieur du conteneur: / config / scripts / Chemin à l'intérieur du système d'exploitation: / usr / share / hassio / homeassiatnt / scripts. Regardez donc les paramètres de votre conteneur, comment ces volumes sont configurés dans le champ Binds. Si vous en avez.

sudo docker inspect homeassistant|less

Lorsque le détecteur de mouvement est déclenché, au moment où l'alarme est activée: je veux, en plus du fait que nous commençons la photographie rapide (instantanés instantanés), je recevrais un avertissement par mail et un instantané. J'ai parallélisé les processus. Sur la première photo, la journalisation (instantanés instantanés) se produit quelques secondes après le déclenchement du capteur. Pour ce faire, j'exécute mjpg-streamer curl localhost / start_mjpgstrm.php , lancez php: surl http: //localhost/rec-motion-mjpg.php . À son tour, il exécute le script python mov.py. Tous les fichiers et liens décrits se trouvent à la fin de l'article par référence. Et un autre script takeSnapshotWebcam.sh prend un instantané, que j'envoie dans un e-mail. Je décris ces scripts dans notre configuration.yaml comme ceci:

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'

Là, dans configuration.yaml, nous décrivons notre objet de mailing:

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

Un point important! Pour que notre HA se connecte et envoie des lettres (champ expéditeur), nous devons autoriser gmail à utiliser cette case pour notre service HA. Comment faire est le lien ici: myaccount.google.com/lesssecureapps

Et puis, nous décrivons le mécanisme d'automatisation lui-même lorsque l'alarme home_alarm est activée dans 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

Le groupe de conditions et d'actions suivant consiste à envoyer un message de console lors de la désactivation de la «sécurité» et à désactiver nos scripts d'enregistrement de mouvement:

- 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') }}"

Et enfin, le troisième groupe - nous envoyons une lettre avec une photo:

- 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

N'oubliez pas que la disposition des lignes est importante dans les fichiers yaml et que les caractères d'espace avant les commandes jouent un rôle important dans la formation des blocs de code, leur structure. Vérifiez toutes les modifications apportées à votre yaml via la configuration Home Assistant (HA) -> Contrôles du serveur -> Vérifier la configuration.

Tout semble être, et votre Raspberry pi devient élégant ... si la foudre n'est pas restée!) La

voici - une automatisation HA fonctionnelle, sur mesure! N'oubliez pas de m'écrire ce que vous en pensez!

Et, si vous lisez toujours jusqu'au bout, je vous propose les liens promis:

https://viamybox.com/downloadpage

https://github.com/viatc/viamybox Les

fichiers de configuration décrits ici:
automation.yaml, configuration.yaml, takeSnapshotWebcam. sh, rec-motion-mjpg.php, mov.py

Source: https://habr.com/ru/post/undefined/


All Articles