Ich seh den Wald vor Bäumen nicht... Lüfter(nachlauf) mit DOIF.

Begonnen von anfichtn, 03 Februar 2020, 22:54:11

Vorheriges Thema - Nächstes Thema

anfichtn

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
FHEM 5.6 + Pilight + Pimatic auf BananaPro mit Bananian 15.04 r01
FB7270 v2 & FB7412
LDA382A mit WifiLight
MAX-Cube (aculfw), 6 Fensterkonstakte, 5 HK-Thermostate, 3 WandThermostate
[...]

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

moonsorrox

#2
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.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Per

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!

Ma_Bo

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.

NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

anfichtn

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
FHEM 5.6 + Pilight + Pimatic auf BananaPro mit Bananian 15.04 r01
FB7270 v2 & FB7412
LDA382A mit WifiLight
MAX-Cube (aculfw), 6 Fensterkonstakte, 5 HK-Thermostate, 3 WandThermostate
[...]