Wichtig ist zuerst einmal, dass alle imports und globale Variablen außerhalb der eigentlichen Rule, und zwar vor der ersten Rule in der Datei definiert werden.
if(equal) wird mit zwei Gleichheitszeichen geschrieben
Weiterhin fehlt noch die Abschaltbedingung (wenn UEBERGREIFEND_Laden auf OFF wechselt und aktLeistungberechnet.state kleiner 2500 dann abschalten)
Es gibt eigentlich auch keinen Grund, das Ganze in einer Rule abzuwickeln, das macht die Abfragen innerhalb der Rule nur unnötig kompliziert, um alle Fälle korrekt zu berücksichtigen.
Das Triggern auf update ist in diesem Fall auch ungünstig, die Rule soll ja nur bei Wertänderungen reagieren.
Bleibt noch zu erwähnen, dass, falls die berechnete Leistung über 2500 liegt, wenn UEBERGREIFEND_Laden auf OFF wechselt, die Ladeeinheit erst abgeschaltet wird, wenn die zweite Rule greift (also bei Sinken der berechneten Leistung unter -500), und dann mit Verzögerung.
if(equal) wird mit zwei Gleichheitszeichen geschrieben
Weiterhin fehlt noch die Abschaltbedingung (wenn UEBERGREIFEND_Laden auf OFF wechselt und aktLeistungberechnet.state kleiner 2500 dann abschalten)
Es gibt eigentlich auch keinen Grund, das Ganze in einer Rule abzuwickeln, das macht die Abfragen innerhalb der Rule nur unnötig kompliziert, um alle Fälle korrekt zu berücksichtigen.
Das Triggern auf update ist in diesem Fall auch ungünstig, die Rule soll ja nur bei Wertänderungen reagieren.
Code:
import org.joda.time.DateTime var Timer Timerladeeinheit= null rule "Laden erzwingen" when Item UEBERGREIFEND_Laden changed then if (UEBERGREIFEND_Laden.state==ON) { sendCommand(UEBERGREIFEND_Ladeeinheit, ON) if (Timerladeeinheit!=null) { Timerladeeinheit.cancel Timerladeeinheit = null } } else if (aktLeistungberechnet.state < 2500) //Typo korrigiert sendCommand(UEBERGREIFEND_Ladeeinheit, OFF) end rule "Laden automatisch" when Item aktLeistungberechnet changed then if (UEBERGREIFEND_Laden.state==OFF) { if (aktLeistungberechnet.state > 2500) { sendCommand(UEBERGREIFEND_Ladeeinheit, ON) if (Timerladeeinheit!=null) { Timerladeeinheit.cancel Timerladeeinheit = null } } else if (aktLeistungberechnet.state < -500 && Timerladeeinheit==null) { //Typo korrigiert Timerladeeinheit = createTimer(now.plusSeconds(300)) [| sendCommand(UEBERGREIFEND_Ladeeinheit, OFF) ] } } end
Kommentar