[gelöst] Heizung mit FHT80b abhängig von der Außentemperatur an- und ausschalten

Begonnen von Dennis1201, 22 April 2014, 00:13:13

Vorheriges Thema - Nächstes Thema

Dennis1201

In unserer Etagenwohnung mit Zentralheizung habe ich die Heizkörper alle mit der Heizungssteuerung FHT80b+FHT8V ausgestattet. Auf dem Balkon hängt als Außenfühler ein HMS100TF. Als Zentrale dient die FHZ1300PC.
In den Raumreglern habe ich Absenk- und Heiztemperatur sowie ein passendes Wochenprogramm gespeichert und bislang alle für sich betrieben.
Nun möchte ich die Heizungssteuerungen abhängig von der Außentemperatur ein und ausschalten. Dazu habe ich im PDF für Einsteiger auch eine Lösung gefunden, die ich noch weiter ausgebaut habe:

define HZG_Wohn at +*00:30:00 { if (ReadingsVal("Aussenfuehler","temperature",99) < 5) { fhem("set Wohnzimmer mode auto desired-temp 17.5") } else { fhem("set Wohnzimmer mode manual desired-temp 5.5") } }

Der Außenfühler heißt Aussenfuehler, der FHT80b heißt Wohnzimmer. Das Makro an sich habe ich HZG_Wohn genannt.

Das funktioniert auch soweit (hab den Außenfühler ins Gefrierfach gelegt) nur habe ich jetzt das Problem dass die Heizung zwar auf Automatik und auf die Spartemperatur von 17.5° gestellt wird, dies aber jede halbe Stunde passiert und somit die Komforttemperatur (die der Raumregler im Zuge seines eingestellten Programms irgendwann aufruft) alle 30 Minuten wieder überschrieben wird.


Meine überarbeitete Fassung sieht nun so aus:

Wenn es draußen kälter als 5° ist und die eingestellte Temperatur unter der Absenktemperatur liegt (FHT sollte auf "off" stehen, Heizung ist noch aus) wird der Modus auf Automatik geändert:
define HZG_Wohn_AN1 at +*00:30:00 { if (ReadingsVal("Aussenfuehler","temperature",99) < 5) and (ReadingsVal("Wohnzimmer","desired-temp",5.5) < 17.5) { fhem("set Wohnzimmer mode auto) } }

Wenn es draußen kälter als 5° ist und die eingestellte Temperatur (sollte ja auf "off" stehen) unter der Absenktemperatur liegt wird diese eingestellt:
define HZG_Wohn_AN2 at +*00:30:00 { if (ReadingsVal("Aussenfuehler","temperature",99) < 5) and (ReadingsVal("Wohnzimmer","desired-temp",5.5) < 17.5) { fhem("set Wohnzimmer desired-temp 17.5") } }

Mit dieser zweiten Zeile möchte ich verhindern, dass die Komforttemperatur unter Umständen überschrieben wird und der FHT nur beim ersten Aufruf auf 17.5°C gestellt wird wenn er noch aus ist.


Wenn es draußen wärmer als 5° ist und die eingestellte Temperatur (sollte ja entweder auf 17.5° oder 20.0° stehen) ist mehr als "off" wird der Modus auf manuell gestellt und die gewünschte Temperatur auf "off" gesetzt:
define HZG_Wohn_AUS at +*00:30:00 { if (ReadingsVal("Aussenfuehler","temperature",99) > 5) and (ReadingsVal("Wohnzimmer","desired-temp",6) > 5.5) { fhem("set Wohnzimmer mode manual desired-temp 5.5") } }


Meine Fragen an die Experten: klappt das so oder habe ich einen Denk- oder Syntaxfehler drin? Geht das auch eleganter? Schließlich muss ich das ja für alle anderen Räume so übernehmen.


Gruß Dennis
Cubietruck / fhem 5.8 / FHZ1300 / HM-CFG-USB / FHT-80b / FS20 und HM-Komponenten

Damian

Zitat von: Dennis1201 am 22 April 2014, 00:13:13
Geht das auch eleganter? Schließlich muss ich das ja für alle anderen Räume so übernehmen.
Ja.

define TH_WZG THRESHOLD Aussenfuehler:temperature:0.5:5 Wohnzimmer|set @ mode manual desired-temp 5.5|set @ mode auto desired-temp 17.5|2

Ist kürzer, schaltet sofort beim Unter- bzw. Überschreiten von 5 Grad und immer nur einmal. :)

Ich habe noch eine Hysterese von 0,5 Grad angegeben, damit bei kleinen Schwankungen um die 5-Grad-Grenze nicht ständig hin und her geschaltet wird.

Weitere Informationen zum Modul, siehe: http://fhem.de/commandref_DE.html#THRESHOLD


Gruß

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

Dennis1201

Vielen Dank für Deine schnelle Hilfe! Klappt wunderbar.

Ich hätte es mir wahrscheinlich unnötig schwer gemacht weil ich das Modul Threshold noch gar nicht kannte.


Gruß Dennis
Cubietruck / fhem 5.8 / FHZ1300 / HM-CFG-USB / FHT-80b / FS20 und HM-Komponenten

Dennis1201

Ich muss dieses Thema noch einmal - im wahrsten Sinne de Wortes - aufwärmen. Ich habe versucht, den Messwert der Raumtemperatur mit einzubeziehen, damit die Heizung auch anspringt wenn die Raumtemperatur unter die Absenktemperatur (17.5°C) sinkt. Dazu habe ich die Definition wie folgt erweitert:

define TH_WZG THRESHOLD Aussenfuehler:temperature:0.5:5 OR Wohnzimmer:measured-temp:0.5:17.5 Wohnzimmer|set @ mode manual desired-temp 5.5|set @ mode auto desired-temp 17.5|2

Leider klappt das nicht so wie ich mir das vorgestellt habe (Raumthermostat liegt momentan im Kühlschrank zum Testen). Kannst Du mir bitte noch einmal auf die Sprünge helfen wo mein Fehler liegt?


Gruß Dennis
Cubietruck / fhem 5.8 / FHZ1300 / HM-CFG-USB / FHT-80b / FS20 und HM-Komponenten

Damian

Zitat von: Dennis1201 am 20 August 2014, 19:52:59
Ich muss dieses Thema noch einmal - im wahrsten Sinne de Wortes - aufwärmen. Ich habe versucht, den Messwert der Raumtemperatur mit einzubeziehen, damit die Heizung auch anspringt wenn die Raumtemperatur unter die Absenktemperatur (17.5°C) sinkt. Dazu habe ich die Definition wie folgt erweitert:

define TH_WZG THRESHOLD Aussenfuehler:temperature:0.5:5 OR Wohnzimmer:measured-temp:0.5:17.5 Wohnzimmer|set @ mode manual desired-temp 5.5|set @ mode auto desired-temp 17.5|2

Leider klappt das nicht so wie ich mir das vorgestellt habe (Raumthermostat liegt momentan im Kühlschrank zum Testen). Kannst Du mir bitte noch einmal auf die Sprünge helfen wo mein Fehler liegt?


Gruß Dennis

Das geht leider nicht. THRESHOLD ist da nicht so universell einsetzbar, mit OR kannst du nur einen bestimmten Wert abfragen.

Es gibt aber jetzt eine Alternative, die flexibler für solche Zwecke ist:

define DI_WZG DOIF ([Aussenfuehler:temperature] > 5 or [Wohnzimmer:measured-temp] > 17.5) (set Wohnzimmer mode manual desired-temp 5.5) DOELSE (set Wohnzimmer mode auto desired-temp 17.5)

Genaueres - siehe im DOIF-Nachbarthread

Gruß

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

Dennis1201

Vielen Dank nochmal für Deine Hilfe - und natürlich die tollen Module die Du entwickelt hast. Ich habe jetzt ein Paar Tage rumprobiert bis ich gemerkt habe dass ich noch das Attribut do always setzen muss, aber jetzt funktioniert alles.

Gruß Dennis
Cubietruck / fhem 5.8 / FHZ1300 / HM-CFG-USB / FHT-80b / FS20 und HM-Komponenten

Damian

Zitat von: Dennis1201 am 23 August 2014, 11:58:42
Vielen Dank nochmal für Deine Hilfe - und natürlich die tollen Module die Du entwickelt hast. Ich habe jetzt ein Paar Tage rumprobiert bis ich gemerkt habe dass ich noch das Attribut do always setzen muss, aber jetzt funktioniert alles.

Gruß Dennis

Bei:

define DI_WZG DOIF ([Aussenfuehler:temperature] > 5 or [Wohnzimmer:measured-temp] > 17.5) (set Wohnzimmer mode manual desired-temp 5.5) DOELSE (set Wohnzimmer mode auto desired-temp 17.5)

ist das Attribut do always nicht sinnvoll, weil das Modul dann jedes Mal beim Empfang der Temperaturen den Aktor "Wohnzimmer" schaltet. Ohne das Attribut wird es nur beim Zustandswechsel, also nur wenn es Sinn macht, geschaltet. Das entspricht der Vorgehensweise beim THRESHOLD-Modul, welches auch nur nach Zustandswechsel schaltet.

Gruß

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

Dennis1201

Ich habs auch gerade gemerkt, weil die 1%-Regel recht schnell überschritten wurde und das Attribut wieder entfernt. Allerdings zeigt sich ohne do always anscheinend keine Reaktion, wogegen sich bei gesetztem do always eine Reaktion zeigt bis das Sendelimit überschritten wird.

Gruß Dennis
Cubietruck / fhem 5.8 / FHZ1300 / HM-CFG-USB / FHT-80b / FS20 und HM-Komponenten

Damian

Zitat von: Dennis1201 am 23 August 2014, 14:33:54
Ich habs auch gerade gemerkt, weil die 1%-Regel recht schnell überschritten wurde und das Attribut wieder entfernt. Allerdings zeigt sich ohne do always anscheinend keine Reaktion, wogegen sich bei gesetztem do always eine Reaktion zeigt bis das Sendelimit überschritten wird.

Gruß Dennis

Wenn du das Modul definierst bzw. über die WEB-Obefläche über DEF-Button veränderst, dann befindet es sich im initialisierten Modus(status ? bzw. "initialized"). Sobald eines deiner Temp-Senosoren  sendet, wird das Modul schalten, das siehst du am veränderten Zustand des Moduls (cmd_1 oder cmd_2). Der nächste Schaltvorgang wird erst dann wieder stattfinden, wenn aufgrund deiner definierten Bedingung das andere Kommando gesendet werden soll und das kann Stunden oder Tage dauern.

Gruß

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