on-for-timer Nachbildung Elektro-Heizung

Begonnen von Vize, 02 Februar 2016, 11:31:29

Vorheriges Thema - Nächstes Thema

Vize

Hallo zusammen!

Ich habe eine Verständnisfrage.

Gemäß der commandref DOIF zur Nachbildung eines on-for-timers möchte ich versuchen, dies analog für die Steuerung eines E-Heizkörpers über ein Wandthermostaten umzusetzen.
Im Moment stehe ich aber auf dem Schlauch bzw. verstehe nicht ganz das "Schaltverhalten" meines DOIFs.

Ausgangssituation:
- HM-TC-IT-WM-W-EU (zur Temperaturabfrage)
- HM-LC-SW1-FM (zum Ein-/Ausschalten des Heizkörpers)

Ziel:
Wochentags soll der Heizkörper zwischen 05:00 und 06:30 laufen, wenn die Ist-Temperatur kleiner als die Soll-Temperatur ist. In diesem Zeitfenster soll der Heizkörper dann auch wieder ausgehen, wenn die Solltemperatur erreicht ist und auch wieder angehen, falls die Ist-Temperatur wieder unter die Soll-Temperatur fällt.
Das Gleiche am Wochenende zwischen 07:00 und 08:30.

Ich nutze dazu den Kanal 02 (XXX_Climate) des Thormostaten mit der Bezeichnung bz_202_klima, da dieser etwa alle 2-3 Minuten die Ist-Temperatur aktualisiert.

Hier mein code für das DOIF:
([?05:00-06:30|8] or [?07:00-08:30|7]
  and [bz_202_klima:measured-temp] < [bz_202_klima:desired-temp])
    (set bz_202_heizung on)
    (set bz_202_heizung off)


Die gesetzten Attribute:
do resetwait
wait 0,240


Nun war es so, dass der Heizkörper heute Morgen von 05:00 bis 06:30 kontinuierlich durchlief, obwohl zwischenzeitlich die Soll-Temperatur bereits erreicht wurde. Als der Heizkörper um 06:30 ausging, lag die Ist-Temperatur ca. 1 °C über der Soll-Temperatur...

Kann mich mal jemand in die richtige Richtung schubsen oder mir einen Tipp geben, wie ich das richtigerweise umsetzen kann?
Oder wird bei diesem DOIF auch nur zur Anfangs- und Endzeit getriggert?
Wie kann ich das dann mit dem Zeitintervall lösen?
In einem Test ohne Zeitangaben funktionierte die "Schaltung" einwandfrei...

Bin für jede Hilfe dankbar!

Gruß
Andreas

Vize

Hmm, gerade nochmal aktuell mit angepasster Zeit getestet (12:00 - 13:00 Uhr)...
Desired-temp steht auf 20.0 .

Die Heizung schaltet beim Erreichen der Soll-Temperatur wieder nicht ab und der Timer wird "weitergeschoben"...

Ein kleiner Auszug vom EventMonitor:

2016-02-02 12:35:33 DOIF di_bad_heizung_an wait_timer: no timer
2016-02-02 12:35:33 DOIF di_bad_heizung_an wait_timer: 02.02.2016 12:39:33 cmd_1_2 bz_202_klima
2016-02-02 12:35:33 CUL_HM bz_202_klima measured-temp: 20.1
2016-02-02 12:37:34 DOIF di_bad_heizung_an wait_timer: no timer
2016-02-02 12:37:34 DOIF di_bad_heizung_an wait_timer: 02.02.2016 12:41:34 cmd_1_2 bz_202_klima
2016-02-02 12:37:34 CUL_HM bz_202_klima measured-temp: 20.2
2016-02-02 12:37:34 CUL_HM bz_202_klima T: 20.2 desired: 20.0
2016-02-02 12:37:44 DOIF di_bad_heizung_an wait_timer: no timer
2016-02-02 12:37:44 DOIF di_bad_heizung_an wait_timer: 02.02.2016 12:41:44 cmd_1_2 bz_202_klima
2016-02-02 12:37:44 CUL_HM bz_202_klima measured-temp: 20.2
2016-02-02 12:37:44 CUL_HM bz_202_thermostat battery: ok
2016-02-02 12:37:44 CUL_HM bz_202_thermostat batteryLevel: 3.1
2016-02-02 12:37:44 CUL_HM bz_202_thermostat desired-temp: 20.0
2016-02-02 12:37:44 CUL_HM bz_202_thermostat measured-temp: 20.2

Gruß
Andreas

Damian

Wenn die Heizung auch ausgehen soll, dann brauchst du auch einen DOELSE-Fall mit off. Ich verstehe aber nicht warum du einen on-for-timer hier nachbilden willst. Es sollte damit funktionieren (die beiden Zeitintervalle müssen geklammert sein):

(([?05:00-06:30|8] or [?07:00-08:30|7])
  and [bz_202_klima:measured-temp] < [bz_202_klima:desired-temp])
    (set bz_202_heizung on)
DOELSE
    (set bz_202_heizung off)


ohne die beiden Attribute.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marvin78

Ich verstehe nicht, warum man solche Sachen überhaupt FHEM überlässt. Wenn es sich nur um HM Komponenten handelt, macht ein direktes Peering und die entsprechenden Einstellungen deutlich mehr Sinn und es funktioniert auch noch, wenn FHEM mal nicht läuft.

Vize

Hallo Damian und marvin78,

danke für eure Antworten.

@Damian
Tja, wahrscheinlich habe ich einfach zu kompliziert gedacht, keine Ahnung. On-for-timer hatte ich gemäß commandref schon erfolgreich mit einem Bewegungsmelder umgesetzt, und da dachte ich mir, versuch es mal bei der Heizung genauso...
Werde deinen Vorschlag heute Abend mal testen.

@marvin78
Aus zwei Gründen...
1. je mehr man probiert, umso mehr lernt man auch...
2. Mit dem Peering hab ich mich noch überhaupt nicht beschäftigt bzw. noch nicht herangetraut...

Gruß
Andreas

marvin78

Zitat von: Vize am 02 Februar 2016, 14:18:32

2. Mit dem Peering hab ich mich noch überhaupt nicht beschäftigt bzw. noch nicht herangetraut...



Das solltest du aber in dem Fall tun, denn das ist die einzige sinnvolle Möglichkeit, so etwas abzubilden. FHEM sollte bei Heizungsteuerung und anderen wichtigen Dingen eher eine administrative und Überwachungsfunktion einnehmen.

Vize

OK, ich denke, ich werd mich mal mit dem Thema Peering befassen...

Danke nochmal für deine Hinweise.

PS Eine Detailfrage noch, die mir gerade einfällt...wenn ich die Steuerung des E-Heizkörpers per Peering umsetze, dann kann ich die Heizprogramme doch "nur noch" direkt am Thermostat beeinflussen/einstellen und nicht mehr über FHEM, oder?
Es wird nämlich wohl so sein, dass ich nicht jeden Tag zur programmierten Zeit heizen werde. Und da finde ich es (bis jetzt) einfacher, dafür z.B. ein DOIF in FHEM übers Smartphone ein- und auszuschalten, als immer ins Bad zu gehen, um die Soll-Temperatur runter zu regeln.
Korrekt oder DEnkfehler meinerseits?

So, jetzt nerv ich auch erstmal nicht mehr...

Gruß
Andreas

marvin78

Denkfehler. Beschäftige dich damit. FHEM kann natürlich immer (auch) steuern.

tomster

#8
Zitat von: Vize am 02 Februar 2016, 14:44:44
...wenn ich die Steuerung des E-Heizkörpers per Peering umsetze, dann kann ich die Heizprogramme doch "nur noch" direkt am Thermostat beeinflussen/einstellen und nicht mehr über FHEM, oder?
Es wird nämlich wohl so sein, dass ich nicht jeden Tag zur programmierten Zeit heizen werde. Und da finde ich es (bis jetzt) einfacher, dafür z.B. ein DOIF in FHEM übers Smartphone ein- und auszuschalten, als immer ins Bad zu gehen, um die Soll-Temperatur runter zu regeln.

Eine ähnliche Problematik hatte ich bei mir auch. Die von mir gesteuerte E-Heizung (Nachtspeicher) steht in einer Ferienwohnung und soll natürlich nur dann aktiv geregelt sein, wenn entweder jemand anwesend ist oder eben vorgeheizt werden soll. Ich habe mich nach langem Überlegen zum direkten Peering von Thermostat und Lüfter des Speicherofens entschieden. Das läuft dann wirklich zu 99,9% ohne Mucken. Wenn keiner anwesend ist/ nicht vorgeheizt wird, dann setz ich desired-temp einfach auf 5 und schon bleibt der Lüfter stumm.
Zudem gibt es noch einen separaten Heizlüfter, der bei Bedarf (A-Temp < -12°) aushelfen soll und ebenfalls über den Thermostaten geregelt werden soll.
Den Zusatzlüfter hab ich dann ganz simpel per THRESHOLD gelöst, welcher mit einem dummy manuell de-/aktiviert wird.

Die Temperaturprogramme habe ich in eine separate Datei tempList.cfg eingetragen. Damit kann man die recht leicht in FHEM editieren und dann per set [Device] tempListTmpl [Name] ganz einfach auf das Thermostat "aufspielen". Steht aber sicher alles im Wiki.

Damian

Meine Empfehlung:

1. HM Sensor mit HM-Aktor direkt peeren (geht allerdings nicht in jeder Konstellation - ist meine leidvolle Erfahrung)

2. Entweder Temperaturprogramme jeweils über listen laden oder weil es meiner Meinung nach komfortabler ist z. B. per DOIF Wochenprogramme mit Setzen der Desire-Temp definieren.

3. Durch einfaches Setzen der Desired-Temp kann man jederzeit eine aktuelle Vorgabe bis zum nächsten Zeitpunkt übersteuern.


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vize

Hallo tomster,
hallo Damian,

danke euch für die weiteren Hinweise.
Ich werde mich mal näher mit der Thematik befassen.

Gruß
Andreas

Vize

Zitat von: Damian am 02 Februar 2016, 13:08:15
Wenn die Heizung auch ausgehen soll, dann brauchst du auch einen DOELSE-Fall mit off.

(([?05:00-06:30|8] or [?07:00-08:30|7])
  and [bz_202_klima:measured-temp] < [bz_202_klima:desired-temp])
    (set bz_202_heizung on)
DOELSE
    (set bz_202_heizung off)


Hallo Damian,

ich hab gerade mal probeweise diese von dir vorgeschlagene Variante getestet.
Für bz_202_klima measured-temp hatte ich noch das Attribut event-on-update-reading gesetzt.
Wenn ich den EventMonitor verfolge, sehe ich nun alle 2-3 Minuten den set on Befehl für die Heizung, welcher an den HM-CFG-USB kommuniziert wird.
Durch meine on-for-timer-Nachbildung wollte ich das - wie in der commandref beschrieben - vermeiden...so dachte ich jedenfalls...

Gruß
Andreas

Damian

Zitat von: Vize am 02 Februar 2016, 18:16:57
Hallo Damian,

ich hab gerade mal probeweise diese von dir vorgeschlagene Variante getestet.
Für bz_202_klima measured-temp hatte ich noch das Attribut event-on-update-reading gesetzt.
Wenn ich den EventMonitor verfolge, sehe ich nun alle 2-3 Minuten den set on Befehl für die Heizung, welcher an den HM-CFG-USB kommuniziert wird.
Durch meine on-for-timer-Nachbildung wollte ich das - wie in der commandref beschrieben - vermeiden...so dachte ich jedenfalls...

Gruß
Andreas

Dann hast du wohl nicht beide Attribute, wie ich geschrieben habe, gelöscht.

Das do-Attribut sollte nicht gesetzt sein.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vize

Schande über mich...du hast Recht...hatte ich vergessen zu löschen...Sorry!

Gruß
Andreas

Vize

Guten Morgen,

ich habe mir nun in diesem Zusammenhang erstmal ein Test-DOIF gebastelt, um Morgens in einem Zeitfenster den E-Heizkörper temperaturgesteuert ein- und auszuschalten.

(([05:00-07:00|8] or [06:30-08:30|7])
and [bz_202_klima:measured-temp] < ([bz_202_klima:desired-temp]-1))
  (set bz_202_heizung on)
DOELSEIF ([bz_202_klima:measured-temp] >= [bz_202_klima:desired-temp])
  (set bz_202_heizung off)
DOELSE
  ()


Das Ergebnis war, dass der Heizkörper heute Morgen bei Erreichen der Solltemperatur (desired-temp) zwar abschaltete, jedoch erst außerhalb des Zeitfensters um 07:17 Uhr.
Wie kann ich hier erreichen, dass der Heizkörper unter der Woche spätestens um 07:00 Uhr abschaltet, auch wenn die Soll-Temperatur noch nicht erreicht ist? Die weitere Abschaltung bei Erreichen der Soll-Temperatur innerhalb des Zeitfenster soll dabei erhalten bleiben.
Muss ich die Zeitangaben dafür auch in den DOELSEIF-Fall packen und/oder noch ein set bz_202_heizung in den DOELSE-Fall?
Ich krieg es irgendwie nicht logisch zu Ende gedacht...

Ich würde gerne erstmal versuchen, das in einem solchen DOIF-Konstrukt zu realisieren.

Die von Damian vorgeschlagene Variante mit den Temperaturprogrammen würde ich danach mal testen...

Danke schonmal!

Gruß
Andreas