Hallo zusammen,
Nach langer Zeit nun hab ich endlich meinen Pufferspeicher in Betrieb genommen. Bisher hat meine Vaillant Gas Therme mit Fernbedieung per timer die Therme heizen lassen, wenn ich es warm haben wollte. Nun tut sie durchgehend den Pufferspeicher auf 60 Grad heizen und am Puffer hab ich eine neue Pumpe zur Versorgung der Heizkörper+FBH angeschlossen. Ich möchte nun zu gewissen Zeiten einfach das Wasser in die Heizkörper pumpen. Das habe ich anhand einfacher Beispiele bereits hinbekommen :
#abend schaltung##
#Schalte pauschal pumpe 24 Mal nacheinander alle 15 Minuten für 300 Sekunden ein
define PumpeAbendsStart at *15:30:00 { fhem("define PumpeAbends at +*{24}00:15:00 set Steckdose.1_Sw on-for-timer 300") }
define PumpeMorgensStart at *5:30:00 { fhem("define PumpeMorgens at +*{24}00:15:00 set Steckdose.1_Sw on-for-timer 300;;") }
Das mit den Intervall alle 15 Minuten finde ich ganz gut :-)
Nachteil: tatsächliche Raumtemperatur wird nicht berücksichtigt und somit macht er das auch, wenn es schon zu warm im Haus ist:
Ich habe zusätzlich nun ein Thermostat "HM_2013A2" vone Homematic geschenkt bekommen. Das steht einfach im Haus rum. Ich möchte nun einen einfachen Wochenplan morgens und abends die Pumpe laufen lassen, ABER unter Berücksichtigung, ob es eventuell nicht schon zu warm ist. Zum testen hab ich die o.g. Definition deaktiviert und folgende anhand von Beispielen für mich abzuleiten:
#Unabhängig von Timern die Pumpe ein/ausschalten bei unter/überschreiten von Mindest/Maximal Raumtemperatur:
#Temperatur < 19 -> Pumpe an
#Temperatur > 21 -> Pumpe aus
define HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung DOIF ([HM_2013A2:desired-temp] < 19) ({ fhem("set Steckdose.1_Sw on") }) DOELSEIF ([HM_2013A2:desired-temp] > 21) ({ fhem("set Steckdose.1_Sw off") })
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung room Heizung
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung do always
(Hab zum Test statt measured einfach desired-temp vom Thermometer genommen)
Nachdem ich nun das attr do always eingestellt habe, wird ddie Steckdose zwar (endlich :-) ) geschaltet, aber nun immerzu alleine:
2015.09.29 15:42:35 3: CUL_HM set HM_2013A2 desired-temp 6.5
2015.09.29 15:43:32 3: CUL_HM set HM_2013A2 statusRequest
2015.09.29 15:43:33 3: CUL_HM set Steckdose.1_Sw off
2015.09.29 15:43:33 3: CUL_HM set Steckdose.1_Sw on
2015.09.29 15:43:33 3: CUL_HM set Steckdose.1_Sw on
2015.09.29 15:43:34 3: CUL_HM set Steckdose.1_Sw on
2015.09.29 15:43:34 3: CUL_HM set Steckdose.1_Sw on
2015.09.29 15:44:07 3: CUL_HM set Steckdose.1_Sw on
Da fehlt irgend wie was, dass er das nur macht, wenn der aktuelle Zustand noch anders ist oder so. Und ausserdem bin ich mir nicht sicher, ob man bei diesem DOIF Beispiel auch diese Intervall Geschichte wie bei den oberen Beispiel mit integrieren kann.
Könnt Ihr mir da ein wenig behilflich sein?
Ausserdem ist mit bei dem ersten Versuch oben aufgefallen, das man das Ganze irgendwie noch mit einem zusätzlichen Schalter kombinieren müsste, wenn man die Zeitautomatik ausser Kraft setzen will. So ein paar Dinge hab ich ja schon schick hinbekommen, aber wenn zu viele Bedingungen und Kombis mit einen mal zusammen kommen, tue ich mich doch nich recht schwer damit :-(
Sieh dir auch mal das Modul THRESHOLD an. Damit habe ich meine Heizungsregelung realisiert.
Warum nutzt du DOIF so umständlich mit z.B. "fhem("set Steckdose.1_Sw on")"
Zu deinem Problem: ich bin auch noch Anfänger aber sieh dir das mal an: http://www.fhemwiki.de/wiki/Event-on-change-reading
Hier noch ein Beispiel wie ich meine Heizung mit einem Thermostat und einem Stellglied (on off) steuere:
define TC_Bad THRESHOLD Thermostat_Bad:measured-temp:1:Thermostat_Bad:desired-temp Stellglied_Bad
attr TC_Bad number_format %.1f
attr TC_Bad state_cmd1_gt off
attr TC_Bad state_cmd2_lt on
attr TC_Bad state_format _m _dv _sc
ja mit dem THRESHOOLD Modul hab ich schon gesehen. Das sah mir noch verzwickter aus. Die DOIF geschichte leuchtete mir irgendwie mehr ein. Aber wenn es damit nicht richtig läuft bzw. ich es nicht auf die Reihe bekomme, dann werd ich mich damit doch auseinander setzen müssen ;-) Eine Art Formel Generator fehlt für die nobs.
Mein derendes Ergebnis mit DOIF :-) :
#Unabhängig von Timern die Pumpe ein/ausschalten bei unter/überschreiten von der am Thermosat eingestellten Raumtemperatur inkl. Offset 1Grad, sendet zusätzlich Nachricht auf TV (funktioniert):
define HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung DOIF (([HM_2013A2:measured-temp]+1) < [HM_2013A2:desired-temp] and [Steckdose.1_Sw:state] eq "off") (set Steckdose.1_Sw on;;set Wz.TvReceiver showText Raumtemperatur ist kleiner der eingestellten Wunschtemperatur. Heizung wird aktiviert.) DOELSEIF (([HM_2013A2:measured-temp]-1) > [HM_2013A2:desired-temp] and [Steckdose.1_Sw:state] eq "on") (set Steckdose.1_Sw off;;set Wz.TvReceiver showText Raumtemperatur ist größer der eingestellten Wunschtemperatur. Heizung wird ausgeschaltet.)
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung do always
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung room Heizung
Hier habe ich jetzt erfolgreich als Wunschtemperatur die am Thermostat eingestellte Temperatur eingestellt (desired-temp). Es wird nun geprüft ob die gemessene Temperatur (measured-temp) kleiner oder größer der Wunschtemperatur ist.
Eine art offset verwendet von 1 Grad hab ich auch hinbekommen :-)
Idee wäre hierzu noch, dass man irgendwie die gemessenen Temperatur Werte mit in die Fernseher Nachricht integrieren kann. Der Rest ist klasse.
Ob es denn technisch (Performance, etc.) Unterschiede zwischen dieser DOIF Variante, die ja scheinbar immer wieder checkt jede (gefühlte) Minute und der THRESHOLD Variante?
Zitat von: rbs am 29 September 2015, 19:51:06
ja mit dem THRESHOOLD Modul hab ich schon gesehen. Das sah mir noch verzwickter aus. Die DOIF geschichte leuchtete mir irgendwie mehr ein. Aber wenn es damit nicht richtig läuft bzw. ich es nicht auf die Reihe bekomme, dann werd ich mich damit doch auseinander setzen müssen ;-) Eine Art Formel Generator fehlt für die nobs.
Mein derendes Ergebnis mit DOIF :-) :
#Unabhängig von Timern die Pumpe ein/ausschalten bei unter/überschreiten von der am Thermosat eingestellten Raumtemperatur inkl. Offset 1Grad, sendet zusätzlich Nachricht auf TV (funktioniert):
define HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung DOIF (([HM_2013A2:measured-temp]+1) < [HM_2013A2:desired-temp] and [Steckdose.1_Sw:state] eq "off") (set Steckdose.1_Sw on;;set Wz.TvReceiver showText Raumtemperatur ist kleiner der eingestellten Wunschtemperatur. Heizung wird aktiviert.) DOELSEIF (([HM_2013A2:measured-temp]-1) > [HM_2013A2:desired-temp] and [Steckdose.1_Sw:state] eq "on") (set Steckdose.1_Sw off;;set Wz.TvReceiver showText Raumtemperatur ist größer der eingestellten Wunschtemperatur. Heizung wird ausgeschaltet.)
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung do always
attr HeizungRaumTemperaturOberUndUntergrenzeUeberwachung_Schaltung room Heizung
Hier habe ich jetzt erfolgreich als Wunschtemperatur die am Thermostat eingestellte Temperatur eingestellt (desired-temp). Es wird nun geprüft ob die gemessene Temperatur (measured-temp) kleiner oder größer der Wunschtemperatur ist.
Eine art offset verwendet von 1 Grad hab ich auch hinbekommen :-)
Idee wäre hierzu noch, dass man irgendwie die gemessenen Temperatur Werte mit in die Fernseher Nachricht integrieren kann. Der Rest ist klasse.
Ob es denn technisch (Performance, etc.) Unterschiede zwischen dieser DOIF Variante, die ja scheinbar immer wieder checkt jede (gefühlte) Minute und der THRESHOLD Variante?
DOIF und THRESHOLD verhalten sich gleich: sie reagieren auf Trigger und triggern sich nicht selbst, wenn man nicht mit Zeittriggern arbeitet. THRESHOLD ist älter als DOIF und ist spezialisiert auf diese Aufgabe, da man von außen die Vorgabetemperatur verändern kann per "set desired <Temperatur>", allerdings ist die Syntax kryptischer als bei DOIF.
Gruß
Damian
Danke für die Begriffsaufklärung!!!