Skip to content

Instantly share code, notes, and snippets.

@smerschjohann
Created April 1, 2015 19:45
Show Gist options
  • Save smerschjohann/6cbc81dcf1d24eb944cd to your computer and use it in GitHub Desktop.
Save smerschjohann/6cbc81dcf1d24eb944cd to your computer and use it in GitHub Desktop.
Example rule using generated triggers
class JalousienStateRule(Rule):
def __init__(self):
alle= ItemRegistry.getItem("JalousienState")
self.__eventTrigger = [StartupTrigger(), TimerTrigger("0 0/2 * * * ?")]
for jal in alle.getMembers():
self.__eventTrigger.append(ChangedEventTrigger(jal.getName(), None, None))
self.logger = oh.getLogger("JalousienState")
def updateState(self, item):
if not item:
alle = ItemRegistry.getItem("JalousienState")
for jal in alle.getMembers():
if jal:
self.updateState(jal)
else:
curState = unicode(item.state)
newState = -1
if curState.endswith("ffnet"):
newState = 0
elif curState == "Jalousie auf dem Weg nach unten":
newState = 30
elif curState == "Jalousien sind geschlossen":
newState = 100
elif curState == "Jalousien sind angehalten":
newState = 50
elif curState == "Jalousie auf dem Weg nach oben":
newState = 70
else:
print curState, "could not be converted"
if newState > -1:
stateItem = ItemRegistry.getItem(item.getName()[:-6])
if not stateItem:
print "what? this should not happen, item:", item
else:
equal = False
try:
equal = int(str(stateItem.state)) == newState
except Exception, e:
pass
if not equal:
oh.postUpdate(stateItem.name, str(newState))
def getEventTrigger(self):
return self.__eventTrigger
def execute(self, event):
if event.triggerType == TriggerType.STARTUP or event.triggerType == TriggerType.TIMER:
self.updateState(None)
elif event.triggerType == TriggerType.CHANGE:
self.updateState(event.item)
def getRules():
return RuleSet([
JalousienStateRule()
])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment