Триггер 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

Получаем

image

Далее в скриптах будет доступен объект 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;