-
-
Save Mr-Groch/bf073b142b507e3b6f8154223f81803b to your computer and use it in GitHub Desktop.
blueprint: | |
name: Offline detection for Z2M devices with last_seen | |
description: Regularly test all sensors with 'last_seen' in name and 'timestamp' device_class | |
('last seen' Z2M sensors) to detect offline and if so execute an action. | |
domain: automation | |
input: | |
hours: | |
name: Hours not seen | |
description: Sensors not seen this amount of time are assumed to be offline. | |
default: 24 | |
selector: | |
number: | |
min: 1.0 | |
max: 168.0 | |
unit_of_measurement: h | |
mode: slider | |
step: 1.0 | |
time: | |
name: Time to test on | |
description: Test is run at configured time | |
default: '10:00:00' | |
selector: | |
time: {} | |
day: | |
name: Weekday to test on | |
description: 'Test is run at configured time either everyday (0) or on a given | |
weekday (1: Monday ... 7: Sunday)' | |
default: 0 | |
selector: | |
number: | |
min: 0.0 | |
max: 7.0 | |
mode: slider | |
step: 1.0 | |
exclude: | |
name: Excluded Sensors | |
description: "'last seen' sensors (from devices that you want to exclude) to | |
exclude from detection. Only entities with 'last seen' in name and 'timestamp' | |
in device_class are supported, devices must be expanded!" | |
default: | |
entity_id: [] | |
selector: | |
target: | |
entity: | |
domain: sensor | |
actions: | |
name: Actions | |
description: Notifications or similar to be run. {{sensors}} is replaced with | |
the names of sensors being offline. | |
selector: | |
action: {} | |
source_url: https://gist.github.com/Mr-Groch/bf073b142b507e3b6f8154223f81803b | |
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')) ~ ')'] %}\ | |
\ {% endif %}\ | |
\ {% endfor %}\ | |
\ {{ result.sensors | join(', ') }}" | |
trigger: | |
- platform: time | |
at: !input 'time' | |
condition: | |
- '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}' | |
action: | |
- choose: [] | |
default: !input 'actions' | |
mode: single |
Hello @Mr-Groch and thank you for this Blueprint that I have been using for months.
Is it possible to have a line break in the notification for each device?
This would be much more readable when there are a lot of devices offline.
thanks again
I have HA supervised + Z2M, but I don't see last_seen in the attributes. My sensors in HA have these attributes only (examlpe):
state_class: measurement unit_of_measurement: °C device_class: temperature friendly_name: Датчик на улице Температура
But in the Z2M, I see an attribute last_seen, so for the sensor from the example, I see this:
{ "humidity": 86, "last_seen": "2024-02-22T12:38:26+03:00", "linkquality": 29, "temperature": -0.2 }
How do I transfer the last_seen attribute from Z2M to HA to use this blueprint? It's not working right now.
Sorry, I figured it out myself. I've added objects that are deactivated by default. Now I see it in HA. Thanks.
Hey Mr-Groch
Thank you for the nice blueprint.
Is there a way to include the device/s that are offline on the notification message?