Notification avec photo quand detection de mouvement

Tutoriel Notification avec photo quand détection de mouvement

Il existe déjà un blueprint partager sur ce forum par @barto_95
https://forum.hacf.fr/t/notifications-detection-de-mouvement/1589

il me manqué certaines conditions :

  • Si person.nomn’est pas à la maison
  • Modification du service notify
  • j’avoue préféré maintenant le .yaml pour son coter bidouille :slight_smile:

C’est pourquoi je vous partage mon format .yaml

- alias: Notify Salon test
  trigger:
    platform: state
    entity_id: binary_sensor.camsalon_motion 
    from: 'off'
    to: 'on'
  condition:    
  - condition: and
    conditions:
      - condition: state
        entity_id: person.exemple # à remplacer
        state: not_home
      - condition: and
        conditions:
          - condition: state
            entity_id: person.exemple # à remplacer
            state: not_home 
  action:
  - service: camera.snapshot
    data:
     entity_id: camera.***** # à remplacer par votre entityID de votre camera
     filename: '/config/www/tmp/snapshot_CamSalon.jpg'
  - delay: 00:00:01 
  - service: notify.mobile_app_redmi_**** #à remplacer par votre mobile
    data:
      title: "CamSalon  {{now().strftime('(%H:%M) [%d-%m-%Y]')}}" #titre + heure + date
      message: "Mouvement detecté au Salon"
      data:
        image: 'local/tmp/snapshot_CamSalon.jpg'
        clickAction: '/lovelace/Camera' #si vous cliquer sur la notification cela vous ouvre l'application à la page Camera (dans mon cas #a remplacer)

Si vous souhaitez des actions sur la / les notifications je vous laisse le lien également de HA.

Si vous avez des suggestions ou idée n’hésiter pas :slight_smile:

7 « J'aime »

Mise à jour:

  • si person.exemple "n’est pas à la maison mais au sein d’une autre zone (ex: au boulot) « not_state »
  • lors de la réception du la notification pour les android l’écran de votre telephone sortira du mode veille
- alias: '[Notify] Detection mouvements'
  trigger:
    platform: webhook #disposant d'un nas Synology avec synology station il envoi un ping lors de détection
    webhook_id: camsalon_motion
  condition:
  - condition: and
    conditions:
    - condition: template
      value_template: "{{ not is_state('person.exemple1', 'home') }}"
    - condition: and
      conditions:
      - condition: template
        value_template: "{{ not is_state('person.exemple2', 'home') }}"
  action:
  - service: camera.snapshot
    data:
      entity_id: camera.exemple_camsalon
      filename: /config/www/tmp/snapshot_CamSalon.jpg
  - delay: 00:00:01 
  - service: notify.mobile_app_redmi_**** #à remplacer par votre mobile
    data:
      title: "CamSalon  {{now().strftime('(%H:%M) [%d-%m-%Y]')}}" #titre + heure + date
      message: "Mouvement detecté au Salon"
      data:
        image: 'local/tmp/snapshot_CamSalon.jpg'
        clickAction: '/lovelace/Camera' #si vous cliquer sur la notification cela vous ouvre l'application à la page Camera (dans mon cas #a remplacer)
  - service: notify.notify
    data:
      message: "command_screen_on"
        
  id: 1f85ed3995aa4526be643d3fb23335f0
2 « J'aime »

Dernières mises a jour:

Après la demande de @Pierre_H pour la suppression automatique des anciennes captures (snapshot)
https://forum.hacf.fr/t/aide-automatisation-suppression-contenu-dossier-en-auto/6490

@Clemalex à mis a disposition une intégration permettant de configurer un service de supression automatique qui peux donc convenir pour les caméra mais également pour les backup de HA.

Pour l’installer rien de plus simple:

In /config folder create custom_components folder and load source files folder delete in it. In 'configuration.yaml' include:

delete:

Order of actions:

    Copy data to custom_components;
    Restart Home Assistant to find the component;
    Include data in configuration.yaml;
    Restart Home Asistant to see new services.

Ce qui donne dans notre cas:

- alias: '[Notify] Detection mouvements'
  trigger:
    platform: webhook
    webhook_id: camsalon_motion
  condition:
  - condition: and
    conditions:
    - condition: template
      value_template: "{{ not is_state('person.exemple', 'home') }}"
    - condition: and
      conditions:
      - condition: template
        value_template: "{{ not is_state('persone.exemple', 'home') }}"
  action:
  - service: camera.snapshot
    data:
      entity_id: camera.exemple_camsalon
      filename: /config/www/camera/snapshot_CamSalon.jpg
  - service: camera.snapshot #création d'un 2eme snapshot/dossier nommé archive
    data:
      entity_id: camera.exemple_camsalon
      filename: /config/www/camera/archive/snapshot_CamSalon_{{ now().strftime("%Hh%M_%d-%m-%Y") }}.jpg
  - delay: 00:00:01
  - service: notify.notify
    data:
      title: CamSalon  {{now().strftime('(%H:%M) [%d-%m-%Y]')}}
      message: Mouvement detecté au Salon
      data:
        image : local/camera/snapshot_CamSalon.jpg
        clickAction: /lovelace/Camera
  - service: delete.files_in_folder
    data:
      folder: /config/www/camera/archive
      only_extensions:
        - '.jpg'
      time: 2592000 #30 * 24h * 60m * 60s (30jrs) nbr jours légale de conservation.
  - service: notify.notify
    data:
      message: "command_screen_on"
        
  id: 1f85ed3995aa4526be643d3fb23335f0

Résultât:
2 capture:

  • 1: archivé et nommé heure:Minute_Jour-Mois-Année.jpg
  • 1: éphémère qui se fera écrasé par la suivante capture venant de la même caméra.

bonjour je n’arrive pas a recevoir l’image de ma camera

Tout vas dépendre de ou tu stock tes images

Dans config/www/tmp/xxxw.jpg et je l’envoi par telegram

Local/tmp dans ce cas
Local=www

Bonjour,
j’ai fais des test pour le service camera.snapshot:

Avec /local/capture/snapshot.jpg, j’ai c’est erreur « Can’t write /local/capture/snapshot.jpg, no access to path! »

Avec /config/www/capture/snapshot.jpg, ca fonctionne.

Par contre pour le service notify.notify, faut utiliser local/capture/snapshot.jpg

Bizarre qu’un accepte le /local/ et pas l’autre.

Bon ca vien enfaite de telegram mon probleme

Mise à jour 02/04/2023.

  • les enregistrements se font désormais dans « Media » et non plus dans « Config » afin de pouvoir les visualiser sur les différents supports (périphériques) connecté a Ha.

Etape 1: configuration.yaml
on donne l’autorisation a HA d’accéder au autres répertoires:

homeassistant:
  name: Home
  country: FR
  latitude: !secret ha_latitude
  longitude: !secret ha_longitude
  elevation: 35  
  temperature_unit: c
  unit_system: metric
  time_zone: Europe/Paris
  packages: !include_dir_named packages/
  allowlist_external_dirs: [/config/]  #Autorisation
  auth_providers:
    - type: homeassistant
  internal_url: !secret internal_url
  customize: !include_dir_merge_named customize/
# Configure a default setup of Home Assistant (frontend, api, etc)
# Example configuration.yaml
  media_dirs:  # on indique ou se trouve les média sur HA
    local: "/media"

Etape 2: Automatisations

- id: 1f85ed3995aa4526be643d3fb23335f0
  alias: '[Notify] Detection mouvements'
  trigger:
  - platform: webhook
    webhook_id: camsalon_motion
  condition:
  - condition: template
    value_template: '{{ not is_state(''person.xxxx'',''home'') }}'
    enabled: false # fonction desactivé  car remplacer par le "binary_sensor" a remplacer par 'true' pour l'activer
  - condition: template
    value_template: '{{ not is_state(''person.xxx'',''home'') }}'
    enabled: false # fonction desactivé  car remplacer par le "binary_sensor" a remplacer par 'true' pour l'activer
  - condition: not
    conditions:
    - condition: state
      entity_id: binary_sensor.presence_home
      state: 'on'
  action:
  - service: camera.snapshot
    data:
      entity_id: camera.xxxxx_camsalon
      filename: /media/camera/snapshot_CamSalon.jpg
  - service: camera.snapshot
    data:
      entity_id: camera.xxxxxx_camsalon
      filename: /media/camera/archive/snapshot_CamSalon_{{ now().strftime("%Hh%M_%d-%m-%Y")
        }}.jpg
  - delay: 00:00:01
  - service: notify.notify
    data:
      title: CamSalon  {{now().strftime('(%H:%M) [%d-%m-%Y]')}}
      message: Mouvement detecté au Salon
      data:
        image: /media/local/camera/snapshot_CamSalon.jpg
        entity_id: camera.xxxxx_camsalon
  - service: delete.files_in_folder
    data:
      folder: /media/camera/archive
      only_extensions:
      - .jpg
      time: 2419200
  - service: notify.notify
    data: #sort l’écran du mode veille
      message: command_screen_on  
2 « J'aime »

Tu pense que ça vient de la mon problème ?

C’est pour répondre a @WarC0zes « no acces to path ! » mais tu peux tester :slight_smile:

J’ai bien allowlist_external_dirs: [/config/] dans mon configuration.yaml.

Ca fonctionne comme je les dit.

il faut tout mettre dans la config ou que la fin?

Si tu veut enregistrer dans media il te faudra ces lignes ci dessous a minima

1 « J'aime »

Juste pour te remercier ! :+1:
Je me suis inspiré de ton code et tout fonctionne formidablement bien. :grin:

2 « J'aime »

Merci pour ce tuto, il est top ! J’ai réussi à configurer la même chose chez moi :grin:

Par contre, je n’arrive pas à joindre l’image pendant la notif.
J’ai ce code la :

  - service: camera.snapshot
    metadata: {}
    data:
      filename: '/media/snapshot/exterieur.jpg'
    target:
      entity_id: camera.macamera
  - delay: 00:00:01
  - service: notify.notify
    data:
      title: "Intrusion"
      message: "Il y a quelqu'un dans le jardin !"
      data:
        image : "/media/snapshot/exterieur.jpg"
        clickAction: /lovelace/2
        channel: "Security" 
        importance: high

Si quelqu’un a une idée, je suis preneur !