В данной статье описывается две автоматизации:
- Оповещение об устройствах параметр Last Seen которых (не появлялись в сети) более 12 часов.
(Данные берутся из файла базы данных сервиса homed-zigbee /opt/homed-zigbee/database.json)
- Оповещение об устройствах со статусом offline
(Данные берутся из mqtt-топика homed/device/zigbee/# )
Оповещение об устройствах параметр Last Seen которых (не появлялись в сети) более 12 часов.
Автоматизация для оповещения о появлении устройств долго отсутствующих в сети.
Выводит список активных устройств отсутствующих в сети более 12 часов.
Срабатывает 1 раз в час или сразу при написании в telegram команды "seen".
⚠️ Для работы автоматизации необходимо установить утилиту jq
Как установить jq:
в OpenWrt:
opkg update
opkg install jq
в Armbian:
apt update
apt install jq
Запрос jq показывающий только устройства zigbee отсутствующие в сети более 12 часов и их Last seen:
jq -r --argjson now "$(date +%s)" '
.devices[]
| select(
.lastSeen
and (.removed != true)
and (.active == true)
)
| .displayName = (if has("name") then .name else .ieeeAddress end)
| .hoursAgo = (($now - .lastSeen) / 3600 | floor)
| select(.hoursAgo > 12)
| "📵 \(.displayName)\t | Last seen \(.hoursAgo) hours ago"' /opt/homed-zigbee/database.json
Запрос jq показывающий все устройства zigbee и их Last seen:
jq -r --argjson now "$(date +%s)" '
.devices[]
| select(
.lastSeen
and (.removed != true)
and (.active == true)
)
| .displayName = (if has("name") then .name else .ieeeAddress end)
| .hoursAgo = (($now - .lastSeen) / 3600 | floor)
| "\(.displayName)\t | Last seen \(.hoursAgo) hours ago"' /opt/homed-zigbee/database.json
Код автоматизации:
{
"actions": [
{
"command": "#Скрипт показывающий устройства не выходящие на связь более 12 часов\n\njq -r --argjson now \"$(date +%s)\" '\n.devices[] \n| select(\n .lastSeen \n and (.removed != true) \n and (.active == true)\n )\n| .displayName = (if has(\"name\") then .name else .ieeeAddress end)\n| .hoursAgo = (($now - .lastSeen) / 3600 | floor)\n| select(.hoursAgo > 12)\n| \"📵 \\(.displayName)\\t | Last seen \\(.hoursAgo) hours ago\"' /opt/homed-zigbee/database.json",
"type": "shell"
},
{
"conditions": [
{
"equals": "_NULL_",
"pattern": "{{shellOutput}}",
"type": "pattern"
}
],
"else": [
{
"message": "{{shellOutput}}",
"type": "telegram"
}
],
"then": [
{
"message": "Выводить нечего",
"triggerName": "telegram",
"type": "telegram"
}
],
"type": "condition"
}
],
"note": "Автоматизация для оповещения о появлении устройств долго отсутствующих в сети.\nВыводит список активных устройств отсутствующих в сети более 12 часов.\n<p>\nСрабатывает 1 раз в час или сразу при написании в telegram команды \"seen\".\n\n",
"restart": false,
"triggers": [
{
"message": "seen",
"name": "telegram",
"type": "telegram"
},
{
"interval": 60,
"type": "interval"
}
],
"conditions": [],
"debounce": 0
}
Файл для импорта автоматизации:
Оповещение об устройствах со статусом offline
Выводит список оффлайн устройств. Автоматизация для оповещения о появлении оффлайн устройств, тех что в веб-интерфейсе помечены красным.
Срабатывает 1 раз в час или сразу при написании в telegram команды "offline". Скорость ответа зависит от ответа mqtt и как правило бывает немоментальной.
⚠️ Для работы автоматизации необходимо установить клиентскую часть mosquitto.
Пакет в OpeWrt: mosquitto-client-nossl или mosquitto-client-ssl
Опрашивает mqtt ветку homed/device/zigbee/# на наличие оффлайн устройств. Требует настройки подключения к mqtt скрипта в разделе Actions.
#Необходимо указать данные для подключения к mqtt c помощью mosquitto_sub
#Примеры строк подключения, расскоментируйте и отредактируйте подходящую.
#var='-h 192.168.1.234 -u mqttuser -P mqttpassword'
#var='-h localhost -u mqttuser -P mqttpassword'
#var='-h localhost'
Код автоматизации:
{
"actions": [
{
"command": "#Скрипт показывающий offline устройства\n\n#Необходимо указать данные для подключения к mqtt c помощью mosquitto_sub\n#Примеры строк подключения, расскоментируйте и отредактируйте подходящую.\n#var='-h 192.168.1.234 -u mqttuser -P mqttpassword'\n#var='-h localhost -u mqttuser -P mqttpassword'\n#var='-h localhost'\n\n\nmosquitto_sub ${var} -t \"homed/device/zigbee/#\" -v --retained-only -W 30| awk -F'/' '/\"status\":\"offline\"/ {print \"📵 \" $NF}'",
"type": "shell"
},
{
"conditions": [
{
"equals": "_NULL_",
"pattern": "{{shellOutput}}",
"type": "pattern"
}
],
"else": [
{
"message": "{{shellOutput}}",
"type": "telegram"
}
],
"then": [
{
"message": "Выводить нечего",
"triggerName": "telegram",
"type": "telegram"
}
],
"type": "condition"
}
],
"note": "Выводит список оффлайн устройств.\nАвтоматизация для оповещения о появлении оффлайн устройств, тех что в веб-интерфейсе помечены красным.\n\n<p>\nСрабатывает 1 раз в час или сразу при написании в telegram команды \"offline\".\nСкорость ответа зависит от ответа mqtt и как правило бывает немоментальной.\n<p>\nОпрашивает mqtt ветку homed/device/zigbee/# на наличие оффлайн устройств.\nТребует настройки подключения к mqtt скрипта в разделе Actions.\n",
"restart": false,
"triggers": [
{
"message": "offline",
"name": "telegram",
"type": "telegram"
},
{
"interval": 60,
"type": "interval"
}
],
"conditions": []
}
Файл для импорта автоматизации: