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.
Limitations:
Iāve seen situations where this rule will throw a bunch of exceptions during startup as it gets ponded with Things coming into existence and initializing. Once runlevel 100 is reached the rule works as expected. If you see this you can do the following:
- Create a Runlevel Number Item
- Create a rule that triggers at system runlevel 40
- Add an Item Action and update the Runlevel Item to 40
- Repeat 2-3 for runlevels 50-100.
- Add a condition to this rule to not run unless the runlevel is >=100.
Iām looking into a rule template that will enable/disable rules based on the runlevel reached so stay tuned to the marketplace. See Delay Start [4.0.0.0;4.9.9.9].
Language: JS Scripting (ECMAScript 2021 with the openhab-js helper library injection enabled)
Dependencies:
- OH 4.0.0 +
- JS Scripting add-on installed
- openhab-js 4.1.0 or later
- openhab_rules_tools 2.0.1 or later
Changelog
Version 0.2
- throws an exception of openhab-js or openhab_rules_tools are not new enough
Version 0.1
- initial release