Détection de courrier sur capteur de vibration xiaomi

Bonjour,

J’ai souhaité suivre ce tuto pour une détecteur de courrier dans ma boite aux lettres
https://forum.hacf.fr/t/node-red-recevoir-une-notification-apres-le-passage-du-facteur/260

Débutant sous nodered et après quelques recherches, je me rends compte que le « events: state » ne peut pas être utilisé dans mon cas car l’état du capteur est toujours OFF.
Par contre, l’entité à un attribut nommé « last_action » qui prend les réponses suivantes : vibration, free_fall et tilt.
Comment faire pour que cet attribut serve de déclencheur ?

A savoir que le plus souvent, au passage du facteur, cela renvoie « vibration » et j’aimerais donc pouvoir utiliser le même principe que « Current state equals previous state ».

Merci d’avance

Salut,
J’utilise aussi ce capteur pour mon courrier, mais moi j’envoi une photo vers Telegram en guise de notification.
Voici mon flux nodered ci cela peut d’aider,

[{"id":"22546a7c.11623e","type":"tab","label":"Courrier","disabled":false,"info":""},{"id":"d5190af0.13c398","type":"group","z":"22546a7c.11623e","name":"Notification de courrier","style":{"stroke":"#ffC000","fill":"#ffffbf","label":true,"fill-opacity":"0.5"},"nodes":["6af0153f.cdb484","9abd7710.bfd81","7871d413.c0130c","7d261f23.6c69c","ae261ab9.54d698","c7b2c9d7.421e38","caa1d2bf.ec7e5","557fcac7.2c8114","7ce7bd58.e59c84","76f2deda.4f6bf","39b698.3d368168","c04b3c0c.96fb58","3f418e14.965c92","3040da4.eb3f3a6","88c89f8.30abd6","4bb7576e.3d88d","83defe26.a779d8","85a340b1.78a2a","4ce43d96.ac1064","63a2fc3f.ce4b04","67724091.01bac","7930318f.16f83","78694053.a9af6","2028491f.6be7c6"],"x":34,"y":39,"w":1292,"h":682},{"id":"73bf8c77.b36ab4","type":"server-state-changed","z":"22546a7c.11623e","name":"Detection Vibration tilt","server":"7dc501eb.e6c08","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.detecteur_de_vibrations_action","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"tilt","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":140,"y":800,"wires":[["6422ef30.f8d79"],[]]},{"id":"6af0153f.cdb484","type":"api-call-service","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Notification vers Hassio","server":"7dc501eb.e6c08","version":3,"debugenabled":false,"service_domain":"notify","service":"persistent_notification","entityId":"","data":"{\"message\":\"Le courrier vient d'être distribué.\",\"title\":\"COURRIER !\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":500,"wires":[[]]},{"id":"9abd7710.bfd81","type":"api-call-service","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Notification vers Portable Didier","server":"7dc501eb.e6c08","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_sm_a530f","entityId":"","data":"{\"message\":\"Le courrier vient d'être distribué.\",\"title\":\"COURRIER !\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1070,"y":660,"wires":[[]]},{"id":"7871d413.c0130c","type":"api-call-service","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","server":"7dc501eb.e6c08","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"toggle","entityId":"input_boolean.boite_aux_lettres","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":300,"wires":[["7d261f23.6c69c"]],"info":"change l'état de input boolean boite aux lettres"},{"id":"7d261f23.6c69c","type":"api-current-state","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","server":"7dc501eb.e6c08","version":2,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.boite_aux_lettres","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":960,"y":300,"wires":[["78694053.a9af6"],[]]},{"id":"ff74c455.0298b8","type":"server-state-changed","z":"22546a7c.11623e","name":"Detection Vibration drop","server":"7dc501eb.e6c08","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.detecteur_de_vibrations_action","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"drop","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":140,"y":880,"wires":[["2c327d4f.99a092"],[]]},{"id":"99d0194b.462b48","type":"server-state-changed","z":"22546a7c.11623e","name":"Detection Vibration","server":"7dc501eb.e6c08","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.detecteur_de_vibrations_action","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"vibration","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":130,"y":960,"wires":[["5aea6e27.d7b34"],[]]},{"id":"ae261ab9.54d698","type":"mqtt in","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","topic":"zigbee2mqtt/Détecteur de Vibrations","qos":"0","datatype":"auto","broker":"1eb4fa04.85f54e","nl":false,"rap":true,"rh":0,"x":200,"y":140,"wires":[["c04b3c0c.96fb58","83defe26.a779d8"]]},{"id":"2c327d4f.99a092","type":"debug","z":"22546a7c.11623e","name":"Vibration drop","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":380,"y":880,"wires":[]},{"id":"5aea6e27.d7b34","type":"debug","z":"22546a7c.11623e","name":"Vibration","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":360,"y":960,"wires":[]},{"id":"6422ef30.f8d79","type":"debug","z":"22546a7c.11623e","name":"vibration tilt","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":800,"wires":[]},{"id":"c7b2c9d7.421e38","type":"function","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Filtre Vibration","func":"if (msg.payload == \"tilt\") {\n   return [msg];\n} else if  (msg.payload == \"drop\") {\n   return [msg];\n} else if  (msg.payload == \"vibration\") {\n   return [msg];\n} else {\n   return [null];\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":260,"wires":[["557fcac7.2c8114","7871d413.c0130c"]]},{"id":"caa1d2bf.ec7e5","type":"inject","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"tilt","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"tilt","payloadType":"str","x":130,"y":280,"wires":[["c7b2c9d7.421e38"]]},{"id":"557fcac7.2c8114","type":"debug","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"filtre vibration","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":240,"wires":[]},{"id":"7ce7bd58.e59c84","type":"inject","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"drop","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"drop","payloadType":"str","x":130,"y":340,"wires":[["c7b2c9d7.421e38"]]},{"id":"76f2deda.4f6bf","type":"inject","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"vibration","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"vibration","payloadType":"str","x":140,"y":220,"wires":[["c7b2c9d7.421e38"]]},{"id":"39b698.3d368168","type":"inject","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"envoi notification","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":780,"y":660,"wires":[["9abd7710.bfd81"]]},{"id":"c04b3c0c.96fb58","type":"debug","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"entrée vibration","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":480,"y":80,"wires":[]},{"id":"3f418e14.965c92","type":"json","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","property":"payload","action":"","pretty":false,"x":650,"y":140,"wires":[["88c89f8.30abd6","4bb7576e.3d88d"]]},{"id":"3040da4.eb3f3a6","type":"debug","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Filtre action","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1070,"y":80,"wires":[]},{"id":"88c89f8.30abd6","type":"change","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Filtre payload action","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.action","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":140,"wires":[["3040da4.eb3f3a6","c7b2c9d7.421e38"]]},{"id":"4bb7576e.3d88d","type":"debug","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Filtre json","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":820,"y":80,"wires":[]},{"id":"83defe26.a779d8","type":"delay","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":460,"y":140,"wires":[["3f418e14.965c92"]]},{"id":"85a340b1.78a2a","type":"comment","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Notification de courrier","info":"Automatisation Hassio\n\n# alias: 'Notification de Distribution du Courrier '\ndescription: |-\n  envoi notification si détection de vibration et boolean à on.\n  ou\n  si boolean  passe de off à on\ntrigger:\n  - platform: device\n    domain: mqtt\n    device_id: 7b9c1af6e7ca0b6f858301a492b15065\n    type: action\n    subtype: vibration\n    discovery_id: 0x00158d00056e4169 action_vibration\n  - platform: device\n    domain: mqtt\n    device_id: 7b9c1af6e7ca0b6f858301a492b15065\n    type: action\n    subtype: tilt\n    discovery_id: 0x00158d00056e4169 action_tilt\n  - platform: device\n    domain: mqtt\n    device_id: 7b9c1af6e7ca0b6f858301a492b15065\n    type: action\n    subtype: drop\n    discovery_id: 0x00158d00056e4169 action_drop\ncondition: []\naction:\n  - service: input_boolean.toggle\n    target:\n      entity_id: input_boolean.boite_aux_lettres\n  - condition: state\n    entity_id: input_boolean.boite_aux_lettres\n    state: 'on'\n  - service: notify.mobile_app_sm_a530f\n    data:\n      message: Le courrier vient d'être distribué.\n      title: COURRIER !\n  - service: notify.persistent_notification\n    data:\n      message: Le courrier vient d'être distribué.\n      title: COURRIER !\nmode: single\n","x":180,"y":680,"wires":[]},{"id":"4ce43d96.ac1064","type":"api-call-service","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Take Snapshot","server":"7dc501eb.e6c08","version":3,"debugenabled":false,"service_domain":"camera","service":"snapshot","entityId":"camera.diskstation_3_facade_rue","data":"{\"filename\":\"/config/www/tmp/snapshot_courrier_camera.facade_rue.jpg\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":600,"y":420,"wires":[["63a2fc3f.ce4b04"]]},{"id":"63a2fc3f.ce4b04","type":"delay","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"1sec delay","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":770,"y":420,"wires":[["67724091.01bac"]]},{"id":"67724091.01bac","type":"api-call-service","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Envoi Photo sur Telegram","server":"7dc501eb.e6c08","version":3,"debugenabled":false,"service_domain":"telegram_bot","service":"send_photo","entityId":"","data":"{\"file\":\"/config/www/tmp/snapshot_courrier_camera.facade_rue.jpg\",\"caption\":\"Le courrier est distribué.\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":420,"wires":[["7930318f.16f83"]]},{"id":"7930318f.16f83","type":"telegram sender","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"","bot":"605cd2b9.ffd0ec","haserroroutput":false,"outputs":1,"x":1210,"y":420,"wires":[[]]},{"id":"78694053.a9af6","type":"link out","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"Vers Notification","links":["2028491f.6be7c6"],"x":1195,"y":280,"wires":[]},{"id":"2028491f.6be7c6","type":"link in","z":"22546a7c.11623e","g":"d5190af0.13c398","name":"De Courrier distribué","links":["78694053.a9af6"],"x":455,"y":420,"wires":[["4ce43d96.ac1064","6af0153f.cdb484"]]},{"id":"7dc501eb.e6c08","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"1eb4fa04.85f54e","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"605cd2b9.ffd0ec","type":"telegram bot","botname":"Hassio_didier_bot","usernames":"@Hassio_didier_bot","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false}]

Salut,

moi j’utilise des capteur pour ouverture de porte/fenêtre en Z-Wave. Je fais la notification directement sur mon portable et sa marche très bien.

@NiC1305 tu as réussi à faire ce que tu voulais?

Salut @telenaze
Je viens d’importer ton flow dans home assistant. Je t’avoue ne pas comprendre grand chose. Tu pourrai nous detailer un peu plus les elements ? :smiley:

Salut,
En fait, je suis débutant dans ce genre d’exercice et ce flow n’est surement pas le plus propre ni le plus optimisé qui soit, mais il me donne entière satisfaction.

tout d’abord, cette première partie met en forme le payload afin de pouvoir traiter les informations « action »

Ensuite j’utilise un nœud fonction qui ne laisse passé le flux que si action = tilt, drop ou vibration.

ensuite je me sers d’un input_boolean afin d’avoir un notification lorsque le courrier est distribué mais pas quant je retire le courrier de la boite aux lettres.


cela me permet aussi de changer l’état de ma carte boite aux lettres.
Screenshot_2021-04-07 Aperçu - Home Assistant
letters off

Enfin, cette partie envoi une notification vers Hassio avec une photo vers Telegram.

Voila, si vous pensez que quelque chose peut être amélioré, n’hésitez pas je suis preneur.

2 « J'aime »

Merci @telenaze
Je vais essayer de me mettre à NodeRed.
J’ai essayer de gérer avec les automatisations le capteur vibration, mais ca ne fonctionne pas tres bien … @telenaze tu gère le périphérique avec l’intégration « zigbee2mqtt » ?

Tu as ouvert un sujet ? Car Node-RED ou YAML, je ne pense pas que cela fasse grande différence… :innocent: :blush:

La seule différence c’est au niveau de la récupération des événements…

Non j’avais pas ouvert un sujet spécialement, c’etait à la suite d’un sujet deja existant. Il faudrait que j’en ouvre un, mais en ce moment je n’ai pas trop le temps à cause du boulot.

https://forum.hacf.fr/t/heure-douverture-boite-aux-lettres/4029/18?u=pierre_ma

https://forum.hacf.fr/t/heure-douverture-boite-aux-lettres/4029/20?u=pierre_ma

https://forum.hacf.fr/t/heure-douverture-boite-aux-lettres/4029/22?u=pierre_ma

Je me rends compte que j’avais laissé mon petit projet en standby et que node-red n’était pas forcément adapté dans mon cas.
Je suis passé par les automatisations et j’ai réussi à utiliser le paramètre last-action avec le code suivant :

alias: Courrier
description: 'Notification de courrier via capteur de vibration'
trigger:
  - platform: event
    event_type: xiaomi_aqara.movement
    event_data:
      entity_id: binary_sensor.vibration_bal
      movement_type: vibrate
condition: []
action:
  - service: notify.notify
    data:
      message: 'Mouvement dans la BAL : (type de mouvement)'
mode: restart

Comme indiqué au départ, le movement_type peut récupérer 3 infos : vibrate, tilt ou free_fall.
J’aimerais ne pas créer 3 automatisations différentes mais faire en sorte que celle-ci se déclenche dès que le trigger reçoit n’importe quelle info et ainsi modifier le message du notify en fonction (type de mouvement). Comment faire cela ?
Merci d’avance

@Pierre_Ma j’utilise la passerelle Xiaomi pour le moment mais je pense migrer bientôt sous zigbee2mqtt
@telenaze Merci pour ton exemple en node-red mais je pense que l’automatisation me suffira pour débuter :slight_smile: