Last active
March 26, 2026 16:10
-
-
Save ullrik/b6b9e4af2300c34ad98437101a32e9bf to your computer and use it in GitHub Desktop.
Détection hors ligne pour les appareils Z2M avec last_seen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| blueprint: | |
| name: Détection hors ligne pour les appareils Z2M avec last_seen | |
| description: "Tester régulièrement tous les capteurs avec 'last_seen' et 'timestamp' device_class. | |
| (capteurs Z2M 'last_seen') pour détecter les déconnexions et, le cas échéant, exécuter une action." | |
| domain: automation | |
| input: | |
| hours: | |
| name: Delay à controler (en heures) | |
| description: "Les capteurs qui n ont pas été détectés pendant cette période sont considérés comme hors ligne." | |
| default: 24 | |
| selector: | |
| number: | |
| min: 1.0 | |
| max: 168.0 | |
| unit_of_measurement: h | |
| mode: slider | |
| step: 1.0 | |
| time: | |
| name: Heure de déclenchement | |
| description: "Heure ou le test est exécuté via la configuration" | |
| default: '10:00:00' | |
| selector: | |
| time: {} | |
| day: | |
| name: Jour de la semaine pour tester | |
| description: "Le test est exécuté à l heure configurée, soit tous les jours (0), soit à une date donnée | |
| jour de semaine (1: lundi ... 7: dimanche)" | |
| default: 0 | |
| selector: | |
| number: | |
| min: 0.0 | |
| max: 7.0 | |
| mode: slider | |
| step: 1.0 | |
| exclude: | |
| name: Capteurs exclus | |
| description: "Capteurs 'last_seen' (provenant d appareils que vous souhaitez exclure) à exclure de la détection. | |
| Seules les entités avec le nom 'last_seen' et 'timestamp' de device_class sont pris en charge, | |
| sinon il faut l activer !" | |
| default: | |
| entity_id: [] | |
| selector: | |
| target: | |
| entity: | |
| domain: sensor | |
| actions: | |
| name: Actions | |
| description: "Notifications ou tâches similaires à exécuter. {{sensors}} est remplacé par | |
| les noms des capteurs hors ligne." | |
| selector: | |
| action: {} | |
| source_url: https://gist.github.com/ullrik/b6b9e4af2300c34ad98437101a32e9bf | |
| variables: | |
| day: !input 'day' | |
| hours: !input 'hours' | |
| exclude: !input 'exclude' | |
| sensors: "{% set result = namespace(sensors=[]) %}\ | |
| \ {% for state in states.sensor | rejectattr('attributes.device_class', 'undefined') | selectattr('attributes.device_class', '==', 'timestamp') %}\ | |
| \ {% if 'last_seen' in state.entity_id and not state.entity_id in exclude.entity_id and (states(state.entity_id) == 'unavailable' or ((as_timestamp(now()) - as_timestamp(states(state.entity_id))) > ((hours | int) * 60 * 60))) %}\ | |
| \ {% set result.sensors = result.sensors + [state.name | regex_replace(find=' Last seen', replace='') ~ ' (' ~ relative_time(strptime(states(state.entity_id), '%Y-%m-%dT%H:%M:%S%z', 'unavailable')) | replace('hours', 'heures') | replace('minutes', 'min') ~ ')'] %}\ | |
| \ {% endif %}\ | |
| \ {% endfor %}\ | |
| \ {{ result.sensors | join('\n') }}" | |
| trigger: | |
| - platform: time | |
| at: !input 'time' | |
| condition: | |
| - '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}' | |
| action: | |
| - choose: [] | |
| default: !input 'actions' | |
| mode: single |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment