I start now to add the Ivan’s Helper Libraries to my openhab 3 environement.
mostly of all works well but module joda is requested if I fire the script. I learned that it doesn’t work anymore and must be changed to zoned.
But I don’t use any time request in my routine.
from core.rules import rule
from core.triggers import when
from core import osgi
@rule(“Monitor CavitiyTemperature”,
description=“Enable/disable rules based on the state of the CavitiyTemperature”,
tags=[“CavitiyTemperature”]) @when(“Item SW_Monitor_CavitiyTemperature changed”) @when(“System started”)
def SW_Monitor_CavitiyTemperature(event):
SW_Monitor_CavitiyTemperature.log.info("Turning {} Monitor CavitiyTemperature"
.format(items["SW_Monitor_CavitiyTemperature"]))
Monitor_CavitiyTemperature_RuleId = [rule for rule in rules.getAll()
if rule.name == "Backofen - MonitorRule Status Zieltemperatur"][0].UID
ruleEngine = (osgi.get_service("org.openhab.core.automation.RuleManager") or
osgi.get_service("org.eclipse.smarthome.automation.RuleManager"))
ruleEngine.setEnabled(Monitor_CavitiyTemperature_RuleId, items["SW_Monitor_CavitiyTemperature"])
Error :
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID ‘573f480393’ failed: ImportError: No module named joda in at line number 2
It looks for me that the import of the core.trigger request the joda module but not needed into the the event itself.
Make sure you’ve grabbed the right branch of the helper library. One of the breaking changes between OH 2.5 and 3.0 was removal of Joda. You need the “ivans-updates” branch.
Now I run into the next problem where I can’t find any hint how to solve - only that it come up with OH 3.2 and all who posted it switch back to OH 3.1. Thats not a “real” solution for me.
2022-04-08 17:41:09.689 [WARN ] [jython ] - Traceback (most recent call last):
File "/etc/openhab/automation/lib/python/core/log.py", line 96, in wrapper
return function(*args, **kwargs)
File "/etc/openhab/automation/lib/python/core/rules.py", line 108, in execute
self.callback(inputs.get('event'))
File "<script>", line 15, in SW_Monitor_CavitiyTemperature
IndexError: index out of range: 0
rule is posted in the first post here. Nothing changed.
Update: I’m some steps forward. I saw a thread with a discussion about item and itemname - in result it looks like that it doesn’t work - if I remove the select of the RuleID - it’s from my point of view simular and in result the error is gone and the script works in parts. Only the ON / OFF of the item state must be switch to boolean.
This is the corrected script, could be interest someone else.
After some changes I will update the solution with the working version. There are some more changes necessary.
from core.rules import rule
from core.triggers import when
from core import osgi
@rule("Monitor CavitiyTemperature",
description="Enable/disable rules based on the state of the CavitiyTemperature",
tags=["CavitiyTemperature"])
@when("Item SW_Monitor_CavitiyTemperature changed")
@when("System started")
def RU_Monitor_CavitiyTemperature(event):
import time
time.sleep(30) # Wait until all Rules are loaded
RU_Monitor_CavitiyTemperature.log.info("Turning {} Monitor CavitiyTemperature"
.format(items["SW_Monitor_CavitiyTemperature"]))
ruleEngine = (osgi.get_service("org.openhab.core.automation.RuleManager") or
osgi.get_service("org.eclipse.smarthome.automation.RuleManager"))
if items["SW_Monitor_CavitiyTemperature"] == ON:
ruleEngine.setEnabled("c9d604d91b", True)
elif items["SW_Monitor_CavitiyTemperature"] == OFF:
ruleEngine.setEnabled("c9d604d91b", False)
This routine enable and disable based on a switch a dsl rule. It’s needed to trigger a device only in special situations.
With many thanks and respect for the creators of the helper library ! Often this will be forgot but without guys who spend a lot of time for find solutions like this a lot of possibilities are not there. Also Rich and all other who helps guys like me