[Rules DSL] Get item from string name!

Thanks to this post and little more digging, I’ve got this rule working.

In short, it keeps an eye on gMinute and gHour groups, so that minutes and hours are constrained, but also that when the minutes exceed the limits, it adjusts the coresponidng hour

I’ve left the logInfo lines in so you can see my working out.

import org.openhab.core.model.script.ScriptServiceUtil

rule "Confine Minute"

when	
	Member of gMinute changed
then
	
	   logInfo("Minute Limiting", "Minute Value of "+triggeringItem.name+" Currently "+triggeringItem.state)
	
	if (triggeringItem.state > 59) {
	
	sendCommand(triggeringItem.name,"0")
//	logInfo("Alarm Times",triggeringItem.name.split('Min').get(0)+"Hour")
	
	var HourName = ""
	HourName = triggeringItem.name.split('Min').get(0)+"Hour"
		logInfo("Alarm Times",HourName)
		
	var Number HourValue = 0
	HourValue = ScriptServiceUtil.getItemRegistry.getItem(HourName).state
	logInfo("Alarm Times","Hour is currently " + HourValue)
	
	
	var Number NewHour = 0
	NewHour=1 + HourValue
		logInfo("Alarm Times","New Hour value is " + NewHour)
		
		




						sendCommand(HourName, NewHour.toString)
	}
	
	
	
	
	
		if (triggeringItem.state < 0) {
	
	sendCommand(triggeringItem.name,"45")

	
	var HourName = ""
	HourName = triggeringItem.name.split('Min').get(0)+"Hour"
		logInfo("Alarm Times",HourName)
		
	var Number HourValue = 0
	HourValue = ScriptServiceUtil.getItemRegistry.getItem(HourName).state
	logInfo("Alarm Times","Hour is currently " + HourValue)
	
	
	var Number NewHour = 0
	NewHour=HourValue -1 
		logInfo("Alarm Times","New Hour value is " + NewHour)
		
		




						sendCommand(HourName, NewHour.toString)

	}
	
end


rule "Confine Hour"

when	
	Member of gHour changed
then
	
	   logInfo("Hour Limiting", "Hour Value of "+triggeringItem.name+" Currently "+triggeringItem.state)
	
	if (triggeringItem.state > 23) {
	
	sendCommand(triggeringItem.name,"0")
//		logInfo("Alarm Times",triggeringItem.name.split('Hou').get(0))
	}
	
		if (triggeringItem.state < 0) {
	
	sendCommand(triggeringItem.name,"23")
//		logInfo("Alarm Times",triggeringItem.name.split('Hou').get(0))
	}
	
end
1 Like