Automatisation Motioneye

Mon problème

Bonjour à toutes et à tous,

Je viens vers vous car j’ai besoin de vos lumière pour récupérer une vidéo générée par Motioneye dans une notification.
Je m’explique, j’ai installé l’add-on et l’intégration Motioneye. J’ai incorporé et réglé comme il faut mes caméras. (2 Reolink) Tout fonctionne parfaitement (détection, enregistrement…) même si j’avoue avoir rencontré quelques écueils.
Désormais, j’aimerai faire une automatisation comme suis :
Lorsque ma caméra capte un mouvement, elle enregistre une vidéo et m’envoie une notification sur le téléphone. Jusqu’ici pas de problème, j’ai réussi aussi, de cette façon :

alias: TestCameraPortail
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.cameraportail_motion_detected
    to: "on"
condition: []
action:
  - service: motioneye.action
    data:
      action: record_start
    target:
      entity_id: camera.camera_portail
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
    enabled: true
  - service: notify.mobile_app_tel_de_nico
    data:
      title: La caméra du portail
      message: a capté un mouvement à {{now().strftime('(%H:%M) [%d-%m-%Y]')}}
      data:
        clickAction: /lovelace-telephone/3
    enabled: true
mode: single

J’aimerai désormais pouvoir avoir la vidéo enregistrée dans la notification que j’envoie à mon téléphone et c’est là que je bloque.

Je sais envoyer une vidéo dans la notif comme cela :

  - service: notify.mobile_app_tel_de_nico
    data:
      title: La caméra du portail
      message: a capté un mouvement à {{now().strftime('(%H:%M) [%d-%m-%Y]')}}
      data:
        video: >-
          /share/motioneye/camera1/nomdelavideo.mp4
        clickAction: /lovelace-telephone/3

Mais je ne sais pas comment dire à ma notif de sélectionner la dernière vidéo enregistrée, car Motioneye l’enregistre au format %Y-%m-%d/%H-%M.mp4 (et donc je ne connais pas la variable qui me permettrait d’envoyer celle qui vient d’être enregistrée).

Une solution serait de paramétrer Motioneye pour qu’il enregistre la vidéo dans un format « fixe » (type : nomdelavideo.mp4) mais cela ferait qu’à chaque nouvelle vidéo la dernière serait écrasée.

Je vous remercie par avance pour vos lumières.

Ma configuration


version core-2022.9.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.5
os_name Linux
os_version 5.15.61-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.27.2
Stage running
Available Repositories 1202
Downloaded Repositories 32
Home Assistant Cloud
logged_in true
subscription_expiration 10 octobre 2022 à 02:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled false
google_enabled true
remote_server eu-central-1-4.ui.nabu.casa
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 9.0
update_channel stable
supervisor_version supervisor-2022.09.1
agent_version 1.3.0
docker_version 20.10.17
disk_total 109.3 GB
disk_used 14.4 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons File editor (5.4.1), Samba share (10.0.0), Duck DNS (1.15.0), MariaDB (2.5.1), Nginx Proxy Manager (0.12.2), AppDaemon (0.9.3), Mosquitto broker (6.1.3), Enedisgateway2mqtt (0.7.7-3), SSH & Web Terminal (12.0.2), FTP (4.6.1), motionEye (0.18.0)
Dashboards
dashboards 3
resources 24
views 23
mode storage
Recorder
oldest_recorder_run 20 septembre 2022 à 14:30
current_recorder_run 29 septembre 2022 à 16:29
estimated_db_size 630.86 MiB
database_engine sqlite
database_version 3.38.5
Spotify
api_endpoint_reachable ok
Xiaomi Gateway 3
version 2.1.1 (b23a66a)
___

Bonjour,
Je ne le fais pas comme ça donc je ne pourrais t’aider, mais j’ai le même souci avec Node Red & Telegram, que j’espère bien régler ce we mais le sujet m’intéresse :slight_smile:

Bob

Oui, je suis un peu déçu de n’avoir eu personne d’autre que cela intéresse. :smiling_face_with_tear:

En fait il suffirait juste de savoir comment faire pour appeler un fichier avec la variable de Motioneye ( %Y-%m-%d/%H-%M.mp4) ou au moins le dernier fichier enregistré d’un dossier spécifique…

Du nouveau de ton côté ?

