Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage] Fußbodenheizung steuern mit ioBroker

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    771

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    6.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

[Frage] Fußbodenheizung steuern mit ioBroker

Scheduled Pinned Locked Moved Skripten / Logik
30 Posts 6 Posters 8.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by
    #7

    @simpixo:

    nehme ich hier mit dem Thermostat und mit dem Aussenfühler Einfluss auf das Heizverhalten der Fußbodenheizung!? `
    Mit dem Thermostat (Ist- und Sollwert) werden die Heizkreise eines Raumes gesteuert.
    @simpixo:

    Denn mir fehlen die DP der Aktoren in deinem Script `
    Wirklich ?

    var yid = getIdByName(raum + ".Heizventil");
    ...
      if (n < 4 && y > 0) setState(yid, true);  // Mindesteinschaltdauer: 4 Intervalle
      else if (n >= 4 && y <= n) setState(yid, false);
    
    

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    1 Reply Last reply
    0
    • S Offline
      S Offline
      simpixo
      wrote on last edited by
      #8

      @paul53:

      var yid = getIdByName(raum + ".Heizventil");
      ```` `  
      

      Danke Paul53

      muss ich hier die ID des Thermostat eintragen?
      > var yid = getIdByName(raum + ".****Heizventil****");

      Oder wie muss das Ganze aufgebaut werden damit es funktioniert.

      Ich sag ja nicht ohne ein Grund das ich deine Scripte nicht so ganz verstehe :o bei den anderen sind immer die Aktoren ID´s irgendwo im Script verwurschtelt :-) bei dir halt nicht

      Danke schon mal

      Gruß

      Adrian

      1 Reply Last reply
      0
      • paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #9

        Meine Skripte sind so aufgebaut, dass ich mit Datenpunktnamen (common.name) arbeite, die ich im Reiter "Objekte" den Datenpunkten vergeben habe. Beispiel: Ist der Themostat im Raum "Wohnzimmer", gibt es in Javascript die Gruppe "Wohnzimmer" unter der die Skripte für das Wohnzimmer erstellt werden und die Datenpunkte haben die Namen

        "Wohnzimmer.Temperatur" = Istwert-Datenpunkt Thermostat

        "Wohnzimmer.Sollwert" = Sollwert-Datenpunkt Thermostat

        "Wohnzimmer.Heizventil" = Schaltaktordatenpunkt für den thermoelektrischen Stellantrieb

        Wenn Du nicht mit Namen arbeiten möchtest, kannst Du auch die Datenpunkt-ID zuweisen:

        ...
        var xid = 'hm-rpc.0.MEQ1234567.1.TEMPERATURE';
        var wid = 'hm-rpc.0.MEQ1234567.2.SET_TEMPERATURE';
        var yid = 'hm-rpc.0.MEQ2345678.1.STATE';
        ...
        

        Um nur dann an den Aktor zu senden, wenn sich der Zustand ändern soll, sollte noch eine zusätzliche Abfrage erfolgen:

        ...
          var aktor = getState(yid).val;
          if (n < 4 && y > 0 && !aktor) setState(yid, true);  // Mindesteinschaltdauer: 4 Intervalle
          else if (n >= 4 && y <= n && aktor) setState(yid, false);
        } 
        ...
        

        Das ist in dem ursprünglichen Skript nicht anthalten, da ich einen "Umweg" über einen Javascript-Datenpunkt mache.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Reply Last reply
        0
        • T Offline
          T Offline
          tempestas
          wrote on last edited by
          #10

          Oh, unverhohlene Werbung, wie erfrischend.

          Spam Bots sind was feines :lol:

          Entsprechenden werbepost gelöscht, Homoran (Mod)

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Reply Last reply
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            wrote on last edited by
            #11

            @paul53: kannst du die Parameter die ne das Skript etwas erklären ?! Was stellt der alles sicher?

            Stellt der sicher das rechtzeitig ausgeschaltet wird damit es nicht übersteuert? Schaltet es frühzeitig an damit es nicht auskühlt wenn die Temperatur absinkt?

            Will das auch gerade umsetzen …

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            1 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #12

              @apollon77:

              Stellt der sicher das rechtzeitig ausgeschaltet wird damit es nicht übersteuert? Schaltet es frühzeitig an damit es nicht auskühlt wenn die Temperatur absinkt? `
              Das ist kein 2-Punkt-Regler, sondern ein PI-Regler. Wenn die Regelabweichung gering wird, ändert sich das Tastverhältnis (Einschalt- zu Ausschaltdauer), wobei die Periodendauer eine Stunde beträgt. Ist Istwert = Sollwert bleibt das Tastverhältnis konstant.

              Die hohe Trägheit der FBH macht eine Periodendauer der PWM von einer Stunde möglich. Eine kürzere Periodendauer verringert die Lebensdauer der Relais, da diese nur eine begrenzte Anzahl von Schaltspielen vertragen (gilt nicht für Solid state relais).

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              • apollon77A Offline
                apollon77A Offline
                apollon77
                wrote on last edited by
                #13

                Ok, verstehe nur Bahnhof. Muss mich also erstmal einlesen was genau ein pi Regler ist und wie der funktioniert …

                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                1 Reply Last reply
                0
                • Q Offline
                  Q Offline
                  quorle
                  wrote on last edited by
                  #14

                  Muss mich hier auch einmal einklinken.

                  Könnte man das Script so umschreiben, damit man HM-CC-RT-DN (Heizkörperthermostate) damit steuern könnte?

                  Ich regle momentan meine Räume mittels Heizplan. Jetzt würde ich aber zusätzlich noch eine eigene Regelung mit einbinden.

                  Funktionsweise:

                  • Dein Script holt sich die aktuelle Solltemperatur vom Heizplanscript

                  • Dein Script holt sich die IST-Temp vom externen Sensor

                  • Dein Script errechnet die einzustellende Temperatur ( damit der Heizthermostat intern das Ventil öffnen und schließen kann ) und sendet diese an den Thermostat

                  • Die Logik vom Heizplanscript soll nicht berührt werden

                  Da ich keine Wandthermostate benutze ( die ja diese Regellogik integriert haben ) könnte es doch auch eine PI-Regelung, jedoch müsste diese einzustellende Temperatur ausgeben und keine einzustellende Ventilöffnung

                  Wäre dies denn möglich?

                  So sieht dein Script aktuell bei mir aus und ist auf einen State zur Ausgabe gelegt:

                  ! ````
                  // PI-Regler Raumheizung
                  ! // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname
                  //var raum = name.split(".")[2];
                  ! // P-Band in K, Nachstellzeit in s
                  var Xp = 4;
                  var Tn = 600;
                  ! var xid = 'hm-rpc.3.CUX1200003.1.TEMPERATURE';
                  var wid = 'hm-rpc.1.OEQ1712335.4.SET_TEMPERATURE';
                  var yid = 'javascript.0.PI-Regler-Schlafzimmer';
                  ! var  PI = require('pi-controller');
                  ! var pi = new PI(Xp, Tn);
                  pi.setOutputMax(1.0);   // default: OutputMax = 100
                  ! function control() {
                    var x = getState(xid).val;  // Istwert in °C
                    var w = getState(wid).val;  // Sollwert in °C
                    var y = pi.Control(w - x);  // Stellsignal
                    setState(yid, y);
                  }
                  ! control();  // Script start
                  on(xid, control);
                  on(wid, control);
                  ! var timer = null;
                  if (Tn) {
                     timer = setInterval(control, 250 * Tn );
                  }
                  else {
                     if (timer) {
                        clearInterval(timer);
                        timer = null;
                     }

                  
                  ****Die Ausgabe auf den State (PI-Regler-Schlafzimmer):****
                  
                  0.9246725000000009 %
                  1 Reply Last reply
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #15

                    @quorle:

                    Könnte man das Script so umschreiben, damit man HM-CC-RT-DN (Heizkörperthermostate) damit steuern könnte? `
                    Nein, die Ventilstellung kann man nicht beeinflussen, sondern nur anzeigen. Der HKT regelt mit einem internen PI-Regler.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    0
                    • Q Offline
                      Q Offline
                      quorle
                      wrote on last edited by
                      #16

                      Ok, das man die Ventilstellung des Thermostates nicht beeinflussen kann wusste ich, darum wollte ich ja dem Thermostat immer die errechnete Temperatur senden.

                      Man muss den dem PI-Regler so umschreiben können, dass er in Temperaturschritten regelt und ermittelt?

                      Oder gibt es etwas anderes, dass meine Bedürfnisse vielleicht erledigen könnte?

                      Nachtrag:

                      Verbessert mich, wenn ich unrecht habe.

                      bei einer Solltemp vom: 21°C

                      und

                      einer IST-Temp von: 20,4

                      zeigt das Script in der State momentan (aufgerundet): 0,6

                      Die Ausgabe des Scriptes ist ja 0-100% ?

                      Sprich, wenn eine 1 ansteht, sollte dass Ventil 100% offen sein?

                      Oder liege ich hier falsch?

                      1 Reply Last reply
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #17

                        @quorle:

                        Man muss den dem PI-Regler so umschreiben können, dass er in Temperaturschritten regelt und ermittelt? `
                        Den Istwert kann man nicht beeinflussen, sondern nur den Sollwert. Aber der wird ja durch den Thermostaten vorgegeben.
                        @quorle:

                        Die Ausgabe auf den State (PI-Regler-Schlafzimmer):

                        0.9246725000000009 % `
                        Das sind keine Prozent, da
                        @quorle:

                        pi.setOutputMax(1.0);   // default: OutputMax = 100
                        ```` `  
                        

                        Für Prozentausgabe muss der Befehl auskommentiert oder gelöscht werden.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • Q Offline
                          Q Offline
                          quorle
                          wrote on last edited by
                          #18

                          erst einmal vielen Dank für die Hilfe, die man braucht wenn man nicht programmieren kann :lol:

                          Die Prozentausgabe klappt schon einmal ganz gut.

                          Jetzt würde ich noch einen anderen Ansatz mit in mein persönliches Script packen wollen.

                          1.

                          • Die Prozentausgabe auf 2 Nachkommastellen reduzieren

                          2.

                          • Einen Dreisatz einbinden und auf eine State schreiben lassen. Ich habe schon einiges versucht und auch im Internet gesucht, jedoch möchte es einfach nicht klappen.

                          • Der Dreisatz sollte so aussehen: 5/100*die prozentausgabe in Prozent

                          • und das Ergebnis dann auf einen State legen

                          1 Reply Last reply
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #19

                            Zu 1.

                            setState(yid, Math.round(100 * y) / 100;
                            
                            

                            Zu 2.

                            var sw_korrektur = 5 * (y - 50) / 100;  // +/- 2,5 Grad
                            

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Reply Last reply
                            0
                            • Q Offline
                              Q Offline
                              quorle
                              wrote on last edited by
                              #20

                              Ich bin wirklich zu doof für JavaScript.

                              Egal an welche Stelle ich die scriptzeilen einfüge, kommt am state nichts an. In der log steht so auch nichts.

                              „Zu doof für JavaScript“ 😢

                              1 Reply Last reply
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by
                                #21

                                Auf welchem Datenpunkt erwartest Du die Ausgabe ? Du musst erst einen Datenpunkt für den korrigierten Sollwert erzeugen (z.B. im Reiter "Objekte" unter javascript.0). Dann mit setState am Ende der Funktion den Wert setzen:

                                var sw_korrektur = 5 * (y - 50) / 100;  // +/- 2,5 Grad
                                setState('javascript.0.Sollwert_korrigiert', w + sw_korrektur);
                                

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Reply Last reply
                                0
                                • Q Offline
                                  Q Offline
                                  quorle
                                  wrote on last edited by
                                  #22

                                  Also den State hab ich schon länger erstellt.

                                  In den Objekten sieht es bei mir dann so aus:

                                  5278_objekte.png

                                  Nun wird der Ausgang vom PI-Regler in Prozent und mit 2 Nachkommastellen angezeigt –> schon einmal sehr gut.

                                  Aber die Ausgabe der korregierten Sollwerttemperatur ist nicht mir 2 Nachkommastellen.

                                  Mein Script sieht jetzt so aus:

                                  // PI-Regler Raumheizung
                                  
                                  // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname
                                  //var raum = name.split(".")[2];
                                  
                                  // P-Band in K, Nachstellzeit in s
                                  var Xp = 4;
                                  var Tn = 600;
                                  
                                  var xid = 'hm-rpc.3.CUX1200003.1.TEMPERATURE';
                                  var wid = 'hm-rpc.1.OEQ1712335.4.SET_TEMPERATURE';
                                  var yid = 'javascript.0.PI-Regler-Schlafzimmer';
                                  
                                  var  PI = require('pi-controller');
                                  
                                  var pi = new PI(Xp, Tn); 
                                  //pi.setOutputMax(1.0);   // default: OutputMax = 100
                                  
                                  function control() {
                                    var x = getState(xid).val;  // Istwert in °C
                                    var w = getState(wid).val;  // Sollwert in °C
                                    var y = pi.Control(w - x);  // Stellsignal
                                    var sw_korrektur = 6 * (y - 50) / 100;  // +/- 2,5 Grad
                                    setState(yid, y);
                                    setState(yid, Math.round(100 * y) / 100); // Ergebnis vom PI-Regler auf 2 Nachkommastellen
                                    setState('javascript.0.Ausgabe_Temp_von_PI-Regler', w + sw_korrektur); // Ausgabe korregierte Sollwerttemp für Regler
                                  
                                  }
                                  
                                  control();  // Script start
                                  on(xid, control);
                                  on(wid, control);
                                  
                                  var timer = null;
                                  if (Tn) {
                                     timer = setInterval(control, 250 * Tn );
                                  }
                                  else {
                                     if (timer) {
                                        clearInterval(timer);
                                        timer = null;
                                     }
                                  }
                                  
                                  
                                  1 Reply Last reply
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by
                                    #23

                                    @quorle:

                                    Aber die Ausgabe der korregierten Sollwerttemperatur ist nicht mir 2 Nachkommastellen. `
                                    Lösche bitte den Befehl

                                      setState(yid, y);
                                    

                                    Eine Nachkommastelle genügt auch:

                                      setState('javascript.0.Ausgabe_Temp_von_PI-Regler', Math.round(10 * (w + sw_korrektur)) / 10); // Ausgabe korrigierte Sollwerttemp für Regler
                                    
                                    

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    1 Reply Last reply
                                    0
                                    • Q Offline
                                      Q Offline
                                      quorle
                                      wrote on last edited by
                                      #24

                                      @paul53:

                                      @quorle:

                                      Aber die Ausgabe der korregierten Sollwerttemperatur ist nicht mir 2 Nachkommastellen. `
                                      Lösche bitte den Befehl

                                        setState(yid, y);
                                      

                                      Eine Nachkommastelle genügt auch:

                                        setState('javascript.0.Ausgabe_Temp_von_PI-Regler', Math.round(10 * (w + sw_korrektur)) / 10); // Ausgabe korrigierte Sollwerttemp für Regler
                                      
                                      ```` `  
                                      

                                      Woooow :o Super, danke ;) jetzt läuft es. Da sieht man einmal, dass ich mich in die Welt des Javascript noch sehr viel einlesen muss. Ich kann nur Danke sagen.

                                      Aber jetzt noch eine Frage, kann ich die States unter "Objekte" auch in verschieden Ordner packe?

                                      Sprich:

                                      Javascript.0 –> Heizung --> und dann einzelne Ordner für Raumnamen erzeugen?

                                      Sollte doch auch gehen?

                                      Und das Script muss unter Common laufen?

                                      Und kann man vielleicht noch den korregierten Sollwert nur alle 5 Minuten auf einen weiteren State setzen lassen, so dass dieser dann an den Regler gesendet wird?

                                      1 Reply Last reply
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by
                                        #25

                                        @quorle:

                                        kann ich die States unter "Objekte" auch in verschieden Ordner packe?

                                        Javascript.0 –> Heizung --> und dann einzelne Ordner für Raumnamen erzeugen? `
                                        Ja. Wenn Du die Datenpunkte im Reiter "Objekte" anlegst, dann javascript.0 selektieren und den Namen entsprechend vergeben, wobei Punkte im Namen (in der ID) die Ordnerstruktur erzeugen. Beispiel:

                                        Der Name Heizung.Kueche.Ausgabe_Temp_von_PI-Regler erzeugt die ID javascript.0.Heizung.Kueche.Ausgabe_Temp_von_PI-Regler mit dem Ordner Heizung und dem Unterordner Kueche.
                                        @quorle:

                                        Und das Script muss unter Common laufen? `
                                        Nein, Du kannst z.B. eine Gruppe Heizung anlegen und darunter eine Untergruppe mit dem Raumnamen. In dieser Untergruppe erstellst Du dann die raumbezogenen Skripte. Nur unter der Gruppe global kann man keine normalen Skripte erstellen. global ist für häufig verwendete eigene Funktionen vorgesehen.

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        1 Reply Last reply
                                        0
                                        • Q Offline
                                          Q Offline
                                          quorle
                                          wrote on last edited by
                                          #26

                                          Langsam verstehe ich das ganze schon besser, also das mit den Strukturen.

                                          Und kann man vielleicht noch den korregierten Sollwert nur alle 5 Minuten auf einen weiteren State setzen lassen, so dass dieser dann an den Regler gesendet wird? Das man eine "variable" Zeit vorgeben kann?

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          533

                                          Online

                                          32.8k

                                          Users

                                          82.7k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe