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