Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

[Vorlage] Heizungsthermostatsteuerung 2.1 - Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplateheatingclimate
1.1k Beiträge 115 Kommentatoren 396.9k Aufrufe 61 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    looxer01
    schrieb am zuletzt editiert von
    #309

    @looxer01:

    Ich denke, dass ich es am Ende nochmal anders einbauen werde. (ohne Zufallszahlen) `

    Hi,

    ich habe mich des Themas nochmal angenommen da ich die Befürchtung habe, dass durch die Zufallszahlen auch Überschneidungen des Schedules vorkommen können. Die Wahrscheinlichkeit erhöht sich mit der Anzahl der zu planenden Räume.

    Daher habe ich jetzt folgendes implementiert:

    1. Die schedules werden mit einem Abstand von 2 Sekunden eingeplant

    2. Wenn es mehr als 28 zu heizende Räume gibt (wohl unwahrscheinlich, dann wird angefangen jede Sekunde zu planen

    3. erst ab 59 zu heizenden Räume gibt es Überschneidungen.

    Die Fälle 2 und 3 dürften wohl eher theoretisch sein.

    Wäre schön, wenn jemand testen könnte, ob die 2 Sekunden Abstand reichen. Ich habe bei mir damit kein Problem, hatte ich vorher aber auch nicht.

    Zum Testen einfach wieder die Funktion austauschen:

    ! ````
    //-----------------------------------------------------------------------------------------------------
    // Funktion ExecuteTempDetermination checkt ob eineThermostat/Raum Temperatur manuell angpasst wurde
    //-----------------------------------------------------------------------------------------------------
    function ExecuteTempDetermination(roomName, id) {
    var ActiveRoomProfile;
    var ScheduledSollTemp;
    ! // Findung des aktuellen RaumProfiles
    ActiveRoomProfile = ActiveProfile(roomName); // Ermittlung des aktiven Raumprofils
    //die geplante Soll Temperatur aus dem Raumschedule aus dem aktuellen Profil ermitteln
    ScheduledSollTemp = SelectSwitchTime(roomName, ActiveRoomProfile, "CurrSollTemp",id); // Ermittlung der geplanten Solltemperatur
    if (debug) {
    log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach Switchtime: " + ScheduledSollTemp + " Findung " + Source_SchedulePoint, "info");
    }
    // Schauen ob die ermittelte Temperatur angepasst werden muss z.B. party Gaeste etc
    ScheduledSollTemp = OverruleSollTemp(roomName, ActiveRoomProfile, ScheduledSollTemp, id); //Global und Profilparameter koennen den schedule uebersteuern
    if (debug) {
    log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach overrule: " + ScheduledSollTemp+ " Findung " + Source_GlobalParameter, "info");
    }
    ! // jetzt die Temperatur dem Thermostat uebermitteln
    SetTemp(roomName, ScheduledSollTemp, id, true); // jetzt die Temperatur schalten
    ! if (NextSchedules[roomName]) {
    if (debug) { log("Schedule gelöscht für " + roomName, "info"); }
    clearSchedule(NextSchedules[roomName]);
    NextSchedules[roomName] = null;
    }
    // jetzt Delay-Sekunden ermitteln, um die Schedules nicht gleichzeitig auszuführen
    var delaysek=0;
    var z = 1;
    for (var roomCheck in rooms) { // loop ueber all Raeume
    roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen
    if ( roomCheck === roomName) {
    delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6....
    if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht
    delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen
    }
    if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum
    delaysek = 0;
    }
    break;
    }
    z = z + 1
    }//endfor roomcheck

    // jetzt die Cron Pattern bestimmen und einplanen
    var schedArr = Source_SchedulePoint.split("_"); // [0]=Mo, [1]=00:00:00
    schedArr[1] = schedArr[1].substr(0,6) + delaysek;
    var nextSchedule = parseInt(schedArr[1].substr(6, 2), 10) + " " + parseInt(schedArr[1].substr(3, 2), 10) + " " + parseInt(schedArr[1].substr(0, 2), 10) + " * * *";
    if (debug) { log("Setze Schedule für nächste Planzeit " + nextSchedule + " für Raum " + roomName, "info"); }
    NextSchedules[roomName] = schedule(nextSchedule, function() {
        if (debug) { log("Schedule Triggered für nächste Planzeit für Raum " + roomName, "info"); }
        TriggerUpdate(roomName);
    });
    

    } // ende Funktion

    ! ````

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      passuff
      schrieb am zuletzt editiert von
      #310

      @looxer01:

      @looxer01:

      Ich denke, dass ich es am Ende nochmal anders einbauen werde. (ohne Zufallszahlen) `

      Hi,

      ich habe mich des Themas nochmal angenommen da ich die Befürchtung habe, dass durch die Zufallszahlen auch Überschneidungen des Schedules vorkommen können. Die Wahrscheinlichkeit erhöht sich mit der Anzahl der zu planenden Räume.

      Daher habe ich jetzt folgendes implementiert:

      1. Die schedules werden mit einem Abstand von 2 Sekunden eingeplant

      2. Wenn es mehr als 28 zu heizende Räume gibt (wohl unwahrscheinlich, dann wird angefangen jede Sekunde zu planen

      3. erst ab 59 zu heizenden Räume gibt es Überschneidungen.

      Die Fälle 2 und 3 dürften wohl eher theoretisch sein.

      Wäre schön, wenn jemand testen könnte, ob die 2 Sekunden Abstand reichen. Ich habe bei mir damit kein Problem, hatte ich vorher aber auch nicht.

      Zum Testen einfach wieder die Funktion austauschen:

      ! ````
      //-----------------------------------------------------------------------------------------------------
      // Funktion ExecuteTempDetermination checkt ob eineThermostat/Raum Temperatur manuell angpasst wurde
      //-----------------------------------------------------------------------------------------------------
      function ExecuteTempDetermination(roomName, id) {
      var ActiveRoomProfile;
      var ScheduledSollTemp;
      ! // Findung des aktuellen RaumProfiles
      ActiveRoomProfile = ActiveProfile(roomName); // Ermittlung des aktiven Raumprofils
      //die geplante Soll Temperatur aus dem Raumschedule aus dem aktuellen Profil ermitteln
      ScheduledSollTemp = SelectSwitchTime(roomName, ActiveRoomProfile, "CurrSollTemp",id); // Ermittlung der geplanten Solltemperatur
      if (debug) {
      log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach Switchtime: " + ScheduledSollTemp + " Findung " + Source_SchedulePoint, "info");
      }
      // Schauen ob die ermittelte Temperatur angepasst werden muss z.B. party Gaeste etc
      ScheduledSollTemp = OverruleSollTemp(roomName, ActiveRoomProfile, ScheduledSollTemp, id); //Global und Profilparameter koennen den schedule uebersteuern
      if (debug) {
      log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach overrule: " + ScheduledSollTemp+ " Findung " + Source_GlobalParameter, "info");
      }
      ! // jetzt die Temperatur dem Thermostat uebermitteln
      SetTemp(roomName, ScheduledSollTemp, id, true); // jetzt die Temperatur schalten
      ! if (NextSchedules[roomName]) {
      if (debug) { log("Schedule gelöscht für " + roomName, "info"); }
      clearSchedule(NextSchedules[roomName]);
      NextSchedules[roomName] = null;
      }
      // jetzt Delay-Sekunden ermitteln, um die Schedules nicht gleichzeitig auszuführen
      var delaysek=0;
      var z = 1;
      for (var roomCheck in rooms) { // loop ueber all Raeume
      roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen
      if ( roomCheck === roomName) {
      delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6....
      if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht
      delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen
      }
      if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum
      delaysek = 0;
      }
      break;
      }
      z = z + 1
      }//endfor roomcheck

      // jetzt die Cron Pattern bestimmen und einplanen
      var schedArr = Source_SchedulePoint.split("_"); // [0]=Mo, [1]=00:00:00
      schedArr[1] = schedArr[1].substr(0,6) + delaysek;
      var nextSchedule = parseInt(schedArr[1].substr(6, 2), 10) + " " + parseInt(schedArr[1].substr(3, 2), 10) + " " + parseInt(schedArr[1].substr(0, 2), 10) + " * * *";
      if (debug) { log("Setze Schedule für nächste Planzeit " + nextSchedule + " für Raum " + roomName, "info"); }
      NextSchedules[roomName] = schedule(nextSchedule, function() {
          if (debug) { log("Schedule Triggered für nächste Planzeit für Raum " + roomName, "info"); }
          TriggerUpdate(roomName);
      });
      

      } // ende Funktion

      ! ```` `

      führt bei mir zu folgenden Fehlermeldungen:

      13:15:49.049 [error] javascript.0 at ManAdjustments (script.js.common.Heizungssteuerung:1034:68)

      13:15:49.049 [error] javascript.0 at LoopDevices (script.js.common.Heizungssteuerung:863:18)

      13:15:49.049 [error] javascript.0 at LoopRooms (script.js.common.Heizungssteuerung:763:13)

      13:15:49.050 [error] javascript.0 at Object. (script.js.common.Heizungssteuerung:419:9)

      1 Antwort Letzte Antwort
      0
      • L Offline
        L Offline
        looxer01
        schrieb am zuletzt editiert von
        #311

        @passuff:

        führt bei mir zu folgenden Fehlermeldungen: `

        Hi,

        Die Fehler sind leider nicht selbsterklärend. Sieht so aus, dass an der Stelle der Subscriptions was schief geht.

        Allerdings ist keine subscriptionsrelevante Aenderung in der Funktion angefasst worden. Daher bin ich da gerade ratlos.

        schick mir doch mal deine Programmversion. Schaue ich mir dann an.

        Hat sonst noch jemand Fehler mit der Funktion ?

        vG Looxer

        1 Antwort Letzte Antwort
        0
        • eric2905E Offline
          eric2905E Offline
          eric2905
          schrieb am zuletzt editiert von
          #312

          Hi,

          ich hatte jetzt auch wieder Probleme mit dem automatischen Umschalten.

          Ich habe das Gefühl, das die ganzen Subscriptions (zusammen mit vielen anderen) für die eine JavaScript-Instanz zu viel war.

          Habe Dein Script jetzt auf einem eigenen ioBroker-Host (Multihost-Umgebung) mit eigener JS-Instanz umgezogen. Mal sehen, wie es jetzt läuft.

          Gruß,

          Eric

          Roses are red, violets are blue,

          if I listen to metal, my neighbours do too

          1 Antwort Letzte Antwort
          0
          • L Offline
            L Offline
            looxer01
            schrieb am zuletzt editiert von
            #313

            @eric2905:

            ich hatte jetzt auch wieder Probleme mit dem automatischen Umschalten. `
            Hi Eric,

            ich vermute eher, dass es daran liegt, dass eben auch zufällig Schedules gleichzeitig liegen können. (Zufallsfunktion)

            Daher habe ich die Funktion angepasst und die Verschiebung ist jetzt für jeden Raum immer Gleich.

            Also z.B. Schlafzimmer hat dann immer plus 8 Sekunden.- Abhängig von der Position des Raumes in der Raumliste.

            (4.Position z.B. mal 2 Sekunden = 8 Sekunden)

            Die Subscriptions an sich bzw die schedules sollten nicht wirklich Performance Probleme auslösen.

            Daher glaube ich eher, dass es an Schedule-Überschneidungen liegt.

            Hast du schon die neue Funktion probiert. Läuft die ohne Fehler bei dir ?

            Ich weiss auch nicht ob die 2 Sekunden Abstand ausreichend sind. Daher wäre ein Test klasse.

            vG Looxer

            1 Antwort Letzte Antwort
            0
            • eric2905E Offline
              eric2905E Offline
              eric2905
              schrieb am zuletzt editiert von
              #314

              Hi,

              die neue Funktion läuft ohne Probleme, sofern der Raum überhaupt „angesprungen“ wurde.

              Mittels Pushover habe ich Verschiebungen gesehen, aber es fehlten ab und an halt wieder mal Räume.

              Da ich über 40 Scripte auf der einen JS-Instanz laufen habe (die nimmt sich über 150 MB RAM), denke ich eher an ein Problem in Richtung „zu viel Subscriptions“, o.ä.

              Mal sehen, wie es sich jetzt verhält.

              Gruß,

              Eric

              Roses are red, violets are blue,

              if I listen to metal, my neighbours do too

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                passuff
                schrieb am zuletzt editiert von
                #315

                @passuff:

                führt bei mir zu folgenden Fehlermeldungen:

                13:15:49.049 [error] javascript.0 at ManAdjustments (script.js.common.Heizungssteuerung:1034:68)

                13:15:49.049 [error] javascript.0 at LoopDevices (script.js.common.Heizungssteuerung:863:18)

                13:15:49.049 [error] javascript.0 at LoopRooms (script.js.common.Heizungssteuerung:763:13)

                13:15:49.050 [error] javascript.0 at Object. (script.js.common.Heizungssteuerung:419:9) `

                Sorry, war ein copy & paste Fehler. Das Skript funktioniert.

                1 Antwort Letzte Antwort
                0
                • eric2905E Offline
                  eric2905E Offline
                  eric2905
                  schrieb am zuletzt editiert von
                  #316

                  Hi looxer01,

                  es wurde wieder ein Raum "ausgelassen".

                  Wie, nach welcher Logik, werden die Räume abgearbeitet?

                  Ich habe die Räume jetzt mal fest eingetragen und die Raumliste aktiviert.

                  Morgen früh mal sehen, ob jetzt alles geschaltet wird, wie es soll.

                  Gruß,

                  Eric

                  Roses are red, violets are blue,

                  if I listen to metal, my neighbours do too

                  1 Antwort Letzte Antwort
                  0
                  • L Offline
                    L Offline
                    looxer01
                    schrieb am zuletzt editiert von
                    #317

                    @eric2905:

                    Wie, nach welcher Logik, werden die Räume abgearbeitet? `
                    Hi Eric,

                    Wenn ein Sensor geöffnet ist oder eine manuelle Temperatur eingestellt ist, dann wir der schedule nicht ausgeführt.

                    VG locxer

                    Von unterwegs

                    1 Antwort Letzte Antwort
                    0
                    • eric2905E Offline
                      eric2905E Offline
                      eric2905
                      schrieb am zuletzt editiert von
                      #318

                      Hi Looxer,

                      ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr), und immer wieder zwei Räume auffällig sind (einer, „Schlafzimmer“, öfter und „Bad“ seltener). Alle anderen sieben Räume laufen ohne Probleme.

                      Keine manuelle Änderung - das funktioniert problemlos.

                      Gruß,

                      Eric

                      Roses are red, violets are blue,

                      if I listen to metal, my neighbours do too

                      1 Antwort Letzte Antwort
                      0
                      • L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #319

                        @eric2905:

                        ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr `
                        Hi Eric,

                        Moeglichweise reichen die 2 Sek bei dir nicht.

                        Werde mal eine Variante machen. Wie viel Räume hast du ?

                        Vg looxer

                        1 Antwort Letzte Antwort
                        0
                        • eric2905E Offline
                          eric2905E Offline
                          eric2905
                          schrieb am zuletzt editiert von
                          #320

                          @looxer01:

                          Werde mal eine Variante machen. Wie viel Räume hast du ? `
                          Ich habe 9 Räume drin.

                          Gib mir die Codestelle, die ich ändern muss, dann mache ich das.

                          Gruß,

                          Eric

                          Roses are red, violets are blue,

                          if I listen to metal, my neighbours do too

                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #321

                            @eric2905:

                            Ich habe 9 Räume drin.

                            Gib mir die Codestelle, die ich ändern muss, dann mache ich das. `

                            Trag hier:

                            delaysek = z * 2;

                            Statt 2 einfach 6 ein.

                            Das ist das Max. Ich muss dann mal auch Minuten einbeziehen. Ist aber aufwendiger

                            Vg looxer

                            1 Antwort Letzte Antwort
                            0
                            • Q Offline
                              Q Offline
                              quorle
                              schrieb am zuletzt editiert von
                              #322

                              Guten Morgen liebe Gemeinde,

                              ich hätte wieder einmal ein kleines Anliegen bzw. Problemchen.

                              Und zwar wollte ich heute einen Raum umstellen auf einen 3-Punkt-Regler. Der 3-Punkt-Regler ist ein eigenes Script was die aktuell gemessene Raumtemperatur ( hm-rpc.1.CUX1200001.1.TEMPERATURE ) nimmt und den aktuell vorgegebenen Solltemperaturwert vom Heizungsscript mit dazu nimmt und dann einen neuen Teperaturwert liefert, der in eine Variable ( javascript.0.Ausgabe_neuesScript_Sollwert_Temp_an_Regler ) geschrieben wird. Dies funktioniert auch soweit ganz gut, jedoch wie bekomme ich die neue Vorgabe in das Heizungsscript, sodass dieses dann an die Regler schickt? Oder wäre dies zu umständlich und ich sollte den neuen Wert einfach aus dem Script des 3-Punkt-Reglers an die einzelnen Regler senden?

                              Ausserdem stellt das Heizungsscript leider die Regler nicht mehr automatisch in den manuellen Modus, den man ja eigentlich benötigt, oder?

                              1 Antwort Letzte Antwort
                              0
                              • L Offline
                                L Offline
                                looxer01
                                schrieb am zuletzt editiert von
                                #323

                                @quorle:

                                edoch wie bekomme ich die neue Vorgabe in das Heizungsscript, sodass dieses dann an die Regler schickt? Oder wäre dies zu umständlich und ich sollte den neuen Wert einfach aus dem Script des 3-Punkt-Reglers an die einzelnen Regler senden? `

                                Hi,

                                bin zur Zeit unterwegs. Daher habe ich nicht alle details parat.

                                Diese Anforderung ist im Script realsiert. Dazu gibt es einen Datenpunkt, den du füllen kannst. Das Script stellt dann die Temp ein.

                                Dies Temp wird als manuelle Temp interpretiert. Dazu muss dann die Dauer der manuellen Temp entsprechend festgelegt werden. (je nachdem wie häufig du die Aktualisierung machst)

                                Schau mal dazu in das Fussbodenheizungsscript von apollon77. Das macht es genau so.

                                @quorle:

                                Ausserdem stellt das Heizungsscript leider die Regler nicht mehr automatisch in den manuellen Modus, den man ja eigentlich benötigt, oder? `
                                Das muss ich mir beizeiten ansehen. Kann aber etwas dauern.

                                vG Looxer

                                1 Antwort Letzte Antwort
                                0
                                • eric2905E Offline
                                  eric2905E Offline
                                  eric2905
                                  schrieb am zuletzt editiert von
                                  #324

                                  Hi looxer,

                                  @looxer01:

                                  Trag hier:

                                  delaysek = z * 2;

                                  Statt 2 einfach 6 ein.

                                  Das ist das Max. Ich muss dann mal auch Minuten einbeziehen. Ist aber aufwendiger `
                                  wo soll denn das "delaysec" stehen?

                                  Weder im Original-Script noch in Deiner Erweiterung (https://forum.iobroker.net/viewtopic.php?f=21&t=10096&start=300#p130210) finde ich das.

                                  Edit / Nachztrag:

                                  Ich finde diese Zeile:

                                  var ZufallSek = Math.floor(Math.random() * (30 - 1 + 1)) + 1; 
                                  

                                  Meinst Du diese?

                                  Gruß,

                                  Eric

                                  Roses are red, violets are blue,

                                  if I listen to metal, my neighbours do too

                                  1 Antwort Letzte Antwort
                                  0
                                  • L Offline
                                    L Offline
                                    looxer01
                                    schrieb am zuletzt editiert von
                                    #325

                                    Hi,
                                    @eric2905:

                                    wo soll denn das "delaysec" stehen?

                                    Weder im Original-Script noch in Deiner Erweiterung (hier) finde ich das. `

                                    steht in der letzten Erweiterung:

                                    ! for (var roomCheck in rooms) { // loop ueber all Raeume roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen if ( roomCheck === roomName) { delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6.... if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen } if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum delaysek = 0; } break; } z = z + 1 }//endfor roomcheck !

                                    1 Antwort Letzte Antwort
                                    0
                                    • Q Offline
                                      Q Offline
                                      quorle
                                      schrieb am zuletzt editiert von
                                      #326

                                      Hey, erst einmal Danke für deine Antwort und Hilfe.

                                      Kein Thema, ich kenne das mit der Arbeit zu gut ;)

                                      Also du meinst wohl den State: javascript.0.Heizung.Heizplan.Schlafzimmer.View_Manually_Adjusted (Im View manuell eingestellte Temperatur - 0=reset ) auf diesen habe ich einmal Testweise den neuen Wert geschickt im Intervall von 5 Minuten und die Gültigkeit auf 4 Minuten gestellt. Aber anstatt 16 °C stellt er 20°C ein und wenn die Zeit abgelaufen ist nimmt er den neuen Wert im Anschluss nicht mehr an.

                                      Ich werde mir das Script von Apollon77 genauer ansehen, aber im ersten Moment zielt es eher auf Stellventile, als auf Heizthermostate.

                                      Mein PI-Regler sieht momentan so aus ( Funktion zu 100 % gegeben ), stammt von Paul53, der mir auch bei den Abänderungen geholfen hat.

                                      // PI-Regler Raumheizung für Kaskade Raumsensor - HKT-Temperatur
                                      
                                      // P-Band in K, Nachstellzeit in s
                                      const Xp = 4;
                                      const Tn = 1200; // 40 Minuten 1200 // 120 --> 30 Sekunden
                                      
                                      const xid = 'hm-rpc.1.CUX1200001.1.TEMPERATURE';
                                      const wid = 'javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp';
                                      const yid = 'javascript.0.Heizung.Heizplan.Schlafzimmer.View_Manually_Adjusted';
                                      
                                      const  PI = require('pi-controller');
                                      
                                      var pi = new PI(Xp, Tn);
                                      pi.setOutputMax(5.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) - 2;  // +3 / -2 Grad
                                        y = Math.round(2 * (w + y)) / 2;  // Auflösung 0,5 Grad (Thermostat)
                                        setState(yid, y);
                                      }
                                      
                                      control();  // Script start
                                      // on() auskommentiert, denn es soll nur alle 10 Minuten an Thermostat gesendet werden
                                      // on(xid, control);
                                      // on(wid, control);
                                      
                                      var timer = null;
                                      if (Tn) {
                                         timer = setInterval(control, 250 * Tn );
                                      }
                                      else {
                                         if (timer) {
                                            clearInterval(timer);
                                            timer = null;
                                         }
                                      }
                                      
                                      
                                      1 Antwort Letzte Antwort
                                      0
                                      • eric2905E Offline
                                        eric2905E Offline
                                        eric2905
                                        schrieb am zuletzt editiert von
                                        #327

                                        Hi,

                                        @looxer01:

                                        steht in der letzten Erweiterung: `
                                        shit, habe ich völlig überlesen .. und natürlich auch noch nicht eingebaut … wird sofort nachgeholt.

                                        Gruß,

                                        Eric

                                        Roses are red, violets are blue,

                                        if I listen to metal, my neighbours do too

                                        1 Antwort Letzte Antwort
                                        0
                                        • W Offline
                                          W Offline
                                          Wildbill
                                          schrieb am zuletzt editiert von
                                          #328

                                          Hi,

                                          erstmal muss ich sagen, dass das Script einfach wunderbar läuft, vielen Dank dafür. Da ich mir ab und an die Logs von ioBroker anschaue, ist mir nun aber aufgefallen, dass ich regelmäßig eine Meldung bekomme, die ich mir nicht erklären kann:

                                          javascript.0	2018-03-16 01:52:22.389	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist false fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                          javascript.0	2018-03-16 01:50:33.954	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist true fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                          javascript.0	2018-03-16 05:05:16.233	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist false fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                          javascript.0	2018-03-16 05:05:11.735	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist true fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                          

                                          Das ganze wiederholt sich täglich einmal um 1:50 Uhr und einmal um 5:05 Uhr. Das komische ist, die Meldung kommt immer nur für diesen einen Sensor, und bei dem handelt es sich um einen optischen Tür-Fensterkontakt. Wüsste also nicht, was der mit Calc (=Entkalungsfahrt?) zu tun haben könnte. Die Zeiten sind nun auch nicht gerade Zeiten, bei denen irgendwo für die Heizung oder gar ioBroker besondere Events geplant wären…

                                          Woher kommt es, dass dieser Sensor zu dieser Meldung führt und was könnte ich dagegen tun?

                                          Gruss, Jürgen

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          250

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe