FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: anfichtn am 03 Februar 2020, 22:54:11

Titel: Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: anfichtn am 03 Februar 2020, 22:54:11
Moin!

Ich bin scheinbar mit Blindheit geschlagen...

Folgendes Szenario:
1) Heizung ( MAX-Thermostat )  -> Ventil öffnet -> Lüfter soll um 3 min verzögert einschalten
2) Heizung -> Ventil schließt -> Lüfter soll 10 min nachlaufen

Bislang hab ich...
defmod Heizung_luefter DOIF ([MAX_0e81db:valveposition]>1) (\
set IT_V3_11111111 on;;\
setreading Heizung_luefter oldvalue [?MAX_0e81db:valveposition]\
) \
DOELSEIF(([MAX_0effff:Valveposition]<100) && ([?Heizung_luefter:oldvalue]>0))\
(\
setreading Heizung_luefter oldvalue [MAX_0e81db:valveposition]\
)\
DOELSEIF(([MAX_0effff:Valveposition]<100) && ([?Heizung_luefter:oldvalue]<1))\
(\
set IT_V3_11111111 on-for-timer 600 ;;\
setreading Heizung_luefter oldvalue [?MAX_0effff:valveposition]\
)
attr Heizung_luefter DOIF_Readings oldvalue:()


im Reading oldvalue speichere ich den letzten Stand des Ventils zwischen...

Einschalten funktioniert augenscheinlich, ausschalten auch.. wie stell ich das jetzt sinnvoll zeitverzögert ein?

Grüße
Titel: Antw:Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: amenomade am 04 Februar 2020, 00:24:48
Mit dem Attribut wait
https://fhem.de/commandref_DE.html#DOIF_wait
Titel: Antw:Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: moonsorrox am 04 Februar 2020, 14:18:15
also ich bin mir jetzt nicht 100% sicher, aber für den defmod sieht der Code recht unaufgeräumt aus..

Nicht getestet unter Vorbehalt, aber evtl. geht das dann
Probiere mal die beiden "&&" durch "and" zu ersetzen

Sicher bin ich mir da nicht, aber probiere das mal...!
Ich habe das mal so abgespeichert und es kommt kein Fehler im defmod, zur Not kannst du es ja wieder rückgängig machen

sieht so aus
defmod Heizung_luefter DOIF ([MAX_0e81db:valveposition] >1) (set IT_V3_11111111 on;; setreading Heizung_luefter oldvalue [?MAX_0e81db:valveposition]) DOELSEIF (([MAX_0effff:Valveposition] <100) and ([?Heizung_luefter:oldvalue] >0)) (setreading Heizung_luefter oldvalue [MAX_0e81db:valveposition]) DOELSEIF (([MAX_0effff:Valveposition] <100) and ([?Heizung_luefter:oldvalue] <1)) (set IT_V3_11111111 on-for-timer 600;; setreading Heizung_luefter oldvalue [?MAX_0effff:valveposition])
attr Heizung_luefter DOIF_Readings oldvalue:()


Evtl. würde ich erst einmal den Code ohne zwischenspeichern der Ventilwerte testen und das dann später einbauen, denn den Nachlauf sollte ja eigentlich durch den on-for-timer schon enthalten sein.
Titel: Antw:Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: Per am 04 Februar 2020, 15:06:03
Zitat von: moonsorrox am 04 Februar 2020, 14:18:15aber für den defmod sieht der Code recht unaufgeräumt aus..
Wieso? Defmod entfernt keine Enter (oder Tab), und mit diesen sind die Codes viel besser zu lesen. Besonders auf dem Handy!
Titel: Antw:Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: Ma_Bo am 04 Februar 2020, 16:45:16
Zitat von: anfichtn am 03 Februar 2020, 22:54:11
Moin!

Ich bin scheinbar mit Blindheit geschlagen...

Folgendes Szenario:
1) Heizung ( MAX-Thermostat )  -> Ventil öffnet -> Lüfter soll um 3 min verzögert einschalten
2) Heizung -> Ventil schließt -> Lüfter soll 10 min nachlaufen
...




Versuche es mal so, wenn du dein DOIF über modify bearbeitest, ich denke das sollte klappen:

([MAX_0e81db:valveposition]>=1)
(set IT_V3_11111111 on)

DOELSEIF ([MAX_0effff:Valveposition]<1)
(set IT_V3_11111111 off)



attr <DEINDOIFNAME> wait 180:600

Damit geht das DOIF in CMD1 wenn das Ventil Größer oder Gleich 1 ist, aber dieser Zustand muss 180 Sekunden (wait) so sein erst dann führt er das "set IT_V3_11111111 on" aus.
Ist nun das Ventil wieder geschlossen, also Kleiner als 1 geht das DOIF in CMD2, dieser Zustand muss für 600 Sekunden sein und er führt das "set IT_V3_11111111 off" aus.

Man könnte noch abfragen, ob der Lüfter läuft oder nicht, dann wäre es etwa so:

([MAX_0e81db:valveposition]>=1 and [?IT_V3_11111111:state] eq "off")
(set IT_V3_11111111 on)

DOELSEIF ([MAX_0effff:Valveposition]<1 and [?IT_V3_11111111:state] eq "on")
(set IT_V3_11111111 off)

DOELSE


attr <DEINDOIFNAME> wait 180:600:0


Damit geht das DOIF in CMD1 wenn das Ventil Größer oder Gleich 1 ist und der Lüfter aus ist, aber dieser Zustand muss 180 Sekunden (wait) so sein erst dann führt er das "set IT_V3_11111111 on" aus.
Ist nun das Ventil wieder geschlossen, also Kleiner als 1 und der Lüfter an, geht das DOIF in CMD2, dieser Zustand muss für 600 Sekunden sein und er führt das "set IT_V3_11111111 off" aus.

Titel: Antw:Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.
Beitrag von: anfichtn am 17 Februar 2020, 23:15:09
Danke allen Antwortenden für den Tipp aufs Wait...


Nachdem ich dann auch noch den kleinen Schreibfehler (Valveposition statt valveposition) beseitigt habe, rennt der spaß erstmal augenscheinlich wie gewünscht.

Grüße

anfichtn