Seite 1 von 1

Rule Funktioniert nicht richtig

Verfasst: 18. Mär 2019 20:34
von isostar1101
Guten Abend,

kann sich mal einer diese Rule anschauen, sie schaltet sich immer ab? Danke Euch

Code: Alles auswählen

rule "Beleuchtung bei Dunkelheit an und es zw. 5 und 23Uhr"
	when 
		        Time cron "0 0/15 * * * ?"	
	then
		
        var CurrentHour = now.getHourOfDay
		if ((CurrentHour >=5 && CurrentHour <23) && Elevation.state <=0 && Onlineschaltung.state == ON)  Beleuchtung.sendCommand(ON)
		else Beleuchtung.sendCommand(OFF)
end

Re: Rule Funktioniert nicht richtig

Verfasst: 19. Mär 2019 09:33
von udo1toni
Na ja, vielleicht ist ja immer irgendeine Eigenschaft nicht erfüllt (auch wenn Dir das so scheint). Ein wenig Logging (und ordentliche Formatierung des Codes) täte gut:

Code: Alles auswählen

rule "Beleuchtung bei Dunkelheit an und aus zw. 5 und 23 Uhr"
when
    Time cron "0 0/15 * * * ?"
then
    val CurrentHour = now.getHourOfDay
    logInfo("autoswitch","Stunde {}",CurrentHour)
    logInfo("autoswitch","Onlineschaltung {}",Onlineschaltung.state)
    if(!(Elevation.state instanceof Number)) {
        logError("autoswitch","Elevation nicht vom Typ Number! {}",Elevation.state)
        return;
    }
    logInfo("autoswitch","Elevation {}",Elevation.state)
    var String myState = "OFF"
    if (CurrentHour > 4 && CurrentHour < 23 && (Elevation.state as Number) <= 0 && Onlineschaltung.state == ON)
        myState = "ON"
    if(Beleuchtung.state.toString != myState) Beleuchtung.sendCommand(myState)
end
Ein paar Änderungen habe ich auch noch einfließen lassen. val statt var: Da CurrentHour sich über die Laufzeit der Rule nicht ändert, reicht es, den Wert als Konstante zu speichern. logInfo() gibt die sicheren Werte aus. Der log-Kontext heißt dann org.openhab.model.script.autoswitch (oder doch noch org.eclipse.smarthome.model.script.autoswitch? kommt auf die Version von openHAB an)
Bei Elevation gibt es eine mögliche Fehlerquelle, weshalb die Rule dann auch ein logError() verwendet und die Rule beendet, sollte Elevation unerwarteter Weise nicht vom Typ Number sein. Es gibt aber noch eine weitere Möglichkeit, nämlich dass Elevation einheitenbehaftet ist, also z.B. 0° statt 0 herauskommen. Dann müsste der Vergleich geändert werden zu

Code: Alles auswählen

if (CurrentHour > 4 && CurrentHour < 23 && (Elevation.state as Number).floatValue <= 0 && Onlineschaltung.state == ON)
Das ist auch der wahrscheinlichste Grund, warum der Vergleich nicht korrekt funktioniert.
Nun wird der neue Sollwert gesetzt, default ist OFF, falls alle Bedingungen erfüllt sind aber ON.
Anschließend - und das ist der größte Unterschied - sendet openHAB den Befehl nur, falls sich der Status vom Soll unterscheidet. Du möchtest nicht viertelstündlich einen Befehl schicken, der eigentlich unnötig ist.

Re: Rule Funktioniert nicht richtig

Verfasst: 19. Mär 2019 17:05
von isostar1101
Hallo Udo-Toni,


Danke dir ich versuche es gleich mal, wie immer TOP-Anleitung und Erklärung, Danke..... eine Frage habe ich noch zum zweiten Teil deiner Antwort, ich verstehe es so das ich den Cronjob alle 15Minuten einsparen kann? die Rule prüft dann auf Elevation.state <= 0 und auf Onlineschaltung.state == ON nur was triggert dann die Rule an?

Danke vG. Isostar1101

Re: Rule Funktioniert nicht richtig

Verfasst: 19. Mär 2019 17:44
von udo1toni
isostar1101 hat geschrieben: 19. Mär 2019 17:05 ich verstehe es so das ich den Cronjob alle 15Minuten einsparen kann?
Nein, das habe ich nicht gemeint. Schau Dir die Rule genau an, in der letzten Zeile sendet die Rule nicht einfach den Sollstatus, vorher wird geprüft, ob das Item schon diesen Status hat. Nur wenn sich Soll und Ist unterscheiden, wird der Befehl gesendet.

Re: Rule Funktioniert nicht richtig

Verfasst: 22. Mär 2019 15:25
von isostar1101
Danke Udo-Toni und schönes Wochenende.

Re: Rule Funktioniert nicht richtig

Verfasst: 22. Mär 2019 22:01
von udo1toni
gerne :)