Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      RobS last edited by

      857_fbh.png

      das sind die vier Datenpunkte pro Ausgang

      1 Reply Last reply Reply Quote 0
      • 0
        0018 last edited by

        Super Skript Danke!

        Wie Verhält es sich wenn eine Störgröße (Kaminofen) die Regelung beeinfliusst?

        Macht da die ganze Reglung überhaupt Sinn?

        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • 0
            0018 last edited by

            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?

            1 Reply Last reply Reply Quote 0
            • R
              RobS last edited by

              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

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                @0018:

                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

                1 Reply Last reply Reply Quote 0
                • apollon77
                  apollon77 last edited by

                  @RobS:

                  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

                  1 Reply Last reply Reply Quote 0
                  • R
                    RobS last edited by

                    @apollon77:

                    [

                    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:

                    1 Reply Last reply Reply Quote 0
                    • D
                      DJWatson last edited by

                      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.

                      1 Reply Last reply Reply Quote 0
                      • D
                        DJWatson last edited by

                        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.

                        1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 last edited by

                          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.

                          1 Reply Last reply Reply Quote 0
                          • S
                            simpixo last edited by

                            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~~

                            1 Reply Last reply Reply Quote 0
                            • D
                              DJWatson last edited by

                              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.

                              1 Reply Last reply Reply Quote 0
                              • apollon77
                                apollon77 last edited by

                                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. 😉

                                1 Reply Last reply Reply Quote 0
                                • T
                                  Twoxx last edited by

                                  @DJWatson:

                                  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

                                  1 Reply Last reply Reply Quote 0
                                  • Q
                                    quorle last edited by

                                    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.

                                    1 Reply Last reply Reply Quote 0
                                    • apollon77
                                      apollon77 last edited by

                                      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.

                                      1 Reply Last reply Reply Quote 0
                                      • Q
                                        quorle last edited by

                                        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.

                                        1 Reply Last reply Reply Quote 0
                                        • etv
                                          etv last edited by

                                          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

                                          1 Reply Last reply Reply Quote 0
                                          • apollon77
                                            apollon77 last edited by

                                            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.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            665
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            22
                                            83
                                            12701
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo