Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst] Statusdisplay - wechselnde Werteanzeige

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Statusdisplay - wechselnde Werteanzeige

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

      Hallo,

      ich habe mir ein Statusdisplay gebaut und möchte darin verschiedene Werte anzeigen. Diese sollen z.B. alle 20 Sekunden wechseln. Z.B. 20 Sekunden aktueller Verbrauch, 20 Sekunden Gesamtverbrauch oder eben der aktuelle Anruf.

      Gibt es da schon eine Funktion?

      721_unbenannt.jpg

      Viele Grüße

      Marco

      P.S. Ich wünsche allen einen guten Rutsch ins neue Jahr.

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Das geht über die View in Widget-Widgets.

        Du baust für jede dieser Anzeigen eine kleine immer gleich große View. In die Hauptview packst du DANACH ein Stateful container View in Widget 8. Stelle die Wertezahl auf die Menge der Views (in deinem o.g. Fall 3) und fülle darunter unter "Views" die Namen der drei Views ein.

        Dann kommt ein Javascript ins Spiel. Für den Wechsel der Viewanzeige wird in einem Javascript mit ceateState eine Steuervariable (typ number) erstellt. Die wechselt nun alle 20s ihren Wert von 0 auf 1, 1 auf 2, 2 auf 3, 3 auf 0.

        Je nach Wert wird die entsprechende View angezeigt, wenn du im Stateful container View in Widget 8 die OID der Variable einträgst.

        Brauchst du Hilfe beim Skript? Mann kann das mit schedule oder mit einer Schleife machen.

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • M
          Marcolotti last edited by

          Hallo Pix,

          ich habe schonmal ein Script angefangen und wenns funktionieren würde, wäre dieser Beitrag jetzt nicht da. 😉

          Angelegt habe ich die "Variable" Displayzaehler und Displayanzeige.

          Leider geht bei schedule keine Sekundentaktung ala 15 Sekunden oder so. 😞

          Wenn der Zähler auf 1 steht, möchte ich die Livewerte z.B. vom Modbus.PVleistung anzeigen. D.h. ich müsste im Script auch auf Änderungen der jeweiligen Werte reagieren und diese in die Variable Displayanzeige schreiben.

          schedule("*/1 * * * *",  function () { // jede Minute
          setState("Displayzaehler", getState("Displayzaehler").val + 1);
          }); // end of schedule
          
          if (getState("Displayzaehler").val > 2)
              setState("Displayzaehler",0);
          
          if (getState("Displayzaehler").val === 0)
              setState("Displayanzeige", "Test0");
          
          if (getState("Displayzaehler").val  == 1)
              setState("Displayanzeige", "Test1");
          
          if (getState("Displayzaehler").val  == 2)
              setState("Displayanzeige", "Test2"); 
          

          P.S. Hab mir vom Weihnachtsmann ein Java-Buch gewünscht, hab es auch bekommen….

          1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer last edited by

            Statt schedule würde ich eine endlosschleife bauen in der alle werte nacheinder gelesen und in ein Objekt geschreiben werden. Und die schleife mit wait für 20 sekunden anhalten. So wechselt alle 20 Sekunden der inhalt vom Objekt. Dann ein widget das den inhalt des Objekts in vis anzeigt und fertig ist die wechselnde anzeige.

            Gesendet von meinem Jolla mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Hallo Marcolotti,

              du solltest lieber eine Schleife mit Intervall (sekundengenau) verwenden. Ich schlage einfach nur die Variante "Zähler" und "View in Widget 8" vor.

              Skript:

              // Rolle
              createState("VIS.View_Zaehler", {name: 'VIS View Nummer (rotierend)'});
              var x = 0,
                  delay = 15, // hier Sekunden bis Wechsel eintragen
                  max = 3; // maximaler Zähler, Zahl der verschiedenen Views
              
              setInterval(function () {
                  setState("javascript.0.VIS.View_Zaehler", x);
                  x++;
                  if (x == max+1) { // wenn Maximum erreicht, zurücksetzen
                      x = 0;
                  }
              }, parseInt(delay,10) * 1000; // in Millisekunden
              
              

              Das passende Widget:

              [{"tpl":"tplStatefulContainerView8","data":{"oid":"javascript.0.VIS.View_Zaehler","visibility-cond":"==","visibility-val":1,"count":"5","name":"Viewwechsel Anzeige","comment":"Views eintragen"},"style":{"left":"128px","top":"891px","z-index":"20"},"widgetSet":"basic"}]
              

              Das sollte dir helfen 🙂

              –----

              Ich habe sowas ähnliches im Einsatz, um in einem Fenster alle paar Sekunden ein wechselndes Webcambild zu zeigen.

              ! Dazu werden ein paar Variablen angelegt. Webcam_Nummer zählt hoch, Webcam_URL ist ein Array, das die URL der verschiedenen Webcams und DIagramme vorhält, Webcam ist dann schließlich der komplette HTTP-Befehl zum Einbinden. Damit übernimmt das Skript einige Funktionen des o.g. Widgets "View in Widget 8". Es werden vom Skript die Inhalte gewechselt, nicht vom Widget auf die Nummer reagiert.
              ! In VIS wird dann ein HTML Widget angelegt und die Quelle über ein Binding mit geschweiften Klammern definiert.

              [{"tpl":"tplHtmlNav","data":{"visibility-cond":"==","visibility-val":1,"html":"![]({javascript.0.VIS.Webcam_URL})","nav_view":"Kamera","sync":false,"name":"Navigation zu Kameras"},"style":{"left":"743px","top":"590px","width":"268px","height":"124px","z-index":"20"},"widgetSet":"basic"}]
              

              ! Mein Skript mit Berücksichtigung der Anwesenheit:

              /* ******************************************* 
                 *  VIS Webcam Anzeige: Alternatives Vorgehen mit Bindings und einer Variable
                 ******************************************* */
              createState("VIS.Webcam", {name: 'VIS Webcam (rotierend)'});
              createState("VIS.Webcam_URL", {name: 'VIS Webcam URL (rotierend)'});
              createState("VIS.Webcam_Nummer", {name: 'VIS Webcam Nummer (rotierend)'});
              >! var webcam = [];
              >! webcam[0] = 'http://XXXXXXX';
              webcam[1] = 'http://XXXXXXX'; 
              webcam[2] = 'http://www.boerse-frankfurt.de/daxcam/parkettcam_big.m';
              webcam[3] = 'http://XXXXXXX';
              webcam[4] = 'http://XXXXXXX';
              webcam[5] = 'http://XXXXXXX.jpg';
              webcam[6] = 'http://XXXXXXX.jpg';
              webcam[7] = 'http://www.niederschlagsradar.de/image.ashx?type=regioloop®io=XXXXXXX&j=-3&m=&d=&mi=&uhr=&bliksem=0&voor=&srt=loop1stunde';
              // beliebig viele Weitere möglich
              >! // Rolle
              var x = 0;
              
              setInterval(function () {
                  setState("javascript.0.VIS.Webcam_URL", webcam[x]); // URL aus Array einfügen und in globale Variable schreiben.
                  setState("javascript.0.VIS.Webcam", "![](" + webcam[x] + ")");
                  setState("javascript.0.VIS.Webcam_Nummer", x+1);
                  if (getState(idAnwesenheit).val == 1) { // Nur bei Anwesenheit wird rotiert (spart Power)
                      x++;
                  } else { // bei Abwesenheit Wetterradar
                      x = 7;
                  }
                  if (x == webcam.length) {
                      x = 0;
                  }
              }, 10000;
              >! ````
              
              Gruß,
              
              Pix
              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Sehe gerade, JeyCee war schneller :lol: Er empfiehlt die zweite Methode. Schleife mit wechselndem Inhalt (beides in Javascript definiert).

                Nimm für den Anfang dennoch lieber nur die Schleife (in Javascript) und definiere den Inhalt in VIS.

                Du kannst diese Schleife natürlich auch an anderen Stellen verwenden. Die läuft ja endlos.

                Gruß,

                Pix

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

                Support us

                ioBroker
                Community Adapters
                Donate

                1.1k
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                3
                6
                2011
                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