Taupunkt / Dewpoint Berechnung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Taupunkt / Dewpoint Berechnung

Beitrag von Selter »

Hallo @udo1toni

ich versuche gerade Deine Rule vom 4. Feb 2021 14:25 anzupassen. Wäre prima, wenn Du mir weiterhelfen könntest ...

Bei mir werden über "KE_x_pow2_switch" 2 Lüfter geschaltet. "Ventilator_Decke_switch" habe ich daher entfernt bzw. auskommentiert und "Ventilator_Wand_switch" durch "KE_x_pow2_switch" erstetzt.

Wozu wird "Keller_Ventilation_Trigger" benötigt?
Reicht "KE_x_pow2_switch" nicht aus?


VScode gibt 2 Fehlermeldungen aus:

für

Code: Alles auswählen

 tVent = createTimer(now.plusMinutes(vent_dur), [|                                       // Timer anlegen

Code: Alles auswählen

Type mismatch: cannot convert from Number to long(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
und

Code: Alles auswählen

The method or field Keller_Ventilation_Trigger is undefined(org.eclipse.xtext.diagnostics.Diagnostic.Linking)

Code: Alles auswählen

var Timer tVent = null

val Number dehum_min        = 65 // unterer Grenzwert Luftfeuchtigkeit
val Number dehum_max        = 75 // oberer  Grenzwert Luftfeuchtigkeit
val Number dewpoint_min_gap =  5 // minimale Taupunktdifferenz Keller - Außen
val Number vent_dur         = 35 // Lüftungsdauer (nach xx min wird abgeschaltet) 

rule "Kellerentfeuchtung"
when
    Item Keller_Taupunkt changed or
    Item KE_s_XiaomiTemperatursensorC_Humidity changed or
    Item Keller_Ventilation_Trigger changed to ON
then
    val basement_hum = (KE_s_XiaomiTemperatursensorC_Humidity.state as Number).floatValue
    val dewpoint_gap = (Keller_Taupunkt.state as Number) - (Aussenbereich_Taupunkt.state as Number)

    
    var sollWand  = OFF                                                                         // Default Soll

    if(newState == ON) {                                                                        // Keller_Ventilation_Trigger AN
        
        sollWand  = ON                                                                          // Soll ändern
        tVent?.cancel                                                                           // laufenden Timer löschen
        tVent = createTimer(now.plusMinutes(vent_dur), [|                                       // Timer anlegen
            // Ventilator_Decke_switch.sendCommand(OFF)
            KE_x_pow2_switch.sendCommand(OFF)
            Keller_Ventilation_Trigger.postUpdate(OFF)
            tVent = null
        ])
    } else {                                                                                    // Rule nicht durch Taster getriggert
        if(basement_hum > dehum_max) {                                                          // Luftfeuchte Keller über Maximum
            
            if(dewpoint_gap > dewpoint_min_gap) {                                               // Taupunktdifferenz ok
                if(tVent === null) {                                                            // Falls kein Timer läuft
                    sollWand = ON                                                               // Soll ändern
                    tVent = createTimer(now.plusMinutes(vent_dur), [|                           // Timer anlegen
                        KE_x_pow2_switch.sendCommand(OFF)
                        tVent = null
                    ])
                }
            }
        } else if(basement_hum >= dehum_min) {                                                  // Werte innerhalb der Hysterese; kein Aktion
            return;
        }
    }
    if(KE_x_pow2_switch.state  != sollWand)                                               // Falls Abweichung vom Soll, schalten
        KE_x_pow2_switch.sendCommand(sollWand.toString)
end

Bezüglich "KE_s_XiaomiTemperatursensorC_Humidity" bin ich mir nicht sicher, ob das Zahlenformat für die Berechnung korrekt ist. Es wird z.B. "64.07%" angezeigt.
Das Item dazu ist:

Code: Alles auswählen

Number:Dimensionless    KE_s_XiaomiTemperatursensorC_Humidity
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

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

Re: Taupunkt / Dewpoint Berechnung

Beitrag von udo1toni »

Na, wenn Du den Thread als Ganzes betrachtest, wird Dir auffallen, dass das gar nicht meine Rule ist. Ich habe lediglich die zuvor gepostete Rule (die halt nicht wie gewünscht funktionierte) modifiziert.

Die Rule beruht auf vier Eingangssignalen, das sind der Taupunkt innen und außen, die Luftfeuchtigkeit im Raum und ein Taster.
Ist die Luftfeuchtigkeit zu hoch und die Taupunktdifferenz liegt über der minimalen Differenz, wird der Ventilator zur Entfeuchtung eingeschaltet.
Außerdem besteht über den Taster die Möglichkeit, den Ventilator manuell einzuschalten.
Ob man nun einen oder zwei Ventilatoren steuert ist natürlich egal, auch, ob man dazu nun einen oder zwei Aktoren braucht.

Eine modifizierte Rule (ohne die Möglichkeit, den Ventilator per Tastendruck von Hand zu starten) sähe so aus:

Code: Alles auswählen

rule "Kellerentfeuchtung"
when
    Item In_THSensor_Dew changed or
    Item In_THSensor_Hum changed 
then
    val basement_hum = (In_THSensor_Hum.state as Number).floatValue
    val dewpoint_gap = (In_THSensor_Dew.state as Number) - (Out_THSensor_Dew.state as Number)

    var sollVent  = OFF                                                                         // Default Soll

    if(basement_hum > dehum_max)                                                                // Luftfeuchte Keller über Maximum
       sollVent = ON                                                                            // Soll ändern
    else if(basement_hum >= dehum_min)                                                          // Werte innerhalb der Hysterese; kein Aktion
        return;

    if(dewpoint_gap < dewpoint_min_gap)                                                         // Taupunktdifferenz n. ok
       sollVent = OFF                                                                           // Soll ändern

    if(tVent === null && sollVent == ON)                                                        // Falls kein Timer läuft aber gebraucht wird
       tVent = createTimer(now.plusMinutes(vent_dur), [|                                        // Timer anlegen
           KE_x_pow2_switch.sendCommand(OFF)
           tVent = null
       ])

    if(KE_x_pow2_switch.state  != sollVent)                                                     // Falls Abweichung vom Soll, schalten
        KE_x_pow2_switch.sendCommand(sollVent.toString)
end
Die erste Fehlermeldung kommt zustande, weil in der Zwischenzeit Number nicht mehr automatisch nach Integer konvertiert wird (da gibt es auch einen guten Grund für, ist mir entfallen... ist ja auch egal... Man kann die Konstante auch einfach als Integer definieren. Die andere Fehlermeldung bezieht sich auf den Wandtaster, den es bei Dir halt nicht gibt.

Die Logik der Rule ist etwas gewöhnungsbedürftig, ich hab auch einen Moment gebraucht, durchzusteigen... Und ich denke, auch einen Fehler in der Logik gefunden zu haben, weshalb ich ein paar Zeilen etwas umgestellt habe.

Ausgangspunkt ist ein Sollwert OFF,
Ist die Luftfeuchte größer als die Obergrenze, wird der Sollwert auf ON geändert.
Andernfalls wird geprüft, ob der die Luftfeuchte über dem Minimalwert liegt. Ist das der Fall, bsteht kein Handlungsbedarf und die Rule wird abgebrochen,
Läuft die Rule noch, wird geprüft, ob der Taupunkt passt. Ist die Differenz zu klein (oder gar negativ) so wird der Sollwert wieder auf OFF geändert.
Nun wird geprüft, ob kein Timer läuft und der Sollwert ON ist. Ist das der Fall, so wird ein Timer angelegt, der den Ventilator nach der festgelegten Zeit ausschaltet.

Abschließend wird der Ventilator auf den Sollwert geschaltet.

Der Ventilator wird also auf jeden Fall nach der festgelegten Zeit ausgeschaltet und im Zweifel erst wieder gestartet, wenn es eine Änderung der Eingangswerte gibt. Wird die Untergrenze der Luftfeuchtigkeit unterschritten, so wird der Ventilator sofort ausgeschaltet.

Es ist gut denkbar, dass das Verhalten anders sein soll, dann müsste man auch die Rule anpassen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Taupunkt / Dewpoint Berechnung

Beitrag von Selter »

Hallo Udo,

ich hatte auch erst die Rule aus dem englischen Forum laufen. Aber scheinbar funktioniert die mit openHAB 3.x nicht mehr ...
Außerdem erscheint mir Deine Rule übersichtlicher.
Die erste Fehlermeldung kommt zustande, weil in der Zwischenzeit Number nicht mehr automatisch nach Integer konvertiert wird (
Ich habe "vent_dur" jetzt auf "int" gesetzt.

Code: Alles auswählen

val int vent_dur            = 35 // Lüftungsdauer (nach xx min wird abgeschaltet) 
Die Luftfeuchtigkeit für "basement_hum" multipliziere ich mit 100, damit die %-Werte korrekt verarbeitet werden:

Code: Alles auswählen

val basement_hum = KE_s_XiaomiTemperatursensorC_Humidity.state as QuantityType<Number> * 100
Und außerdem habe ich noch das Item "Keller_Ventilation_Trigger" angelegt.

Jetzt muss ich nur abwarten, bis die Taupunktdifferenz von aktuell 0,57 auf einen sinnvollen Wert geht, damit die Lüftung dann hoffentlich anspringt.
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

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

Re: Taupunkt / Dewpoint Berechnung

Beitrag von udo1toni »

Selter hat geschrieben: 16. Apr 2023 16:50 Ich habe "vent_dur" jetzt auf "int" gesetzt.
Oh, ich dachte, ich hätte die Definition mit übernommen... Mach bitte Integer statt int. int ist ein Primitive, was hier zwar keine Rolle spielt, aber es benötigt ungleich mehr Rechenzeit beim Start des Systems (behaupte ich jetzt einfach, jemand hatte dazu mal eingehende Messungen vorgenommen...) Ich meine, rlkoshak aus dem englischen Forum hat dazu mal was geschrieben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Taupunkt / Dewpoint Berechnung

Beitrag von Selter »

Ok, danke für den Hinweis.

Dann also so:

Code: Alles auswählen

val Integer vent_dur            = 35 // Lüftungsdauer (nach xx min wird abgeschaltet) 
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

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

Re: Taupunkt / Dewpoint Berechnung

Beitrag von udo1toni »

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

Antworten