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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. (gelöst) Merkervariable inkrementieren - Absturz

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

(gelöst) Merkervariable inkrementieren - Absturz

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 4 Kommentatoren 458 Aufrufe 3 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.
  • M Offline
    M Offline
    mwolle
    schrieb am zuletzt editiert von mwolle
    #1

    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

    htreckslerH 1 Antwort Letzte Antwort
    0
    • M 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

      htreckslerH Offline
      htreckslerH Offline
      htrecksler
      Forum Testing
      schrieb am zuletzt editiert von
      #2

      @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?

      Gruss Hermann

      ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

      M 1 Antwort Letzte Antwort
      0
      • htreckslerH htrecksler

        @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 Offline
        M Offline
        mwolle
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • M mwolle

          @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 Offline
          M Offline
          mwolle
          schrieb am zuletzt editiert von
          #4

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

          AsgothianA 1 Antwort Letzte Antwort
          0
          • M mwolle

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

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von
            #5

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

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            M 1 Antwort Letzte Antwort
            0
            • AsgothianA Asgothian

              @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 Offline
              M Offline
              mwolle
              schrieb am zuletzt editiert von
              #6

              @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-skyL 1 Antwort Letzte Antwort
              0
              • M mwolle

                @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-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #7

                @mwolle

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

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                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

                728

                Online

                32.6k

                Benutzer

                82.2k

                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