Je pense qu’en attendant, je vais faire une vue Lovelace avec les dernières vidéos enregistrées et un lien dans ma notif envoyant vers cette vue, mais cela aurait été plus pratique de l’avoir directement dans la notif’.

Pas d’autres âmes charitables avec une idée ?

Salut,

C’est sur qu’en quelques mots la solution est toujours simple :wink: ex : Pour aller sur la lune, il suffit de faire décoller une fusée…
En fait c’est pas le format, ton souci… C’est plutôt de récupérer le bon timecode de l’évènement de détection au lieu de celui du moment du déclenchement de l’automatisation.
Là tu utilises now()au mieux c’est pas toujours bon… Ex: Detection à 11H59.999 le temps de lancer l’automatisation il est 12H00.000 et paf…

Une fois que tu connais cette info, la mettre/l’utiliser pour retrouver la bonne vidéo, c’est peanut !

Salut,

Je pense que tu vas devoir utiliser plus que ton motion detected.
Dans la doc de l’intégration motionEye il y a un exemple de l’event file_stored…
Je pense que c’est le seul qui te permettra d’être sûr qu’une vidéo est dispo avec le bon nom!

Je dois avouer que mes connaissance en fusée sont quasi nulles et en matière de code, pas beaucoup mieux. :grin:
Mais c’est au moins une réponse, merci.
Peut être quelque chose pour demander de récupérer le dernier fichier implémenté dans un dossier en particulier ?

Désolé, j’avoue ne pas bien comprendre. (noob inside :grin:)
Ce que tu m’indiques là (ou du moins ce que la doc’ indique) c’est juste l’emplacement où est stocké le fichier vidéo et sous quel nom il est sauvegardé (et d’autres infos dont je en suis pas sur qu’elles me servent pour récupérer la vidéo). ça pas de problème, je le connais. Chez moi par exemple, c’est /share/motioneye/ %Y-%m-%d/%H-%M.mp4 , c’est juste ?
Que vais-je devoir utiliser de plus ?

Merci encore et désolé si mes questions sont « à côté de la plaque », je débute et cherche à comprendre.

Regarde plus large que juste la forme du nom du fichier, il y a plein d’infos interressante :


il y a peut-être à gérer aussi les GMT etc

Dans ton automatisation actuelle, quand un mouvement est détecté, tu commence l’enregistrement… tu attends 30Sec puis tu envoies une notif en espérant y ajouter la vidéo.
Ca fait pas mal de variables, tu ne sais pas combien de temps motioneye à besoin pour enregistrer la vidéo.

Une façon de faire pourrait être d’avoir ton automatisation actuelle, mais limitée au démarrage de l’enregistrement.
Puis créer une seconde automatisation qui est déclenchée non pas par le mouvement détecté, mais par l’event file_stored…
Ce qui te permettra d’envoyer une notif au moment où on est sûr qu’un fichier à été enregistré et de connaitre son nom.

Je pense (mais c’est théorique…) que Motioneye démarre l’enregistrement tout seul, sans avoir besoin de faire une automatisation. (je viens de le constater en faisant mes tests) Donc, pour cette partie, je pense que je vais pouvoir la faire sauter.
Pour la deuxième partie (le Event trigger) je vais me pencher de ce côté là, (car jamais fait d’automatisation avec ça :thinking:) au moins comme tu dis, pas besoin de pause et on est sûr que la vidéo sera enregistrée.
Ne « restera plus » qu’à en retrouver le nom.

Et puis comme disait Oscar Wilde : «Il faut toujours viser la lune, car même en cas d’échec, on atterrit dans les étoiles» :joy:

Ah ben c’est sûr que si tu as la config côté MotionEye pour créer une vidéo à chaque détection, pas besoin d’appeler le service record.start

Pour les events, il faut regarder la doc de HA dans automation, partie trigger. Dedans ça explique comment utiliser les infos du trigger. La page de MotionEye que je t’ai partagé, justement te renseigne sur le contenu de l’event.
En cumulant les 2 tu pourra déclencher l’automatisation et récupérer les bonne infos, dont le nom du fichier…

Oui, un grand merci, je pense que j’ai compris le « concept ».
Maintenant, comme tu dis, plus qu’à trouver la bonne info (soit le nom du fichier) dans l’event de Motioneye pour la reporter dans mon automatisation… et là je tâtonne.
Si je trouve, je viendrais partager ici.

Pour l’instant, j’en suis là :

platform: event
event_type: motioneye.file_stored
event_data:
  camera_id: 1

Là, si j’ai bien compris, ce sera le déclencheur de mon automatisation ? (où j’indique l’id de ma caméra comme envent_data) Je dois ajouter autre chose ?
Maintenant, à partir de là il va falloir que j’indique le media_content_id de l’event comme chemin de vidéo dans ma notification. C’est à peu près ça ?

Je suis vraiment navré avec toute mes questions qui peuvent vous parraitre idiotes, mais j’ai beau regarder la doc des « Automation trigger » et les « Automation trigger variable », c’est un peu du Chinois…

Sinon, j’ai trouvé sur la commu anglophone un type qui fait quelque chose comme ça :

- id: '1601385011168'
  alias: Person Detected
  description: ''
  trigger:
    platform: event
    event_type: deepstack.object_detected
  variables:
    url: >     
        {% set time = trigger.event.time_fired %}
        {% set timestamp_custom = as_timestamp(time) | timestamp_custom("%Y-%m-%d_%H-%M-%S") %}
        {% set entity_id = trigger.event.data.entity_id | regex_findall_index("\.(.*)") %}
        {{ "/local/snapshots/" + entity_id + "_" + timestamp_custom + ".jpg" }}
  action:
    - service: notify.html5_stians_mobil
      data:
        title: Person oppdaget!
        message: En {{ trigger.event.data.name }} er oppdaget med {{ trigger.event.data.confidence }} sikkerhet 
        data:
          url: '{{ url }}'
          image: '{{ url }}'

C’est assez proche de ce que je voudrais, non ?
Encore merci pour les efforts d’explication que vous faites

Pour te répondre @Elekrea,

Oui c’est résolu de mon côté.
Si intéressé chercher sur le forum « Telegram envoi bonne photo ».

Bob

Oui c’est proche mais tout de mêm vachement plus compliqué que ce que tu as besoin :wink:
Lui il reconstruit l’URL et le nom du fichier, toi tu va recevoir le nom de fichier dans une variable qui s’appelle : trigger.event.data.file_path

Faudra juste s’assuer que le file path soit correct et accessible depuis ta notif.

J’ai été voir et effectivement, avec le Node Red, ce n’était pas ce que je cherchais, mais merci quand même pour le partage.

Oui, il me semblait bien que lui reconstruisait l’url, alors que pour moi ce n’était pas forcement nécessaire.
J’avais pressenti aussi que la variable qu’il me fallait était trigger.event.data.file_path.
Du coup, tu me confirmes la direction que je prenais c’est chouette.
Maintenant, comme tu l’as pressenti là aussi, je me bats avec le file path. :grin:
Le mien étant /share/motioneye/camera1/%d-%m-%Y/%H-%M.mp4 en métant :

action:
  - service: notify.mobile_app_tel_de_nico
    data:
      title: La caméra du portail
      message: >-
        a capté un mouvement à {{now().strftime('%H:%M')}} le
        {{now().strftime('%d-%m-%Y')}}
      data:
        video: {{ trigger.event.data.file_path }}

ça ne marche pas.

J’ai déclaré dans mon configuration.yaml.:

homeassistant:
  media_dirs:
    media: /share/motioneye

  whitelist_external_dirs:
    - /share/motioneye/

Du coup peut être devrais je mettre : video: /media/{{ trigger.event.data.file_path }} ?
Ou encore video: /media/local/{{ trigger.event.data.file_path }} ?
Ou même : video: /local/{{ trigger.event.data.file_path }} ?

Salut

Le mieux c’est quand même de voir ce que {{ trigger.event.data.file_path }} contient avant, ça permettra de répondre facilement aux questions

Et bien comme je le mettais dans mon message {{ trigger.event.data.file_path }} devrait contenir : /share/motioneye/camera1/03-10-2022/16-07.mp4

Pourquoi devrait… c’est justement ce qu’il faut verifier

Je l’ai vérifié en écoutant l’évènement, mais je prends tout avec des pincettes, vu que tout ça est nouveau pour moi et que je ne voudrais pas raconter plus de bêtises :smiling_face: