You’re right. I realized just today that I didn’t share any details on that one. It’s a small helper class to hide the boilerplate details of the trigger creation. I included it using the mechanism already mentioned & linked above.
import org.openhab.core.automation.Trigger
import org.openhab.core.automation.module.script.rulesupport.shared.simple.SimpleRule
import org.openhab.core.automation.util.TriggerBuilder
import org.openhab.core.config.core.Configuration
import org.slf4j.LoggerFactory
class RuleHelper {
static LOGGER = LoggerFactory.getLogger("org.mortalsilence.net.openhab.rules.rulehelper")
static void cronTrigger(SimpleRule rule, String id, String cronExpression) {
rule.setTriggers([createCronTrigger(id, cronExpression)])
}
static Trigger createCronTrigger(String triggerId, String cronExpression) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("timer.GenericCronTrigger")
.withConfiguration(new Configuration(["cronExpression": cronExpression]))
.build()
}
static void itemChangedTrigger(SimpleRule rule, String id, String itemName) {
rule.setTriggers([createItemStateChangeTrigger(id, itemName)])
}
static Trigger createItemStateChangeTrigger(String id, String itemName) {
TriggerBuilder.create()
.withLabel(id)
.withId(id)
.withTypeUID("core.ItemStateChangeTrigger")
.withConfiguration(new Configuration([itemName: itemName]))
.build()
}
static void itemAnyCommandTrigger(SimpleRule rule, String triggerId, String itemName) {
rule.setTriggers([createAnyCommandTrigger(triggerId, itemName)])
}
static Trigger createAnyCommandTrigger(String triggerId, String itemName) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("core.ItemCommandTrigger")
.withConfiguration(new Configuration([itemName: itemName]))
.build()
}
static void channelTrigger(SimpleRule rule, String id, String channel, String value) {
rule.setTriggers([
TriggerBuilder.create()
.withLabel(id)
.withId(id)
.withTypeUID("core.ChannelEventTrigger")
.withConfiguration(new Configuration([channelUID: channel, "event": value]))
.build()
])
}
static void itemCommandTrigger(SimpleRule rule, String id, String itemName, String command) {
rule.setTriggers([
TriggerBuilder.create()
.withLabel(id)
.withId(id)
.withTypeUID("core.ItemCommandTrigger")
.withConfiguration(new Configuration([itemName: itemName, "command": command]))
.build()
])
}
static void itemUpdatedToTrigger(SimpleRule rule, String id, String itemName, String state) {
rule.setTriggers([
TriggerBuilder.create()
.withLabel(id)
.withId(id)
.withTypeUID("core.ItemStateUpdateTrigger")
.withConfiguration(new Configuration([itemName: itemName, "state": state]))
.build()
])
}
static void itemChangedToTrigger(SimpleRule rule, String triggerId, String itemName, String newState) {
rule.setTriggers([createItemChangedToTrigger(triggerId, itemName, newState)])
}
static Trigger createItemChangedToTrigger(String triggerId, String itemName, String newState) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("core.ItemStateChangeTrigger")
.withConfiguration(new Configuration([itemName: itemName, state: newState]))
.build()
}
static void itemUpdatedTrigger(SimpleRule rule, String triggerId, String itemName) {
rule.setTriggers([createItemUpdatedTrigger(triggerId, itemName)])
}
static Trigger createItemUpdatedTrigger(String triggerId, String itemName) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("core.ItemStateUpdateTrigger")
.withConfiguration(new Configuration([itemName: itemName]))
.build()
}
static Trigger createItemChangedFromToTrigger(String triggerId, String itemName, String previousState, String newState) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("core.ItemStateChangeTrigger")
.withConfiguration(new Configuration([itemName: itemName, previousState: previousState, state: newState]))
.build()
}
static void commandTrigger(SimpleRule rule, String triggerId, String itemName, String command) {
rule.setTriggers([createCommandTrigger(triggerId, itemName, command)])
}
static Trigger createCommandTrigger(String triggerId, String itemName, String command) {
TriggerBuilder.create()
.withLabel(triggerId)
.withId(triggerId)
.withTypeUID("core.ItemCommandTrigger")
.withConfiguration(new Configuration([itemName: itemName, "command": command]))
.build()
}
}