[erfolgreich] Heizkurve einstellen mit FHEM

Begonnen von andies, 03 Februar 2020, 14:37:13

Vorheriges Thema - Nächstes Thema

andies

Ich habe im letzten Jahr eine Art hydraulischen Abgleich für Arme gemacht: Ich hatte mir viele kleine Temperatursensoren gebaut, die in den Zimmern verteilt und dann dort, wo es wärmer war als der Durchschnitt, die Rücklaufventile schrittweise geschlossen. Das hat halbwegs geklappt, zwei Kinderzimmer sind leicht zu warm (weil die Kinder sonst Stress machen) und ein Zimmer unten leicht zu kalt (da bin ich auch dran).

Nun habe ich mir überlegt, dass ich die Heizkurve mit den Sachen, die ich habe, auch einstellen kann und dabei FHEM nutze. Das mache ich so. Zuerst bilde ich die Mediantemperatur aus den Sensoren, damit ich geöffnete Fenster, ein überheiztes Zimmer und so ignoriere. Das geht leicht mit diesem Notify
defmod hydrAbgleichNotify notify SensorHydrAbgleich.*:.* { my @hyAbgleich =  ( \
ReadingsNum("SensorHydrAbgleich_schwarz_weiss", "myTemperatur", 0), \  #  <=== das sind die Sensoren
ReadingsNum("SensorHydrAbgleich_schwarz", "myTemperatur", 0), \
ReadingsNum("SensorHydrAbgleich_pink", "myTemperatur", 0), \
ReadingsNum("SensorHydrAbgleich_lila", "myTemperatur", 0), \
ReadingsNum("SensorHydrAbgleich_gruen", "myTemperatur", 0), \
ReadingsNum("SensorHydrAbgleich_orange", "myTemperatur", 0), \
ReadingsNum("SensorHydrAbgleich_blau", "myTemperatur", 0),\
ReadingsNum("SensorHydrAbgleich_rosa", "myTemperatur", 0) );; \
my @sortedhyAbgleich = sort @hyAbgleich;;\                                         #   <=== hier wird der Groesse nach geordnet
fhem ("setreading hydr_Abgleich median ".$sortedhyAbgleich[3]."}          # <=== und ausgeben
   
Der dummy hydr_Abgleich enthält dann ein Reading mit dem Median der Temperatur im Haus. Dieser Median wird gelogged und das zusammen mit der Aussentemperatur, die die Regelungsgrundlage der Viessmann-Heizung bildet (das stimmt nicht ganz, es ist eine gedämpfte Aussentemperatur - diese Dämpfung habe ich aber angepasst und ich will wirklich die Kausalität abbilden). Irgendwie kam ich da am Anfang nicht richtig klar, so dass meine Lösung vermutlich umständlich ist. Aber sie geht. Es gibt ein DOIF, das die Werte in bestimmten Zeiträumen holt und sie im dummy notiert
defmod hydrAbgleichDOIF DOIF {[08:00-21:05,+:59];;::hydrWerteSetzen()}

wobei die Funktion in der myUtils definiert wird
sub hydrWerteSetzen(){
  fhem("setreading hydr_Abgleich logEntry  AussHaus ".ReadingsVal("Viessmann","Aussentemperatur", "")." ".ReadingsVal("hydr_Abgleich", "median", ""));
}

Die Readings des dummies hydr_Abgleich sehen mit diesem Code dann so aus  READINGS:
     2020-02-03 14:00:00   logEntry        AussHaus 9.8 20.1
     2020-02-03 14:16:34   median          20.1

(In Wirklichkeit messe ich noch die Fußbodenheizung mit, aber das wäre hier zu verwirrend, also habe ich nur das Haus abgebildet.)
Nun noch eine Logdatei (die dann mit Excel ausgewertet werden kann; das gelingt mir am schnellsten)
defmod hydrAbgleichNotify2_log FileLog ./log/Temperaturen-%Y.log hydr_Abgleich:logEntry:.AussHaus.*

und dann werden die Werte zeilenweise geschrieben, das sieht so aus
2020-01-31_08:00:00 hydr_Abgleich logEntry: AussHausWohnz 8.3 18.8
2020-01-31_08:59:00 hydr_Abgleich logEntry: AussHausWohnz 8.3 18.5
2020-01-31_09:00:00 hydr_Abgleich logEntry: AussHausWohnz 8.3 18.5
2020-01-31_09:59:00 hydr_Abgleich logEntry: AussHausWohnz 8.7 18.6
2020-01-31_10:00:02 hydr_Abgleich logEntry: AussHausWohnz 8.7 18.6

Das werde ich jetzt zwei Wochen mindestens beobachten. Wenn sich die Temperaturen außen ein wenig unterscheiden, dann sollten sich bei unpassend eingestellter Heizkurve Effekte ergeben - sonst sieht man leider nichts. Beispielsweise könnte es sein, dass bei zu hoher Aussentemperatur das Haus etwas zu kalt ist (dann ist der Absolutwert zu klein), oder das Haus wird bei stärkerer Aussenkälte zu warm (Heizkurve zu steil) usw. Ich hoffe auch, dass durch die Zeitauswahl, in der gelogged wird, Aufwärmeffekte des Hauses ausgeschaltet werden. So wäre es wenig sinnvoll, beispielsweise die Temperaturen morgens um sechs anzuschauen, wenn die Heizung erst um fünf angeworfen wird...

Meine Hoffnung ist, dass ich durch diese Art und Weise des loggens in der Lage bin, auch bei sich wenig ändernden Temperaturen eine Einstellung der Heizkurve vorzunehmen. Ich berichte. 
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Forstling

Klingt interessant

So was ähnliches brauche ich wahrscheinlich auch irgendwann mal.
Ich wollte das aber über dieses Modul https://wiki.fhem.de/wiki/ZHK realisieren.

So Ähnlich wie bei dir läuft meine Heizung auch. (Fußbodenheizung sanierter Altbau)
Erst alle Heizkreise voll auf.
Heizkurve solange angepasst bis es im Wärmsten Raum Warm genug war.
Dann den Rest der Heizkreise gedrosselt bis überall die Solltemperatur erreicht war.
und bis jetzt dem habe ich auf irgendwelche Thermostate verzichtet.
Geregelt wird nur nach Außentemperatur.

Aktuell Vorlauf Soll 24°C außen 8°C

andies

#2
Das Modul kannte ich gar nicht! Allerdings kann ich bei meiner Heizung nahezu nichts steuern. Nur die Temperatur im Haus und die Heizkurve.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#3
Da die letzten Tage die Temperaturen schön unterschiedlich waren, habe ich mir das Ergebnis mal angeschaut. Ich habe ja in Wirklichkeit zwei Temperaturen gelogged: Einmal das Haus und einmal die Fußbodenheizung im Wohnzimmer. Die HK im Haus scheint wirklich gut eingestellt zu sein, hier gibt es nichts zu bemängeln. Bei der Fußbodenheizung sieht es etwas anders aus, siehe unten (erstellt mit Excel, "Trendlinie einfügen"). Ich erkenne zwei Dinge:

  • R^2 ist zwar klein, aber nicht wie beim Haus faktisch null. Das heißt: Einen Teil der Schwankungen bei der FB-Temperatur erklärt sich durch die Schwankungen der Außentemperatur. Das aber wiederum bedeutet, dass die Außentemperatur einen (kleinen) Einfluss auf die FB-Temperatur hat => HK nicht richtig eingestellt.
  • Zudem zeigt die Gleichung, wie die Abhängigkeit ist. Bei 0°C Außentemperatur (x=0) liefert die FB ca. 19,1°C (=y) und bei 10°C Außentemperatur (x=10) wird daraus ca. 19,9°C. Demzufolge ist die Heizkurve zu niedrig, da bei kalten Wetter die Innentemperatur etwas zu klein ist.
Ich werde daher die Steigung insgesamt um einen kleinen Betrag erhöhen und weiter beobachten.

Ein weiteres Ergebnis war, dass die FB etwa einen Grad kleiner ist als die Temperatur im Haus. Das scheint aber niemanden zu stören, also bleibt es so.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

KölnSolar

ZitatEin weiteres Ergebnis war, dass die FB etwa einen Grad kleiner ist als die Temperatur im Haus. Das scheint aber niemanden zu stören, also bleibt es so.
Das ist ja der Effekt der FB. Aufgrund der flächigen Wärmeabgabe von unten ist zum Wohlbefinden nur eine geringere Raumtemperatur erforderlich.  ;)
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Gisbert

Hallo andies,

deinen Ausführungen kann ich nur im Groben folgen, verstehe aber im Grunde dein Vorhaben.
Um es wirklich nachzuvollziehen, müsste ich es wohl nachbauen.

Dies scheitert aber an meiner Heizungssyteuerung, bei der man genau null von außen steuern kann.
Ich hab dennoch einen Weg gefunden maipulativ einzugreifen.

Zuerst bilde ich die Differenz zwischen Soll- und Ist-Temperatur aller Räume und bekomme damit insgesamt eine Information über die Abweichung.
Diese Abweichung addiere/subtrahiere (multipliziert mit einem Faktor 1.25) ich von der der Außentemperatur.
Die Außentemperatur bekommt die Heizung über einen NTC als Widerstandswert zur Verfügung gestellt.

Hardwaremäßig habe ich das so gelöst, dass ich den NTC durch einen digitalen Potentiometer ersetzt habe (hängt an einem ESP8266), der nun der Heizung die Außentemperatur vorgibt, vorspielt, vorgauckelt, was auch immer ;D
Im Endeffekt bekommt die Heizung die Information, dass bei zu kaltem Haus (Delta Soll/Ist) die Außentemperatur entsprechend kälter ist als die echte Außentemperatur, mit dem Effekt, dass mehr geheizt wird. Bei dem umgekehrten Fall entsprechend wird weniger oder gar nicht geheizt. Ich bilde mir ein, damit das Takten der Heizung reduziert zu haben, indem ich bei kälterem Haus die Heizung zu mehr Heizen zwinge und bei wärmerem Haus zu weniger/gar nicht.

Der Komfort bei der FBH hat nicht gelitten und die Taktung fällt geringer aus.

Zusätzlich zu der Abweichung Soll/Ist verarbeite ich auch noch die vorhergesagte Tagestemperatur (jeweils 14:00), d.h. die Heizung / Widerstandswert hat schon nachts eine Ahnung davon, ob der nächste Tag knackig kalt sein wird, oder ob es 15°C werden wird. Die Trägheit unserer FBH beträgt 6-8h, d.h. das Heizprogramm fängt um Mitternacht an, bekommt aber die Info mit, wie warm es tagsüber sein wird.

Vielleicht hilft's deine Steuerung noch weiter zu optimieren.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

andies

Das ist ja interessant: was heißt denn ,,nicht einstellbar"? Bei mir habe ich drei Elemente: Außentemperatur (wie bei Dir), dann Innentemperatur (am Regler) sowie Heizkurve (Absolutwert plus Steilheit).

Hast Du das nicht?


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gisbert

Hallo andies,

diese Einstellungen am Heizungsregler habe ich schon, aber die kann ich nur händisch einstellen, das war's.

In der "Übergangs"periode, die sich ja mittlerweile schon zur Hauptperiode entwicklet hat, also +/-10°C, hat meine Gasheizung wie blöde getaktet, da die minmale Heizleistung in der kleinsten Stufe immer noch zu hoch ist. Ich habe gedacht, mach aus der Not eine Tugend, auch wegen der großen Trägheit der Fußbodenheizung, heize in der Nacht stärker, dann ab vormittags schwächer - und das ganze dann auch noch abhängig von der Differenz Soll/Ist-Temperatur und der Vorhersagetemperatur für den nächsten, bzw. aktuellen Tag.
Oft gelingt es das Takten ganz zu vermeiden, heute leider nicht, da hat die Heizung von 8:00-12:00 getaktet, 12 Brennerstarts in 4 Stunden, nicht schön, aber es gibt Schlimmeres.
Also insgesamt ist die Heizung etwas smarter als nur abhängig von der Außentemperatur und der Innentemperatur, in dem die Heizungssteuerung hängt, zu sein.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

andies

Vermutlich schaffe ich das diesen Winter doch nicht, die Heizkurve so meiner vollen Zufriedenheit einzustellen. Ich habe die Werte schon geändert, taste mich aber wirklich nur sehr langsam an R^2=0 und eine von der Aussentemperatur unabhängige Innentemperatur heran. Es ist etwas besser (der Faktor vor x hat sich halbiert!), aber eben nicht perfekt. Genug Temperaturschwankungen hatte ich, aber ich muss weiter daran schrauben.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Elektrolurch

Hallo,

ich habe so einen ähnlichen Ansatz wie Gisbert.

1. Bilde je Raum die Differenz zwischen Ist- und Soll-Temperatur.
2. Je Raum ist ein Leitwert hinterlegt, mit dem die Differenz gewichtet wirt, 0 wenn der Raum nicht berücksichtigt werden soll oder 1.
3. Ich habe eine Funktion, die alle zwei Stunden automatisch oder getriggert durch ein Thermostatprogramm eines Raums - Wechsel von Komfort zu Absenk - Betrieb im Raum - gestartet wird und die Auswertung macht.
4. Abhängig von dem Ergebnis der Funktion "VorlaufTempKontrolle" wird die Vorlauftemperatur der Heizung (Weisshaupt) oder die Betriebsart des Heizkreises (Normal, Absenk, Sommer = aus) gesteuert.

Die Aussentemperatur bleibt unberücksichtigt, da rein der Energiebedarf der Räume ausgewertet wird.
Das hat dann z.B. den Effekt, dass im Winter bei Sonnenschein sich die Räume durch die Einstrahlung so aufwärmen, dass nicht geheizt werden muss und die Heizung die Betriebsart automatisch auf "Sommer" stellt.

Das Geheimnis  der Regelung liegt in dem Perl-Skript "VorlaufTEmpKontrolle". Abhängig von der gemittelten Differenz zwischen Ist- und Soll-Temperatur im Haus wird stufenweise die Vorlauftemperatur der Heizung erhöht / erniedrigt. Unter 35 Grad wird die Heizung auf "Sommer" gestellt.
Wenn die Solaranlage (thermisch) läuft und trotzdem ein Heizbedarf besteht, der durch  Einschalten des Gasbrenners versucht wird zu decken, wird die Heizung auch auf "Sommer" gestellt.
Es macht ja keinen Sinn, den Kessel einerseits durch Solar aufzuheizen, dann aber gleichzeitig auch noch mit Gas Wärme hinzu zufügen.

Elektrolurch
configDB und Windows befreite Zone!

andies

Ihr habt beide, wenn ich das richtig verstehe, keine "außentemperaturgeführte Heizung" - stimmt das? Gisbert hat es mir ja schon geschrieben.

Bei mir regelt sich die Heizung nach der Außentemperatur (Sensor an der Hauswand), der Rücklauftemperatur (Sensor im Gerät) sowie der Heizkurve. Nur die Heizkurve kann ich einstellen, alles andere geht automatisch.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Elektrolurch

Ja, keine Aussentemperatur. Rein der Heizbedarf in den Räumen.
Heizkurve gibt es bei mir nicht, da ich die Heizungsanlage auf manuell gestellt habe, d.h. ich gebe über fhem die Temperatur des Heizkreises vor. Das Haus (BJ 1980) habe ich bezüglich Fenster und Dach modernisiert, so dass der jährliche Verbrauch (anfangs war es noch Öl, jetzt Gas mit Solarunterstützung) von ca. 40000 kWh auf 12000 kWh gesunken ist.
Die "intelligente" Steuerung über fhem bringt ca. 10 % zusätzliche Einsparung.
Oberhalt von 6 C ist mittlerweile so gut wie kaum noch Heizleistung notwendig. Bei 0 C beträgt die Vorlauftemperatur meist so um die 45 C.

Ein komfortabler Effekt der Regelung ist, wenn ich die Thermostate wegen Abwesenheit auf 16 C stelle, so regelt sich die Heizungsanlage automatisch herunter odr schaltet sogar ganz ab.

Elektrolurch
configDB und Windows befreite Zone!

andies

Also, das Prinzip klappt. Jetzt bin ich über das Ziel hinausgeschossen und muss die Kurve wieder zurückdrehen, siehe die Daten der letzten Woche. In der Mitte der beiden Einstellungen von jetzt und vor einer Woche liegt dann der optimale Punkt.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Geschafft. Die Kurve ist unabhängig von der Außentemperatur, sowohl für die Fußbodenheizung wie auch die Temperatur im Rest des Hauses.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

KernSani

Ich hänge mich mal rein... Als Merker für den nächsten Winter (dieses Jahr ist nicht mehr viel mit Heizen, nehme ich an). Ich habe im Prinzip die selbe Situation, Aussentemperatur-gesteuerte Heizung mit einstellbarer Solltemperatur (Haus) und Heizkurve. Fernwärme und überall Fussbodenheizung. Gerade die FBH schreit nach einem systematischem Ansatz, wie dem von dir beschriebenen, da der Effekt von Änderungen an der Heizkurve sich stark verzögert bemerkbar macht (und da können sich andere Faktoren geändert haben).   
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...