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. Script zum Hochzählen bzw. Rundzählen einer Variable

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Script zum Hochzählen bzw. Rundzählen einer Variable

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 2 Kommentatoren 4.3k Aufrufe 1 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.
  • andreA Offline
    andreA Offline
    andre
    Developer
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich scheitere gerade an einer vermeintlich einfachen Problemstellung.

    Ich lasse mir in Vis drei Widgets auf Basis einer Variable für die Sichtbarkeit anzeigen:

    Widget 1 ist sichtbar wenn Variable = 1

    Widget 2 ist sichtbar wenn Variable = 2

    Widget 3 ist sichtbar wenn Variable = 3

    Die Variable setze ich derzeit mit entsprechenden Buttons.

    Jetzt wollte ich das Ganze auf eine neue Ebene bringen und die Variable automatisch durch schalten lassen:

    Variable beginnt mit 1, nach 10 Sekunden Wert 2, nach 10 Sekunden Wert 3, nach 10 Sekunden Wert 1, nach 10 Sekunden Wert 2,… usw.... immer fleißig im Kreis.

    Ich habe schon verschiedene Ansätze versucht. Am besten/ zuverlässigsten war eine Funktion mit einer "IF-Kette" die alle 10 Sekunden aufgerufen wird und mittels IF prüft in welchem Status die Variable gerade ist und dann entsprechend den neuen Wert setzt. Das Funktioniert auch einigermaßen, aber scheint mir nicht der cleverste Ansatz zu sein. Gerade wenn man die Anzahl der durch zu schaltenden Werte noch erhöhen will. :)

    Deshalb meine Frage an die JavaScript-Profis da draußen. Wie kann man die oben genannte Problemstellung am effektivsten umsetzen. Oder ist es vielleicht doch keine so schlechte Idee eine Funktion alle 10 Sekunden wieder auf zu rufen?

    Ich hatte auch den Ansatz einer FOR-Schleife (Habe ich in der Berufsschule mal in Anwendungsentwicklung von gehört :D). Leider scheiterte es dabei schon an der richtigen Syntax. Wäre das eine möglich Alternative zur IF-Kette?

    MfG,

    André

    Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Vielleicht so:

      var count = 1;
      var max = 3;
      
      function counter() {
        if(count < max) count++;
        else count = 1;
      }
      
      setInterval(counter, 10000);  // alle 10 s
      
      

      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 Antwort Letzte Antwort
      0
      • andreA Offline
        andreA Offline
        andre
        Developer
        schrieb am zuletzt editiert von
        #3

        @paul53:

        Vielleicht so:

        var count = 1;
        var max = 3;
        
        function counter() {
          if(count < max) count++;
          else count = 1;
        }
        
        setInterval(counter, 10000);  // alle 10 s
        
        ```` `  
        

        OK, danke. Das kannte ich noch nicht. Mal sehen ob ich meine Funktion noch austausche. :)

        Habe jetzt per "Try & Error" und dem Zusammenkopieren aus verschiedenen Scripten was zusammen geschustert. Meine Funktion zum Hochzählen läuft soweit. Jetzt wollte ich mit ein paar Buttons die Möglichkeit haben das Hochzählen zu unterbrechen und einen entsprechenden Wert für die Viewanzeige setzen (Um manuell eine bestimmte Ansicht aus zu wählen). Leider scheint der letzte Teil meines Scripts nicht zu funktionieren. Das Script zählt einfach weiter hoch. Erkennt vielleicht jemand auf den ersten Blick einen Denkfehler?

        ! // Script zum Setzen einer Variable zum Durchschalten von Views in Vis ! // Datenpunkte anlegen createState('vis.viewwechsel.auto', true, {name: 'Viewwechsel automatisch?'}); createState('vis.viewwechsel.view', 0, {name: 'Aktuell angezeigte View'}); createState('vis.viewwechsel.button0', false, {name: 'Button für View 0 gedrückt?'}); createState('vis.viewwechsel.button1', false, {name: 'Button für View 1 gedrückt?'}); createState('vis.viewwechsel.button2', false, {name: 'Button für View 2 gedrückt?'}); createState('vis.viewwechsel.button3', false, {name: 'Button für View 3 gedrückt?'}); createState('vis.viewwechsel.button4', false, {name: 'Button für View 4 gedrückt?'}); ! // Datenpunkt-IDs var idAuto = "javascript.0.vis.viewwechsel.auto"; var idView = "javascript.0.vis.viewwechsel.view"; var idButton0 = "javascript.0.vis.viewwechsel.button0"; var idButton1 = "javascript.0.vis.viewwechsel.button1"; var idButton2 = "javascript.0.vis.viewwechsel.button2"; var idButton3 = "javascript.0.vis.viewwechsel.button3"; var idButton4 = "javascript.0.vis.viewwechsel.button4"; ! // Variablendeklaration und Initialisierung bei Scriptstart var stateAuto = getState(idAuto).val; var stateView = getState(idView).val; var stateButton0 = getState(idButton0).val; var stateButton1 = getState(idButton1).val; var stateButton2 = getState(idButton2).val; var stateButton3 = getState(idButton3).val; var stateButton4 = getState(idButton4).val; ! // Funktion zum Hochzählen der Nummer für die anzuzeigende View function viewwechsel() { if (stateAuto === true) { var status = 0; if (stateView === 0) status = 1; if (stateView === 1) status = 2; if (stateView === 2) status = 3; if (stateView === 3) status = 4; if (stateView === 4) status = 0; setState(idView, status); } } ! // Aufrufen der Funktion zum Hochzählen alle 10 Sekunden function countup() { setTimeout(function () { stateView = getState(idView).val; stateAuto = getState(idAuto).val; viewwechsel(); countup(); }, 10000); } ! // Funktion countup bei Scriptstart anstoßen countup(); ! // Manuelle Unterbrechung des Hochzählens und Setzen der Variable für die Anzeige der View function pushbutton () { if (stateButton0 === true) { setState(stateAuto, false); setState(stateView, 0); } else if (stateButton0 === false) { setState(stateAuto, true); } } ! // Ausführung bei Scriptstart und Änderung des Zustands pushbutton(); ! // Überwachung des Status des Buttons und Ausführung der Funktion on(idButton0, function(dp) { stateButton0 = dp.newState.val; pushbutton(); }); !
        Danke.

        MfG,

        André

        Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          Timer stoppt man mit clearTimeout(timer) bzw. clearInterval(timer):

          ...
          var stateView = 0;
          var max = 4;
          var timer = null;
          
          function counter() {
            if(stateView < max) stateView++;
            else stateView = 0;
            setState(idView, stateView);
          }
          
          function pushbutton () {
              if (stateButton0 === true) {
                  stateAuto = false;
                  stateView = 0;
                  if(timer) clearInterval(timer);
              } else {
                  stateAuto = true;
                  timer = setInterval(counter, 10000);  // alle 10 s[
              }
              setState(idAuto, stateAuto);
              setState(idView, stateView);
          }
          
          

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

          731

          Online

          32.5k

          Benutzer

          81.7k

          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