-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add offline detection for Zigbee devices
- Loading branch information
1 parent
8a8250b
commit 5531040
Showing
3 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
13 changes: 13 additions & 0 deletions
13
...t/config/automations/it_maintenance/offline_detection_for_Z2M_devices_with_last_seen.yaml
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
id: offline_detection_for_Z2M_devices_with_last_seen | ||
alias: Offline detection for Z2M devices with last_seen | ||
description: 'Offline detection for Z2M devices with last_seen' | ||
use_blueprint: | ||
path: Mr-Groch/offline-notification-for-sensors-with-last_seen.yaml | ||
input: | ||
time: '20:00:00' | ||
hours: 12 | ||
actions: | ||
- service: notify.marco | ||
metadata: {} | ||
data: | ||
message: 'These Zigbee devices might be offline: {{sensors}}' |
18 changes: 18 additions & 0 deletions
18
...tant/config/automations/it_maintenance/offline_detection_for_z2m_devices_with_sensor.yaml
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
id: offline_detection_for_z2m_devices_with_sensor | ||
alias: Offline detection for Z2M devices with sensor z2m_offline_devices | ||
description: "Offline detection for Z2M devices with sensor z2m_offline_devices" | ||
mode: single | ||
trigger: | ||
- platform: state | ||
entity_id: | ||
- sensor.z2m_offline_devices | ||
from: null | ||
to: null | ||
condition: [] | ||
action: | ||
- service: notify.marco | ||
metadata: {} | ||
data: | ||
message: >- | ||
The following Zigbee Devices are offline | ||
{{states('sensor.z2m_offline_devices')}} |
76 changes: 76 additions & 0 deletions
76
...onfig/blueprints/automation/Mr-Groch/offline-notification-for-sensors-with-last_seen.yaml
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
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 |