Doif - aber in bestimmten Bereich keine Aktion ausführen

Begonnen von ag21368, 27 August 2019, 13:44:30

Vorheriges Thema - Nächstes Thema

ag21368

Hallo zusammen,

es geht um die Steuerung der Luftfeuchte

Ich möchte er zum Beispiel bei <58 die Heizung einschaltet und bei >60 wieder ausschaltet. Im Moment schaltet er bei 59,9 wieder an Im bereich zwischen 58 und 60 soll er einfach den vorherigen Schaltzustand halten

defmod MQTT2_Sonoff_TH_1_DOIF_1 DOIF ([MQTT2_Sonoff_TH_1:luftfeuchte] <= [MQTT2_Sonoff_TH_1:luftfeuchte_min])  (set MQTT2_Sonoff_TH_1 on)\
DOELSEIF ([MQTT2_Sonoff_TH_1:luftfeuchte] >= [Luftfeuchte_Schlupf:state]) (set MQTT2_Sonoff_TH_1 off)\
DOELSE (set MQTT2_Sonoff_TH_1 on)\


So schaltet er sehr oft. Mir reicht wenn er wie oben beschrieben schaltet also mit einer Differenz von 2% Punkten Finde dort keinen Ansatz

Danke im Voraus

ag21368

Erledigt. Lösung gefunden über das doelse einfach das aktuellen reading von POWER! setzen

Beta-User

...so ganz verstehe ich das ganze nicht (und die Lösung auch nicht)...

Was du eigentlich brauchst, ist eine Hysterese. Vermutlich kann man das DOIF rechnen lassen, es gibt aber für diese Art Aufgabe (Zweipunktregler) auch ein eigenes Modul: THRESHOLD.

Da du scheinbar (?) zwei Sensorwerte (Luftfeuchte_Schlupf scheint ein Dummy zu sein, über den die Hysterese eingestellt wird?) vergleichen willst, aus der commandref:

Zitat
Alternative Steuerung mit Sollwert-Vorgabe durch einen weiteren Sensor des Warmwasserspeichers:

Die Rücklauftemperatur soll 5 Grad (offset) unter der Warmwasserspeichertemperatur liegen und bis zu 4 Grad (Hysterese) schwanken dürfen.

define TH_circ THRESHOLD return_w:temperature:4:water_storage:temperature:-5 circ_pump

(Wobei da dann die Hysterese über das Modul direkt dort einzustellen wäre, und mir die Einschaltlogik invertiert vorkommt; dachte bisher, höhere Temp mit gleicher Feuchtigkeitsmenge führt zu geringerer rel. Luftfeuchtigkeit ;) ).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ag21368

Hallo,

danke schaue ich mir an.

Ne es wird eine Heizung in einem Wasserbassin zugeschaltet

ag21368

Also meine DOIF Lösung hat nicht funktioniert  :'(

Schaue mir gerade Threshold an.

defmod TH_VB_Luftfeuchte THRESHOLD MQTT2_Sonoff_TH_1:luftfeuchte:2:Luftfeuchte_Vorbrut:state MQTT2_Sonoff_TH_1|set @ off|set @ on|1

es gibt das reading luftfeuchte im Device MQTT2_Sonoff_TH_1 was den aktuellen Wert der Luftfeuchte wiedergibt.
Dann gibt es im dummy Luftfeuchte_Vorbrut das reading state was den Sollwert angibt.

Er soll MQTT2_Sonoff_TH_1 einschalten wenn der Sollwert (Luftfeuchte_Vorbrut:state) um 2 unterschritten wird und ausschalten wenn der Sollwert erreicht ist.

Ich glaube das mein Syntax falsch ist evtl. kann mal einer drauf schauen

Vielen Dank
Andreas

Beta-User

Hmm, "eigentlich" sieht das ganz ok aus.

Kann aber sein, dass es etwas dauert, bis jeweils Meßwerte reinkommen. Grundsätzlich würde ich auch eher einen Sollwert direkt vorgeben und dann nur per notify eine Änderung des Luftfeuchte_Vorbrut-Dummy an den THRESHOLD machen (oder gleich einen ReadingsProxy dafür verwenden, wenn man überhaupt ein eigenes grafisches Bedienelement braucht...?), mir liegt einfach näher, erst mal alles im Device direkt festzuzurren.

Für eine Fehlersuche wäre aber ein list hilfreich, daran sieht man besser, was der Zustand des THRESHOLD ist, und m.E. braucht es am Ende die "|1" auch nicht unbedingt. Würde also erst mal so ins Rennen gehen:
defmod TH_VB_Luftfeuchte THRESHOLD MQTT2_Sonoff_TH_1:luftfeuchte:2:60 MQTT2_Sonoff_TH_1|set @ off|set @ on
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors