That did the trick, but couldn’t it just be an argument that is passed when calling?
Anyway, the startup trigger doesn’t seem to work. I have created this sample class:
class SampleRule(SimpleRule):
_logger = LoggerFactory.getLogger("org.eclipse.smarthome.automation.examples")
_configName = ""
def __init__(self, configName):
self.triggers = [ ]
self._configName = configName
def getLogger(self):
return self._logger
def AddItemStateUpdateTrigger(self, itemName):
self.getLogger().info("Adding ItemStateUpdateTrigger for item '" + itemName + "'")
triggerName = itemName
self.triggers.append(ItemStateUpdateTrigger(itemName, None, triggerName))
def AddItemStateChangeTrigger(self, itemName):
self.getLogger().info("Adding ItemStateChangeTrigger for item '" + itemName + "'")
triggerName = itemName
self.triggers.append(ItemStateChangeTrigger(itemName, None, triggerName))
def AddItemCommandTrigger(self, itemName):
self.getLogger().info("Adding ItemCommandTrigger for item '" + itemName + "'")
triggerName = itemName
self.triggers.append(ItemCommandTrigger(itemName, None, triggerName))
def AddItemEventTrigger(self, eventSource, eventType, eventTopic, triggerName):
self.getLogger().info("Adding ItemEventTrigger for eventSource '" + eventSource + "'")
self.triggers.append(ItemEventTrigger(eventSource, eventType, eventTopic, triggerName))
def AddStartupTrigger(self, triggerName):
self.getLogger().info("Adding StartupTrigger '" + triggerName + "'")
openhab.STARTUP_MODULE_ID = "jsr223.StartupTrigger"
self.triggers.append(StartupTrigger(triggerName))
def AddCronTrigger(self, triggerName, cronExpression = EVERY_MINUTE):
self.getLogger().info("Adding CronTrigger '" + triggerName + "' with schedule='" + cronExpression + "'")
self.triggers.append(CronTrigger(cronExpression, triggerName))
def execute(self, module, input):
self.getLogger().info("[" + self._configName + "] Executing Trigger.....")
If I Initialize like below, the StartupTrigger nor the CronTrigger will run (haven’t checked the others):
sr = SampleRule("MyTriggerConfig")
sr.AddStartupTrigger("MyStartupTrigger")
sr.AddCronTrigger("MyCronTrigger", EVERY_FIVE_SECONDS)
sr.AddItemStateUpdateTrigger("TriggerItem1")
sr.AddItemStateChangeTrigger("TriggerItem2")
sr.AddItemCommandTrigger("TriggerItem3")
automationManager.addRule(sr)
If I instead does like here below, the CronTrigger runs fine, but StartupTrigger doesn’t run at all (the others haven’t been tested) :
sr1 = SampleRule("StartupTriggerConfig")
sr = SampleRule("OtherTriggerConfig")
sr1.AddStartupTrigger("MyStartupTrigger")
sr.AddCronTrigger("MyCronTrigger", EVERY_FIVE_SECONDS)
sr.AddItemStateUpdateTrigger("TriggerItem1")
sr.AddItemStateChangeTrigger("TriggerItem2")
sr.AddItemCommandTrigger("TriggerItem3")
automationManager.addRule(sr1)
automationManager.addRule(sr)
It looks like the StartupTrigger is registered to late, and thus never called? And that is does at least cause CronTrigger not to run.
This isn’t really a big problem to me, just an observationthat might be usefull to others…