Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (gelöst) Merkervariable inkrementieren - Absturz

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    (gelöst) Merkervariable inkrementieren - Absturz

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

      Hallo zusammen,
      ich versuche für meine Heizung folgendes Skript zu schreiben: Wenn die Heizung zweimal taktet, dann schalte die Heizung aus, wenn an zwei Temperaturmesspunkte es zu kalt wird, schalte die Heizung wieder ein. Das zweimal Takten versuche ich über eine Merkervariable zu lösen, wenn der Merker auf 2 gehen sollte, stürzt der JS Adapter ab...

      Hier mal das Skript (bitte noch von einigen Fragmenten irritieren lassen) und der Absturz dazu:
      createState("javascript.0.Merker_Heizleistung", 0, {
      name: "Merker_Heizleistung",
      type: 'number'
      });

      on({
      id: "javascript.0.minutenZwischenBrennerStarts",
      change: "ne"
      }, async function (obj) {
      var Element2 = (getState("javascript.0.Merker_Heizleistung").val)
      // var Element3;
      var Counterschleife = 0;
      var Heat_on = (getState("km200.0.heatSources.flameStatus").val);
      // var Leistungswert = (getState("km200.0.heatSources.powerSetpoint").val);
      var Brennerstarts = (getState("javascript.0.minutenZwischenBrennerStarts").val);
      // var Raumtemperatur = (getState("fritzdect.0.DECT_116300132384.celsius").val);
      // Weitere Prüfung auf Heizprogramm, Programm soll nur laufen, wenn Heizung aktiv ist

      if (Heat_on == 0) { //Prüfen ob Heizung an ist
          Counterschleife = 1;
          // Prüfung, ob Heizung Taktet, wenn ja, Heizleistung um 2 verringern.
          if (Brennerstarts <= 30) {
              Element2 += 1;
              setState("javascript.0.Merker_Heizleistung", (Element2), true);
              Counterschleife = 2;
          } else {
              Element2 = 0;
              setState("javascript.0.Merker_Heizleistung", (Element2), true);
              Counterschleife = 3;
          }
          while (Element2 >= 2)
      
              setState("km200.0.heatingCircuits.hc2.suWiSwitchMode", (1), true);
      
          Counterschleife = 4;
      }
      
      console.log(Heat_on);
      // console.log(Leistungswert2);
      // console.log(Leistungswert);
      console.log(Brennerstarts);
      // console.log(Raumtemperatur);
      console.log(Element2);
      // console.log(Element3);
      console.log(Counterschleife);
      

      });
      // Wenn Raumtemperatur aber unter 20 Grad ist, Heizleistung erhöhen,
      // wenn Heizung taktet wird Heizleistung dennoch niedriger da Thermostate ausgedreht
      on({
      id: "fritzdect.0.DECT_087610334590.celsius",
      change: "ne"
      }, async function (obj) {
      on({
      id: "fritzdect.0.DECT_116300132384.celsius",
      change: "ne"
      }, async function (obj) {
      // var Element2 = 1;
      var Counterschleife = 0;
      var Heat_on = (getState("km200.0.heatSources.flameStatus").val);
      // var Leistungswert = (getState("km200.0.heatSources.powerSetpoint").val);
      //var Brennerstarts = (getState("javascript.0.minutenZwischenBrennerStarts").val);
      var Raumtemperatur_Mila = (getState("fritzdect.0.DECT_087610334590.celsius").val);
      var Raumtemperatur2_Wohnz = (getState("fritzdect.0.DECT_116300132384.celsius").val);
      // Weitere Prüfung auf Heizprogramm, Programm soll nur laufen, wenn Heizung aktiv ist

          var Zeit = new Date();
          var Stunden = Zeit.getHours();
          var Minuten = Zeit.getMinutes();
          var Minuten_Tag = (Stunden * 60) + Minuten;
      
          var Heizprogramm_E = (getState("km200.0.heatingCircuits.hc2.switchPrograms.E").val);
      
          // getState("von allen Heizprogrammen") -> später, erst mal das Programm nehmen, welches durchgängig an ist.
      
          // getState("km200.0.heatingCircuits.hc2.activeSwitchProgram") wir später benötigt, wenn andere Heizprogramme auch aktiviert sind
      
          var temp = 300; //Heizprogramm_E[703]; // 300 Minuten ab Mitternacht -> 5 Uhr
          var temp_2 = 1200; //Heizprogramm_E[45]; // 1200 Minuten ab Mitternacht -> 20 Uhr geht Heizung aus
      
          //Testschleife zum auslesen des Inhaltes
          for (let i = 0, j = Heizprogramm_E.length; i < j; i++) {
              if (Heizprogramm_E[i] == "1200") {
                  console.log("Stelle ist"[i]);
              }
          }
      
          // if X = X then read switchPrograms array and check against getMinutes, if Minutes = in switchProgramm setpoint check temperature
          // and switch the heat -> auch später, wenn andere Heizprogramme aktivert werden
          if (Heat_on == 1) {
              Counterschleife = 7;
      
              if (Minuten_Tag < temp && Minuten_Tag > temp_2) {
                  Counterschleife = 5;
      
                  if (Raumtemperatur_Mila < 21 && Raumtemperatur2_Wohnz <= 19) {
      
                      setState("km200.0.heatingCircuits.hc2.suWiSwitchMode", (0), true)
                      Counterschleife = 6;
                  }
              }
          }
      
          console.log(Heat_on);
          console.log(Minuten_Tag);
          console.log(temp);
          console.log(temp_2);
          console.log(Heizprogramm_E.length);
          console.log(Raumtemperatur_Mila);
          console.log(Raumtemperatur2_Wohnz);
          console.log(Counterschleife);
      
      });
      

      });

      9e21c6e9-b79b-488c-99ec-c95b3d34bf02-image.png

      htrecksler 1 Reply Last reply Reply Quote 0
      • htrecksler
        htrecksler Forum Testing @mwolle last edited by

        @mwolle könntest du das irgendwie verständlich in Code-Tags setzen? So werde ich da zumindest nicht schlau daraus. Sieht aber nach Endlosschleife aus?

        M 1 Reply Last reply Reply Quote 0
        • M
          mwolle @htrecksler last edited by

          @htrecksler ich habe den jetzt noch mal durch so ein "beautifyer" geschickt...viel besser wirds gerade nicht, aber schon besser als vorher, vlt kannst du schon was sehen?

          M 1 Reply Last reply Reply Quote 0
          • M
            mwolle @mwolle last edited by

            @mwolle keiner eine Idee was der Fehler sein könnte?

            Asgothian 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @mwolle last edited by

              @mwolle

              Ohne das du das komplette Skript sauber in Code tags packst ist es praktisch nicht lesbar.

              Ansonsten hängt das Skript an dieser Stelle bereits:

                  while (Element2 >= 2)
               
                      setState("km200.0.heatingCircuits.hc2.suWiSwitchMode", (1), true);
              
              

              Aus diesem code-Teil kommt das Skript nie heraus, da während der While schleife der Wert "Element2" nie verändert wird. Damit bekommst du bei jedem Trigger der in diesen Code-Teil läuft eine Funktion die nicht beendet wird.

              Dementsprechend geht Dir irgendwann der heap aus.

              A.

              M 1 Reply Last reply Reply Quote 0
              • M
                mwolle @Asgothian last edited by

                @asgothian ja aber das war tatsächlich die richtige Stelle, ich habe die while Schleife ausgetauscht und der Fehler tritt nicht mehr auf.
                Wie geht das mit dem Code-Tags? Ich habe ja den Quellcode aus dem Editor kopiert...

                liv-in-sky 1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @mwolle last edited by

                  @mwolle

                  code tag: https://forum.iobroker.net/post/394912

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  735
                  Online

                  31.9k
                  Users

                  80.1k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  296
                  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