NEWS
[Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.
-
ich werde es mal testen und berichten
EDIT: Aktuell habe ich ja die Ventile mit meinen HM Wandthermostaten direkt über die CCU2 verknüpft um die Ventile zu steuern. Muss ich diese Verknüpfung jetzt löschen oder kann dieses als "Notlauf" aktiv bleiben?
-
Moin Apollon,
hast du rausfinden können, ob mit ner Timerfunktion der Wired-Aktoren was machbar ist oder sonst vielleicht eine Idee, wie ich das ohne „.on_time“ regeln könnte?
Habe die FBH-Steierung jetzt fast ne Woche im Betrieb und muss sagen, dass es trotz des fehlenden Datenpunktes ziemlich gut funktioniert.
Danke und Grüße, Rob
-
ich werde es mal testen und berichten
EDIT: Aktuell habe ich ja die Ventile mit meinen HM Wandthermostaten direkt über die CCU2 verknüpft um die Ventile zu steuern. Muss ich diese Verknüpfung jetzt löschen oder kann dieses als "Notlauf" aktiv bleiben? `
Musst Du testen. Meine Erkenntnisse waren das die Wandthermostate sicherstellen das es so ist wie Sie es wollen. Also wenn Sie denken es soll aus sein und Du schaltest gesondert (direkt oder per Skript) ein dann haben die kurz drauf ausgeschaltet … Also bei mir hat es parallel nicht geklappt. kannST du ja aber mal manuell testen
-
Moin Apollon,
hast du rausfinden können, ob mit ner Timerfunktion der Wired-Aktoren was machbar ist oder sonst vielleicht eine Idee, wie ich das ohne „.on_time“ regeln könnte?
Habe die FBH-Steierung jetzt fast ne Woche im Betrieb und muss sagen, dass es trotz des fehlenden Datenpunktes ziemlich gut funktioniert. `
Sobald ich mal Zeit und Ruhe finde will ich das umbauen das es auch ohne on_time geht. Bissl geduld bitte
Am Ende heizt er jetzt ggf zuviel weil er immer nur 20 Minuten-Zeitscheiben heizen kann. Also ggf wirst du es ein bissl "zu warm" haben
-
[
Bissl geduld bitte `
Sorry, ich wollte auf keinen Fall hetzen. Ich weiß sehr zu schätzen was du / ihr hier so in der Freizeit leistet!
Ich werde den Thread im Auge behalten :geek:
-
Das ist echt eine super Sache die du da auf die Beine stellst großes Lob dafür. Macht es nicht Sinn die Rücklauftemperatur der einzelnen Heizkreise mit rein zu nehmen ? Dann hat man es genauer und vor allem schneller ehe der Raum überhitzt und man würde ein wenig Trägheit aus der FBH raus nehmen. Die Fliesen geben die Wärme ja über eine längere Zeit an den Raum ab egal ob die Heizung dann aus ist -> Der Raum überhitzt. Man würde damit die Spitzen raus nehmen. Es gab mal ein Kickstarterprojekt hieß glaube ich "Controme" die machen das ähnlich aber lassen sich das auch teuer bezahlen.
-
Habe es mir so vorgestellt die ds18b20 Sensoren messen engmaschig den Rücklauf bis er annähernd der Sollraumtemperatur entspricht dann gehen die Ventile zu. Die Raumthermostat Temperatur ist denen aber übergeortnet heisst wenn durch Sonneneinwirkung oder Gäste die Sollraumtemperatur schon voher erreicht ist stoppt er den Prozess. Ist nur so ein Gedankenspiel weiß nicht ob ich das richtig gedacht habe. Aber wollte die FBH sowieso mit Rücklaufsensoren ausstatten. Wäre schön wenn man die mit reinnehmen könnte.
-
Die Idee hat was, aber ich glaube das fast keiner Rücklaufsensoren pro Heizkreis hat Ich greife im Keller so "halb" den Gesamt Vor-/Rücklauf ab … aber das ist zu ungenau.
-
Das mit der Rücklauftemperatur wäre doch machbar meine Steuerung sitzt im fussbodenverteiler
~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201802 ... 03c136.jpg">https://uploads.tapatalk-cdn.com/20180224/84f26154051cd3e5ec773fcba903c136.jpg</link_text>" />
Man könnte hier doch am Rücklauf und den Vorlauf messen, oder wäre das zu ungenau!?
Gesendet von iPhone mit Tapatalk Pro~~
-
Bei mir wird die auch im Fußbodenverteiler sitzen. Habe eine Eigentumswohnung mit Zentralheizung und würde das Script hauptsächlich zur Einzelraumregelung nutzen. Habe mir extra ein paar Sensoren bestellt und habe noch ein ESP8266 hier rumfliegen Wäre schön wenn man den Rücklauf als Alternative einbringen könnte. Glaube es wäre garnicht so wenige die das nutzen würden.
-
Die eigentliche steuerlogik stammt ja nicht von mir sondern ist aus dem homematic Forum übernommen (siehe erster Beitrag). Bringt die Idee doch dort in dem Thread mal ein. Mal schauen was der Schaffer des Skripts dazu sagt.
Ich verstehe die grundidee mit dem Vorlauf/Rücklauf und je kleiner der Unterschied umso kleiner der „bedarf des Raumbodens an mehr thermischer Energie“ … aber ich hätte keine echte Idee wie man das noch reinbringen sollte.
Ansonsten ist jeder gern eingeladen das Skript zu erweitern.
-
Habe es mir so vorgestellt die ds18b20 Sensoren messen engmaschig den Rücklauf bis er annähernd der Sollraumtemperatur entspricht dann gehen die Ventile zu. Die Raumthermostat Temperatur ist denen aber übergeortnet heisst wenn durch Sonneneinwirkung oder Gäste die Sollraumtemperatur schon voher erreicht ist stoppt er den Prozess. Ist nur so ein Gedankenspiel weiß nicht ob ich das richtig gedacht habe. Aber wollte die FBH sowieso mit Rücklaufsensoren ausstatten. Wäre schön wenn man die mit reinnehmen könnte. `
Hallo DJ Watson,
meine Name ist Twoxx. Ich bin der Entwickler des Original-Scripts dieser Heizungssteuerung im Homematic-Forum.
Ich freute mich sehr das Apollon meine Arbeit hier für ioBroker zur Verfügung stellt und das er sich die Arbeit gemacht hat, das Script zu portieren.
Und natürlich freue ich mich, dass diese Lösung so einen positiven Anklang findet.
Bei der Entwicklung des Scripts hatte ich ebenfalls Deine Gedanken und auch versucht diese umzusetzen.
Ich hatte hierfür an den Rücklauf-Schläuchen Homematic Temperaturmesser angebracht
(HM-WDS30-OT2-SM bzw. HM-WDS30-T-O). Diese messen natürlich nicht direkt die Wassertemperatur, sondern eben aussen am Schlauch die Schlauchtemperatur.
Leider mußte ich feststellen, dass diese Temperaturmesser insgesamt sehr ungenau sind bzw. nicht einheitlich messen. Teilweise unterscheiden sich die Messergebnisse der Temperaturmesser im Vergleich um 1,5 Grad und auch im Vergleich zu den Wandthermostaten gibt es nochmals Unterschiede. Ausserdem war es eine sehr teuere Lösung, abhängig wieviele Heizkreise man besitzt.
Ich hatte deshalb von dieser Variante Abstand genommen und eine andere Lösung in das Script integriert.
Anstatt die Rücklauftemperatur zu messen, rechnet mein Script die WAHRSCHEINLICHE Raumtemperaturentwicklung der nächsten beiden Schaltzyklen des Scripts VORAUS (im Standard also die nächsten 20 Minuten bzw. 40 Minuten - je nachdem welches Intervall man persönlich gewählt hat).
Vom zeitlichen Ablauf her, greift also meine Lösung bereits VOR Deinem Lösungsvorschlag mit der Rücklauftemperatur. Sofern mein Script "vermutet" das die Raumtemperatur innerhalb der nächsten Zeit die Sollemperatur erreichen wird, schaltet es bei den Aktoren bereits "reduzierte Heizzeiten" für die PWM, sodaß kein Überheizen erfolgt.
Siehe hierzu der Original-Teil des Homematic-Scripts:
ACHTUNG! KEIN IOBROKER-CODE, sondern HOMEMATIC-SCRIPT!!
Veröffentlichung dient nur zur Veranschauung!
!---------------------- Einschaltzeit berechnen ----------------- if ((dom.GetObject("isttemperaturEGBuro").Value()) <= (dom.GetObject("solltemperaturEGBuro").Value())) { WriteLine("Isttemperatur kleinergleich solltemperatur"); dom.GetObject("heizleistungEGBuro").State((0.0000 + ((((dom.GetObject("solltemperaturEGBuro").Value() + 0.2000) - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000))); dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000))); dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + ((dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value()) / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()))) dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value()); if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value()) { WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60.0000)); } else { WriteLine("reduzierte heizzeit übernommen"); dom.GetObject("tempdifferenzkalkrealEGBuro").State((0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)))); dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value())); dom.GetObject("neueheizzeitEGBuro").State((0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value()))); if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000) { dom.GetObject("heizzeitEGBuro").State((0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value())); WriteLine("sicherheitshalber 4 Minuten heizen"); } else { dom.GetObject("heizzeitEGBuro").State((0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000))); WriteLine("neueheizzeit übernommen"); } } } else { WriteLine("Isttemperatur größer solltemperatur"); dom.GetObject("heizleistungEGBuro").State((0.0000 + (((dom.GetObject("hochtempEGBuro").Value() - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000))); dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000))); dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + (dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value() / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()))); dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value()); if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value()) { WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60)); } else { WriteLine("reduzierte heizzeit übernommen"); dom.GetObject("tempdifferenzkalkrealEGBuro").State(0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000))); dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value())); dom.GetObject("neueheizzeitEGBuro").State(0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value())); if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000) { dom.GetObject("heizzeitEGBuro").State(0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value()); WriteLine("sicherheitshalber 4 Minuten heizen"); } else { dom.GetObject("heizzeitEGBuro").State(0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000)); WriteLine("neueheizzeit übernommen"); } }
Mein Script versucht so die Trägheit der Fussbodenheizung zu kompensieren.
Wie Du ja selbst geschrieben hast, heizen sich die Fliesen der Fussbodeneizung ja auf und geben weiter Wärme ab. Dies passiert auch, wenn Du rücklauftemperaturgesteuert
die Aktoren abschaltest. Es könnte aber sein, dass hier der Zeitpunkt ebenfalls schon zu spät gewählt ist und der Raum trotzdem zu warm wird, bzw. man müsste wohl mit entsprechendem
OFFSET bei den Temperaturen arbeiten.
Hier kann man natürlich spielen und sofern man den zeitlichen Aufwand betreiben will auch eine passende Lösung entwickeln.
Was mein Script angeht, könnte man hierfür im oben dargestellten Teil des Scripts "eingreifen" und eine entsprechende Schaltzeit bzw. im Teil der Schaltlogik einen Ausschaltbefehl unterbringen.
Da ich leider für IO-Broker nicht programmieren und nicht testen kann, könnte ich so eine Lösung nur für Homematic umsetzen.
Sofern Du meine Lösung bereits umgesetzt hast (und soweit ich das Io-Broker Script von Apollon beurteilen kann, hat er meinen obigen Script-Teil auch in seine Arbeit mit übernommen), Deine Vorlauftemperatur passt und Deine Räume trozdem zu warm sind, dann müssen die Parameter auf Deine Verhältnisse angepasst werden.
Im Homematic Forum habe ich hierfür folgende Beschreibung eingestellt:
` > - Sofern der der Zuschlag bei hochtempEGBuro (im Beispiel +0,5°) zu groß gewählt wird und die aktuelle IST-Temperatur ÜBER der Solltemperatur liegt, kann es vorkommen, dass die Ist-Temperatur weit oberhalb der Soll-Temperatur gehalten wird und nie den Bereich innerhalb der Hysterese erreicht. –> Der Raum bleibt viel zu warm und kann nicht abkühlen.
- Sofern der Abschlag toleranzniederEGBuro (im Beispiel 0,8°) zu groß gewählt wird und die aktuelle IST-Temperatur UNTER der Solltemperatur liegt, kann es vorkommen, dass die IST-Temperatur
weit unterhalb der Soll-Temperatur bleibt und die Raumtemperatung nie den Bereich der Hysterese oder die Solltemperatur erreicht. --> Der Raum bleibt zu kalt.
Die beiden Werte müssen individuell durch Ausprobieren im jeweiligen Raum ermittelt werden. Als Startwerte zum Ausprobieren eigenen sich die im Beispielscript hinterlegten Werte auf jeden Fall.
Hierbei wird davon ausgegangen, dass die Einstellungen der Vorlauftemperatur der Heizung bereits VOR Umsetzung der hier dar gestellten Lösung im entsprechend für die jeweilige Heizung
erforderlichen normalen Rahmen liegen. `
Ich hoffe ich konnte etwas weiterhelfen.
Frdl. Gruß
Twoxx
-
Also ich hätte da auch einmal eine Frage bezüglich des Scriptes, wäre es möglich das Script auch zur Steuerung der Heizventile HM-CC-RT-DN ( Heizthermostate für normale Wandheizkörper )geeignet wäre. Als Profilsteuerung nutze ich das Heizungsscript V2 von looxer01 und würde nun meine Heizthermostate mittels externen Raumthermostat jeweils in einer variablen Zeitvorgabe die neu errechnete Sollwertvorgabe Temp senden.
-
An sich sollten diese "Normalen Heizkörperthermostate" so eine Logik drin haben bzw das ist genau die "Ventilstellung" die die zwischen 0 und 100% einstellen …
Das Skript gibt ja auch keine "neue Solltemperatur" vor, sondern versucht es so einzustellen das die eigentliche Solltemperatur erreicht wird.
-
Du hast schon recht, das die "normalen Regler" schon so eine Logik eingebaut haben ( PI-Regler ). Jedoch Regeln diese in meinen Augen zu ungenau, auch mit Einstellung eines Offset.
-
Servus Apollon77,
nachdem ich mein altes, auf der CCU laufendes Script, langsam austauschen möchte und auf meiner Suche nach Alternativen auf dein Script gestoßen bin, mal ein großes Danke für die Portierung des CCU-Scripts! :!:
Beim Durchackern des Scripts glaube ich alles verstanden zu haben, aber eine Frage noch:
Bei einem Solltemperatur Wechsel wird logischerweise erst "ab dem Wechsel" auf die neue Temperatur geregelt, also da gibt es keine "vorausschauende Funktion", oder?
D.h. wenn ich Absenkungen drinnen hab, muss ich mir die zeitliche Änderung der Solltemperatur selber errechnen/bestimme/ausmessen und dementsprechend früher setzen?
Wenn dem so ist, dann muss ich nur die Logik meines jetzigen Scripts in das Auslesen der Solltemperatur stecken - dieser Wert ist bei mir sowieso eine Variable und nicht im Wandthermostat gespeichert um niemanden dran rumdrehen zu sehen
Liebe Grüße
tom
-
Ich hatte unter viewtopic.php?f=21&t=10112 noch ein weiteres Skript mit AUfheizzeit-Messung und Vorasusteuerung gepostet -das erledigt das Thema wenn die Temperatur hoch soll.
Da ich den Fall bei Absenkung nicht sehe (man will ja das es bis zum Ende warm bleibt) ist das Skript auf "erhöhung" ausgelegt.
-
…spitze, danke dir!
Liebe Grüße
tom
-
Servus Apollon77,
ich hab dein Script nun im Einsatz und es scheint mal ganz gut zu klappen. Ich hab es noch dahingehend modifiziert (bzw. meinen Teil in einem eigenen Script zusammengefasst). dass ich die Heizung erst starte, wenn auch ein Ventil auf geht und wieder stoppe, wenn alle Ventile geschlossen sind. Unsere Heizung, bzw. die Pumpe schaltet sich leider nicht ab, wenn kein Ventil offen ist…so läuft die Pumpe immer gehen geschlossene Ventile.
Das wirft jedoch das Problem auf, dass in der Übergangszeit die vom Script berechneten Heizzeiten natürlich zu gering sind und keine nennenswerten Auswirkungen auf die Temperatur haben, muss doch die Heizung erst "Fahrt aufnehmen".
Nun möchte ich in diesem Fall (Heizung eigentlich aus) die Heizzeiten verlängern, finde jedoch die Stelle nicht wirklich im Script.
Kannst du mir bitte sagen, wo in etwa die errechnete Heizzeit "fertig" ist und wo ich sie dann ggfls verlängern kann?
Liebe Grüße
Tom
PS: das Programm mit seinen, ich sag mal "verschachtelten Variablen" ist für mich einfach zu hoch
-
Puuhhh .. da bin auch ich etwas überfragt. Ich habe ja das Skript auch "Nur" weitestgehend von einem Homematic-Skript (siehe Link) übernommen und in JavaScript umgewandelt.
Von daher wäre @Twoxx wohl der bessere Ansprechpartner dazu. chreib Ihm doch mal hier e PN oder poste deine Frage in dem HM Thread.
Alternativ ist die Frage ob das überhaupt nötig ist. Das Skript hier betrachtet die zurückliegende Temperaturentwicklung und projiziert die Zukunft. Von daher sollte es egal sein weil sich das ganze dann wieder relativiert über die Zeit bzw. alles eh davon abhängt wie gross dein Temperaturunterschied ist den Du ausgleichen musst.