Simulates presence by playing back Item states from the default persistence from a number of days ago commanding the devices so they behave the same way, simulating presence.
Parameter
Type
Purpose
Enable Simulation
Switch Item
Switch Item which, when OFF, will trigger the simulator rule to run. OFF was chosen to make it easier to tie the rule to an Item that tracks presence.
Simulation Items Group
Group Item
Group whose members are those Items that should be included in the presence simulation. All these Items must support commands (e.g. no Contact Items) and their states must be saved by the default persistence (e.g. no String Items if using rrd4j).
Num Days
integer
The number of days in the past to simulate the behavior from. It’s best to choose a multiple of 7 to correctly capture different behaviors between work days and weekends.
Minutes
integer
How many minutes between runs of the rule.
This template is a rewrite of the version written for 3.x to take advantage of new features built into OH 4 and to use JS Scripting.
Language: JS Scripting Scripting with openhab-js 4.0
Dependencies:
Persistence is installed and configured and the default persistence saves the states of the Items that are to be simulated.
openhab-js 4.1.0 or later
openhab_rules_tools 2.0.1 or later
Changelog
Version 0.2
throws an exception if openhab-js or openhab_rules_tools is too old
Version 0.1
initial release
Sponsorship
If you want to send a tip my way or sponsor my work you can through Sponsor @rkoshak on GitHub or PayPal. It won’t change what I contribute to OH but it might keep me in coffee or let me buy hardware to test out new things.
Open a new thread to go over what ever the problem is with installing the marketplace. Fixing that is outside the scope of this thread and I have no idea what the problem can be.
I use OH 4.0.2 and just see this rule template to install when I enable unpublished Add-Ons in Community Marketplace Add-Ons. And then I get a warning if I really want to install.
Is it safe to install and use? Installed openhab-js version is 4.0.2
You should be seeing commands and where applicable changes in events.log.
There is very little logging in the rule itself. There’s a debug if the rule decides not to command the Item if it’s already in the desired state and a warning level log if there is no data in persistence to play back.
You can change the logging level of the rule in all the usual ways or by editing the Script Action to change line 4 and uncommenting it out. You can also add additional log statements or make any other changes desired.
I just did found out in openhab.log, that I get this error when to rule tries to start.
2023-09-16 17:55:00.292 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID ‘cc3bac37a8’ failed: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (getMembers) on org.openhab.core.library.items.SwitchItem@183530b failed due to: Unknown identifier: getMembers
2023-09-16 18:00:00.277 [ERROR] [b.automation.script.javascript.stack] - Failed to execute script:
org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (getMembers) on org.openhab.core.library.items.SwitchItem@183530b failed due to: Unknown identifier: getMembers
at .get members(@openhab-globals.js:2) ~[?:?]
However how can the persistence service be specified in the rule if it is different than the default?
Perhaps this can be added to the rule parameters?
Note, the number will be what you configured when you created the rule and may be different from 7. And use the name of the persistence you want to use if it’s not rrd4j.
Hi there, A simple simple but very effective script, thanks a lot!
I have one question: The script currently seems to interact with another functionality I had planned ina funny way: I wanted to implement a rule that, when I activate any of our PNX touch sensors, switches the house to the “People present” state. (We have a dedicated touch button for that, too, but my wife often forgets to press it. And we have no presence sensors.)
Now with the presence simulation active, that rule would mistake the trigger from that simulation script for an activation through the touch sensor, Thus I wonder: is there any way for a script to figure out where a state update was sent from? E.g. can I figure out whether it came from the KNX binding or your presence simulation script? Or could I extend the script to piggyback some metadata into the state update that would carry over that information?