A rule that triggers when a Thing changes its status and calls a user defined rule with the Thing and information about the Thing. The conditions of the called script are enforced so events can be filtered there (e.g. only process changes from ONLINE to some other status).
The following properties are passed to the called rule:
Property | Contents |
---|---|
thingID |
The UID of the Thing that changed status |
oldStatus |
The status the Thing was in before the change |
oldDetail |
Some Thing statuses have additional detail. For example, a Thing that has been disabled would have a status of UNINITIALIZED with detail DISABLED . If there is no detail, it will be āNONEā. |
newStatus |
The status the Thing changed to. |
newDetail |
The detail the Thing changed to, or NONE . |
thing |
The actual JS Scripting Thing Object (see Thing - Documentation) |
The original Java Thing Object can be reached through thing.rawThing
. The Most of the properties besides the thing
are included to make writing the rule called by this one easier to write in Blockly.
Additional conditions can be placed on this rule or on the called rule to further limit when it runs (e.g. donāt run at night).
Feel free to customize this rule as much as desired to meet your needs. You could even replace the code that calls your rule and put that processing inline.
An important note, this version works significantly differently from the older OH 3.x version of the rule template. But it works much closer to how I envisioned the original one to work in the first place but didnāt know how to configure the trigger properly.
Language: JS Scripting (ECMAScript 2021 with the openhab-js helper library injection enabled)
Dependencies:
- OH 4.0.0 +
- JS Scripting add-on installed
Changelog
Version 0.1
- initial release
Resources
uid: rules_tools:thing_status
label: Thing Status Reporter
description: Calls a user supplied script when a Thing changes it's status.
configDescriptions:
- name: script
label: Rule to call
description: Rule to call when one or more Things match the comparison.
type: TEXT
context: rule
required: true
triggers:
- id: "1"
label: GenericEventTrigger
description: GenericEventTrigger with filter
configuration:
eventSource: ""
eventTopic: openhab/things/*
eventTypes: ThingStatusInfoChangedEvent
type: core.GenericEventTrigger
conditions: []
actions:
- inputs: {}
id: "2"
configuration:
type: application/javascript
script: |
console.loggerName = 'org.openhab.automation.rules_tools.Thing Status';
console.debug('ThingStatusInfoChangedEvent:' + event.toString());
var parsed = JSON.parse(event.payload);
var data = {};
data['thingID'] = event.topic.split('/')[2];;
data['thing'] = things.getThing(data['thingID']);
data['oldStatus'] = parsed[1].status;
data['oldDetail'] = parsed[1].statusDetail;
data['newStatus'] = parsed[0].status;
data['newDetail'] = parsed[0].statusDetail;
rules.runRule("{{script}}", data, true);
type: script.ScriptAction