NEWS
[Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.
-
Skript in Beitrag #1 aktualisiert, siehe auch Changelog im zweiten Beitrag:
Fix weil teilweise Timouts doppelt entstehen konnten. Sollte jetzt nicht mehr vorkommen.
-
Hi Apollon,
erstmal vielen Dank für deine großartige Arbeit. Ich hatte schon länger vor unsere FBH smart zu machen und konnte mich dank deines Skriptes und deiner Erklärungen jetzt endlich daran wagen.
Seit gestern Abend läuft das Skript und die Ventile sind immerhin schon aufgegangen und es wurde geheizt.
Wo ich nicht ganz hinter gekommen bin ist, wo du den Datenpunkt XXX.ON_TIME herbekommst. Unter Objekten ist er bei mir nicht zu finden. Ich hatte versucht einfach mit Copy/Paste .STATE durch .ON_TIME zu ersetzen, was aber zu einer Warnung führt: state "XXX.ON_TIME" not found.
Ich benutze zur Steuerung der Ventile 12/7er HM-Wired-Aktoren.
Wäre nett, wenn du mir ein bißchen auf die Sprünge helfen könntest.
Grüße, Rob
-
Welche Datenpunkte hat denn so ein 12/7er Channel bei eurer. Schick mal Screenshot
-
HM-Wired-Aktoren haben keinen ON_TIME-Datenpunkt.
-
Aber haben angeblich „timerfunktion“ ?! Ich baue heute Abend mal was ein
-
das sind die vier Datenpunkte pro Ausgang
-
Super Skript Danke!
Wie Verhält es sich wenn eine Störgröße (Kaminofen) die Regelung beeinfliusst?
Macht da die ganze Reglung überhaupt Sinn?
-
Das sollte Problemlos gehen. Dazu ggf auch mal in dem Homematic-Forum Thread lesen.
Das Skript schaut sich aktuell alle 20 Minuten die Temperaturentwicklung an und entscheidet dann was zu tun ist. Wenn also der kaminofen in der zeit gut geheizt hat dann wird das Skript im Zweifel sagen "uuii das ging ja fix, ich rehne mal hoch wie die Temperatur bei der Entwicklung in 20 Minuten ist … oohh zu warm dann höre ich mal auf zu heizen" oder so
Das ist diese Idee von dem Skript das es 20-60 Minuten der Vergangenheit nutzt um hochzurechnen was wie passiert in der Zukunft und daraus abzuleiten was jetzt getan werden muss.
Versuch es mal.
-
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