Rule ändert Setpoint Item nicht zuverlässig

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
denni
Beiträge: 24
Registriert: 4. Sep 2019 15:25
Answers: 0

Rule ändert Setpoint Item nicht zuverlässig

Beitrag von denni »

Hallo zusammen,

ich habe ein MQTT Thing/Item definiert, dass ich einerseits über einen Setpoint in der Sitemap ändern kann, aber in einem bestimmten Fall dieses Item auch automatisiert anpassen lassen will.

.things

Code: Alles auswählen

Thing mqtt:topic:Pumpe		"Pumpe" (mqtt:broker:MosquittoBroker) @ "Kategorie" {
	Channels:
                       Type number : Pumpenleistung   "Pumpenleistung"	 [ stateTopic="Pumpe/Steuerung/Pumpenleistung", commandTopic="Pumpe/Steuerung/Pumpenleistung/set"]
                       Type number : temperatur	            "temperatur"		 [ stateTopic="Pumpe/broadcast/temperatur"]

}
.items

Code: Alles auswählen

Number Pumpenleistung   "Pumpenleistung"     { channel="mqtt:topic:Pumpe:Pumpenleistung" }
Number temperatur "temperatur [%.1f]"               { channel="mqtt:topic:Pumpe:temperatur" }
Switch Manuellerbetrieb
Switch LeistungCase
.sitemap

Code: Alles auswählen

Switch item=Manuellerbetrieb label="Manuelle Einstellung" mappings=[OFF="OFF", ON="ON"] icon="settings"
Setpoint item=Pumpenleistung label="Leistungsregelung [%.0f]" minValue=30 maxValue=60 step=5 icon=pump
.rules

Code: Alles auswählen

rule "Automatik Pumpenleistung in Abhängigkeit zur Temperatur steuern"

when
    Time cron "0 0/1 * * * ?"
 then

    switch LeistungCase {
        case ( temperatur.state >= 8.0 ) : {
                if(Manuellerbetrieb.state != ON){
                    Pumpenleistung.sendCommand(60)
                }
        }

        case ( temperatur.state >= 7.0 && temperatur.state < 8.0 ) : {
                  if(Manuellerbetrieb.state != ON){
                    Pumpenleistung.sendCommand(55)
                }
        }
        default : {        } 
   }
end
Problemstellung:
Wenn ich manuell einen Wert über die Sitemap einstelle, bleibt der Wert von Item Pumpenleistung konstant eingestellt. -> in Ordnung

ABER: Wenn ich im Betrieb "automatische" Regelung , automatisiert über die Rule umstellen lasse, gibt es alle paar Minuten ein hin und her.
Das Automatikprogramm stellt über die Rule 55 ein, das wird angenommen doch ein paar Minuten später stellt er zurück auf 60. Und danach plötzlich wieder in kurzem Abstand auf 55.

Woher kommt diese Fehlfunktion?

Ich habe die Vermutung, dass ich entweder methodisch etwas mit Proxyitem oder mit Datentypen ändern müsste. Doch was genau?
Mit Transformation "as Number" und "as Decimaltyp" habe ich schon experimentiert. -> Das hat aber nicht geholfen das Problem wegzubekommen.

Damit die Pumpe den Wert annnimt, muss ist der Wert ohne Kommastellen geschickt werden. also 50, oder 60, oder 55
Über Setpoint läuft das prima. Aber über die Rule gibt es diese erwähnte Fehlfunktion.

Danke euch für eure Ratschläge im Voraus.
Grüße

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

Re: Rule ändert Setpoint Item nicht zuverlässig

Beitrag von udo1toni »

Die Frage ist, wo Du dieses Hin und her beobachtest.
Grundsätzlich passiert in beiden Fällen exakt das gleiche, openHAB sendet einen Befehl, entweder über die UI oder über die Rule an das Item Pumpenleistung. Dieses Item leitet - da es sich um einen Befehl handelt - diesen an das commandTopic weiter. daraufhin sollte das angeschlossene Gerät den Wert annehmen und auf dem stateTopic umgehend mit dem gleichen Wert antworten. Dieser Wert wird anschließend als Status ins Item übernommen.
Weiterhin wird openHAB (da kein Parameter autoUpdate="false" gesetzt ist) zusätzlich zum sendCommand auch ein postUpdate zum Item absetzen, so dass der Status auch aktiv von openHAB gesetzt wird.

Deine Rule sollte also genau so funktionieren, wie Du Dir das vorstellst. Allerdings ist sie ziemlich kompliziert für eine ziemlich einfache Aufgabe...
So sollte es auch gehen:

Code: Alles auswählen

rule "Automatik Pumpenleistung in Abhängigkeit zur Temperatur steuern"
when
    temperatur changed                                 // Temperatur hat sihc geändert
then
    if(Manuellerbetrieb.state == ON)                   // falls manuell
        return;                                        // Abbruch
    var soll = 60                                      // definiere Default Wert (über 8...)
    if(newState instanceof Number) {                   // Falls gültige Zahl
        if((newState as Number).floatValue < 8)        // falls zwischen 7 und 8
            soll = 55                                  // Ändere soll
        else if(newState as Number).floatValue < 7)    // falls unter 7
            return;                                    // breche ab (= tu nichts)
    }
    if(Pumpenleistung.state.toString != soll.toString) // Falls soll von ist abweicht
        Pumpenleistung.sendCommand(soll.toString)      // sende Befehl
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten