Lüftung Standby Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Lüftung Standby Rule

Beitrag von PeterA »

Hallo zusammen,

im letzten Winter hatte ich für den Sommer folgende Rule geschrieben:

Code: Alles auswählen

rule "Aussenluft manuell"
when
    Item AussenTemp changed // LaCrosse Sensor
then
   if(Lueftung_min_max_Temp.state != ON) return;  // wenn Schalter aus(nicht an) , keine Aktionen
   
   if(!(AussenTemp.state instanceof Number)) {
        logWarn("Lüftung manuell","AussenTemp.state not a Number: {}",AussenTemp.state)  // numerisch ?
        return;
   }
   if (AussenTemp.state <= AussenGrenzMax_Set.state && FanStandby_Switch.state != OFF) {
       FanStandby_Switch.sendCommand(ON)
       logInfo("Lüftung manuell Stop","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state )
       
   }
   else if (AussenTemp.state >= AussenGrenzMin_Set.state && FanStandby_Switch.state != ON) {
       FanStandby_Switch.sendCommand(OFF)
       logInfo("Lüftung manuell Start","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state)
       
   }
end
Die Rule soll folgendes machen:

Wenn die AussenTemp über einem bestimmten Wert ist (hier 22C) dann soll die Lüftungsanlage in den Standby gehen.
Und wenn die AussenTemp wieder unter einen bestimmen Wert (18C) fällt, soll Standby wieder deaktiviert werden.

Irgendwie triggert die Rule aber nicht so wie ich mir das vorgestellt habe, bzw nur der letzte Teil triggerte gestern.
Und der Zeit sind es hier 28C AussenTemp....

LogInfo:

Code: Alles auswählen

2019-06-02 11:58:08.283 [vent.ItemStateChangedEvent] - AussenTemp changed from 28.4 to 28.3

2019-06-02 11:58:09.577 [ome.event.ItemCommandEvent] - Item 'FanStandby_Switch' received command OFF

2019-06-02 11:58:09.581 [nt.ItemStatePredictedEvent] - FanStandby_Switch predicted to become OFF

==> /var/log/openhab2/openhab.log <==

2019-06-02 11:58:09.591 [INFO ] [e.model.script.Lüftung manuell Start] - LuefterStufe ist jetzt: 1 AussenTemp beträgt 28.3

Achtung... wenn der FanStandby_Switch OFF ist ist die Lüftung wieder an und umgekehrt.....

Grüße Peter
- OpenHab 2.4
#PWRUP

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

Re: Lüftung Standby Rule

Beitrag von udo1toni »

Das eine ist der Enable Schalter, der die Ausführung der Rule verhindern kann (und soll), aber nicht geloggt wird.
Das zweite ist, dass Du nur einen der Vergleichswerte auf Gültigkeit prüfst.
Das dritte ist, dass Du besser die Werte zum Vergleich casten solltest.
Das letzte ist, dass Du den Zustand von FanStandby_Switch prüft, dann aber in die verkehrte Richtung schaltest - ansonsten müsste die Bedingung gedreht werden.

Code: Alles auswählen

rule "Aussenluft manuell"
when
    Item AussenTemp changed // LaCrosse Sensor
then
    if(Lueftung_min_max_Temp.state != ON) { // wenn Schalter aus(nicht an) , keine Aktionen
        logInfo("Lüftung manuell","Steuerung deaktiviert!")
        return;
    }
    if(!(AussenTemp.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenTemp.state not a Number: {}",AussenTemp.state)
        return;
   }
    if(!(AussenGrenzMax_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMax_Set.state not a Number: {}",AussenGrenzMax_Set.state)
        return;
   }
    if(!(AussenGrenzMin_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMin_Set.state not a Number: {}",AussenGrenzMin_Set.state)
        return;
   }
   if ((AussenTemp.state as Number) <= (AussenGrenzMax_Set.state  as Number) && FanStandby_Switch.state != OFF) {
       FanStandby_Switch.sendCommand(OFF)
       logInfo("Lüftung manuell Stop","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state )
   } else if ((AussenTemp.state  as Number) >= (AussenGrenzMin_Set.state  as Number) && FanStandby_Switch.state != ON) {
       FanStandby_Switch.sendCommand(ON)
       logInfo("Lüftung manuell Start","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state)
   }
end
Ach so... Da Du zwei Items für die Grenzwerte nutzt, musst Du sicherstellen, dass der obere Grenzwert jederzeit über dem unteren Grenzwert liegt. Einfacher wäre es, den Sollwert plus das Delta zu setzen, oder alternativ einen der beiden Grenzwerte plus das Delta, so kannst Du sehr einfach den erlaubten Bereich und ein erlaubtes Minimum und Maximum für das Delta setzen und musst dies nicht extra prüfen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Lüftung Standby Rule

Beitrag von PeterA »

Also hab das mal so übernommen.
Folgendes ist passiert:
Die Anlage war im Standby (weil draussen so heiss)
Also FanStandby_Switch ON (Wenn ON dann Anlage AUS)

Dann hat die Rule getriggert:

Code: Alles auswählen

2019-06-02 18:16:14.587 [vent.ItemStateChangedEvent] - AussenTemp changed from 30.4 to 30.3



2019-06-02 18:16:16.269 [ome.event.ItemCommandEvent] - Item 'FanStandby_Switch' received command OFF

==> /var/log/openhab2/openhab.log <==

2019-06-02 18:16:16.272 [INFO ] [me.model.script.Lüftung manuell Stop] - LuefterStufe ist jetzt: 0 AussenTemp beträgt 30.3

==> /var/log/openhab2/events.log <==

2019-06-02 18:16:16.277 [nt.ItemStatePredictedEvent] - FanStandby_Switch predicted to become OFF

2019-06-02 18:16:16.283 [vent.ItemStateChangedEvent] - FanStandby_Switch changed from ON to OFF
Da ist die Anlage wieder angegangen.... (Wenn FanStandby_Switch OFF dann Anlage AN)
Eigentlich hätte die Rule aber das Kommando FanStandy_Switch ON senden müssen weil der Sollwert für Stop ist auf 22 eingestellt....
- OpenHab 2.4
#PWRUP

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Lüftung Standby Rule

Beitrag von PeterA »

So ich hab mal die OFF/ON Befehle getauscht.
Das hat schon mal funktioniert:
AussenTemp war 27.9 und ist auf 27.8 gefallen.
AussenGrenzMax_Set ist auf 22C eingestellt
und
AussenGrenzMin_Set ist auf 18C eingestellt.
Demnach hats zum "Standby" der Anlage funktioniert.

Log:

Code: Alles auswählen

2019-06-02 20:31:16.298 [vent.ItemStateChangedEvent] - AussenTemp changed from 27.9 to 27.8

2019-06-02 20:31:17.903 [ome.event.ItemCommandEvent] - Item 'FanStandby_Switch' received command ON

==> /var/log/openhab2/openhab.log <==

2019-06-02 20:31:17.905 [INFO ] [me.model.script.Lüftung manuell Stop] - LuefterStufe ist jetzt: 1 AussenTemp beträgt 27.8

==> /var/log/openhab2/events.log <==

2019-06-02 20:31:17.911 [nt.ItemStatePredictedEvent] - FanStandby_Switch predicted to become ON

2019-06-02 20:31:17.917 [vent.ItemStateChangedEvent] - FanStandby_Switch changed from OFF to ON
Und hier noch mal die aktuelle Rule:

Code: Alles auswählen

rule "Aussenluft manuell"
when
    Item AussenTemp changed // LaCrosse Sensor
then
    if(Lueftung_min_max_Temp.state != ON) { // wenn Schalter aus(nicht an) , keine Aktionen
        logInfo("Lüftung manuell","Steuerung deaktiviert!")
        return;
    }
    if(!(AussenTemp.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenTemp.state not a Number: {}",AussenTemp.state)
        return;
   }
    if(!(AussenGrenzMax_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMax_Set.state not a Number: {}",AussenGrenzMax_Set.state)
        return;
   }
    if(!(AussenGrenzMin_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMin_Set.state not a Number: {}",AussenGrenzMin_Set.state)
        return;
   }
   if ((AussenTemp.state as Number) <= (AussenGrenzMax_Set.state  as Number) && FanStandby_Switch.state != ON) {
       FanStandby_Switch.sendCommand(ON)
       logInfo("Lüftung manuell Stop","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state )
       sendBroadcastNotification("Lüftung Gestoppt") //Pushnachricht
   } else if ((AussenTemp.state as Number) >= (AussenGrenzMin_Set.state  as Number) && FanStandby_Switch.state != OFF) {
       FanStandby_Switch.sendCommand(OFF)
       logInfo("Lüftung manuell Start","LuefterStufe ist jetzt: {} AussenTemp beträgt {}",LuefterStufe.state,AussenTemp.state)
       sendBroadcastNotification("Lüftung Gestartet") //Pushnachricht
   }
end
- OpenHab 2.4
#PWRUP

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

Re: Lüftung Standby Rule

Beitrag von udo1toni »

Wobei die Logik an der Stelle auch verkehrt ist. Wenn ich folgendes annehme:
Wenn Temperatur über Maximum, Standby ON, wenn Temperatur unter Minimum Standby OFF, dann müsste der Vergleich so aussehen:

Code: Alles auswählen

if ((AussenTemp.state as Number) >= (AussenGrenzMax_Set.state  as Number) && FanStandby_Switch.state != ON) {
       FanStandby_Switch.sendCommand(ON)
   } else if ((AussenTemp.state as Number) <= (AussenGrenzMin_Set.state  as Number) && FanStandby_Switch.state != OFF) {
       FanStandby_Switch.sendCommand(OFF)
   }
Ansonsten wird die Anlagen nur noch in Standby geschaltet, aber niemals wieder auf Normalbetrieb. DAS ist vermutlich der eigentliche Fehler (der mir aber auch durch gerutscht ist...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Lüftung Standby Rule

Beitrag von PeterA »

Hallo Udo,

vielen Dank für Deine Hinweise und Tipps! Jetzt funktioniert es.
(Jetzt mit einem anderen Item)

Thanx a lot!

Code: Alles auswählen

rule "Aussenluft manuell"
when
    Item LocalWeatherAndForecast_Current_OutdoorTemperature changed // LaCrosse Sensor
then
    if(Lueftung_min_max_Temp.state != ON) { // wenn Schalter aus(nicht an) , keine Aktionen
        logInfo("Lüftung manuell","Steuerung deaktiviert!")
        return;
    }
    if(!(LocalWeatherAndForecast_Current_OutdoorTemperature.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","LocalWeatherAndForecast_Current_OutdoorTemperature.state not a Number: {}",LocalWeatherAndForecast_Current_OutdoorTemperature.state)
        return;
   }
    if(!(AussenGrenzMax_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMax_Set.state not a Number: {}",AussenGrenzMax_Set.state)
        return;
   }
    if(!(AussenGrenzMin_Set.state instanceof Number)) {  // numerisch ?
        logWarn("Lüftung manuell","AussenGrenzMin_Set.state not a Number: {}",AussenGrenzMin_Set.state)
        return;
   }
   if ((LocalWeatherAndForecast_Current_OutdoorTemperature.state as Number) >= (AussenGrenzMax_Set.state  as Number) && FanStandby_Switch.state != ON) {
       FanStandby_Switch.sendCommand(ON)
       logInfo("Lüftung manuell Stop","LuefterStufe ist jetzt: {} LocalWeatherAndForecast_Current_OutdoorTemperature beträgt {}",LuefterStufe.state,LocalWeatherAndForecast_Current_OutdoorTemperature.state )
       sendBroadcastNotification("Lüftung Gestoppt") //Pushnachricht
   } else if ((LocalWeatherAndForecast_Current_OutdoorTemperature.state as Number) <= (AussenGrenzMin_Set.state  as Number) && FanStandby_Switch.state != OFF) {
       FanStandby_Switch.sendCommand(OFF)
       logInfo("Lüftung manuell Start","LuefterStufe ist jetzt: {} LocalWeatherAndForecast_Current_OutdoorTemperature beträgt {}",LuefterStufe.state,LocalWeatherAndForecast_Current_OutdoorTemperature.state)
       sendBroadcastNotification("Lüftung Gestartet") //Pushnachricht
   }
end
- OpenHab 2.4
#PWRUP

Antworten