Rule Funktioniert nicht richtig

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Rule Funktioniert nicht richtig

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule Funktioniert nicht richtig

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Rule Funktioniert nicht richtig

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule Funktioniert nicht richtig

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Rule Funktioniert nicht richtig

Beitrag von isostar1101 »

Danke Udo-Toni und schönes Wochenende.

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule Funktioniert nicht richtig

Beitrag von udo1toni »

gerne :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten