Триггер ThingStatusInfoChangedEvent (глобальное отслеживание статуса) - d51x/openhab-docs-russian GitHub Wiki
Для правил существует триггер, который срабатывает когда любой Thing меняет статус.
Через UI его выбрать нельзя, но его можно прописать через yaml.
Создаем новое правило.
Сразу переходим на вкладку code.
Видим triggers: {}
и заменяем на
triggers:
- id: "1"
label: A Thing Changes Status
description: Triggers when any Thing changes status
configuration:
types: ThingStatusInfoChangedEvent
payload: ""
topic: openhab/things/**
source: ""
type: core.GenericEventTrigger
Получаем
Далее в скриптах будет доступен объект event
, содержаший строку
Thing 'tuya:tuyaDevice:00684005500291d49797' changed from ONLINE to OFFLINE
Так же доступен объект event.topic
с содержимым
openhab/things/wled:json:wled2/statuschanged
Так же доступен объект event.payload
с содержимым
[
{
"status":"ONLINE",
"statusDetail":"NONE"
},
{
"status":"OFFLINE",
"statusDetail":"NONE"
}
]
[
{
"status":"OFFLINE",
"statusDetail":"COMMUNICATION_ERROR",
"description":"ExecutionException: java.net.NoRouteToHostException: No route to host"
},
{
"status":"OFFLINE",
"statusDetail":"COMMUNICATION_ERROR",
"description":"TimeoutException: WLED was not reachable on your network"
}
]
Все это можно распарсить по переменным и использовать, что и сделано было в Rule Template: Thing Status Reporting
var payload= JSON.parse(event.payload);
var thingID = event.topic.split('/')[2]; // thing uid
var thing = things.getThing(thingID); // thing object
var oldStatus = payload[1].status;
var oldDetail = payload[1].statusDetail;
var newStatus = payload[0].status;
var newDetail = payload[0].statusDetail;