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.
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
Oui, je suis un peu déçu de n’avoir eu personne d’autre que cela intéresse.
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’.
C’est sur qu’en quelques mots la solution est toujours simple 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 !
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.
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 )
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.
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 ) 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»
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.
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
Oui c’est proche mais tout de mêm vachement plus compliqué que ce que tu as besoin
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.
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.
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 }}
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 }} ?
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