Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. VIS html binding mit Variable

    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

    VIS html binding mit Variable

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

      Hallo,

      hat jemand eine Erklärung, warum folgendes Script in einem html widget nicht richtig funktioniert und ob es eine Lösung dafür gibt...

      Fixed = <span id="fixed"></span> <br>
      Variable = <span id="variable"></span>
      
      <script>
          var resultFixed = '{0_userdata.0.log.year.2021.KW23}';
          document.getElementById('fixed').innerHTML = resultFixed;
          
          var kw = "23";
          var resultVariable = '{0_userdata.0.log.year.2021.KW' + kw + '}';
          document.getElementById('variable').innerHTML = resultVariable;
      
      </script>
      

      Im VIS Editor zeigt er bei beiden den richtigen Pfad an:
      Bildschirmfoto 2021-06-13 um 14.59.10.png

      In der Anzeige zeigt er mir bei "Fixed" den richtigen Wert an, bei "Variable" eine "null".
      Bildschirmfoto 2021-06-13 um 14.59.27.png

      Jemand eine Idee? 🙂
      Danke!

      mickym OliverIO 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @bluefish last edited by mickym

        @bluefish Eine Idee schon - aber die Lösung muss wohl eine andere sein.

        Sprich die Bindung findet statt bevor der Code ausgeführt wird. Deswegen nutzt Dir das nicht das variabel zu gestalten.

        Du musst wohl oder übel über Deine Logikmaschine einen konstanten Datenpunkt verwenden und über Deine Logikmaschine den aktuellen Verbrauch dynamisch da rein schreiben.

        In NodeRed definiert man einen eigenen CodeBlock damit man dort auf das Nachrichtenobjekt zugreifen kann. Wahrscheinlich ginge das im VIS ähnlich, da hier das Binding statt auf das Nachrichtenobjekt auf die iobroker Datenbank geht.

        B 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @bluefish last edited by OliverIO

          @bluefish sagte in VIS html binding mit Variable:

          Hallo,

          hat jemand eine Erklärung, warum folgendes Script in einem html widget nicht richtig funktioniert und ob es eine Lösung dafür gibt...

          Fixed = <span id="fixed"></span> <br>
          Variable = <span id="variable"></span>
          
          <script>
              var resultFixed = '{0_userdata.0.log.year.2021.KW23}';
              document.getElementById('fixed').innerHTML = resultFixed;
              
              var kw = "23";
              var resultVariable = '{0_userdata.0.log.year.2021.KW' + kw + '}';
              document.getElementById('variable').innerHTML = resultVariable;
          
          </script>
          

          Im VIS Editor zeigt er bei beiden den richtigen Pfad an:
          Bildschirmfoto 2021-06-13 um 14.59.10.png

          In der Anzeige zeigt er mir bei "Fixed" den richtigen Wert an, bei "Variable" eine "null".
          Bildschirmfoto 2021-06-13 um 14.59.27.png

          Jemand eine Idee? 🙂
          Danke!

          Es gibt kein dynamisches Binding.
          Die Bindings wird beim start der view gesucht.
          Wenn der Name da noch nicht feststeht, dann ist es kein gültiges Binding

          um states vom server abzurufen musst du die folgende funktion verwenden

          vis.conn.getStates(dps, function (error, states) {
          }
          

          dps ist ein array mit ein oder mehreren datenpunkten
          in states kommt dann ein array der datenpunkte als objekte zurück.

          1 Reply Last reply Reply Quote 0
          • B
            bluefish @mickym last edited by

            @mickym Danke für deine Antwort! An diese Lösung habe ich auch schon gedacht. Ich dachte nur ich könnte mir so vielleicht unzählige Datenpunkte sparen (ist nicht der einzige Wert mit Variable, den ich ausgeben will)...

            Aber wenn das Binding stattfindet bevor der Code ausgeführt wird, dürfte doch die "fixed" Ausgabe auch nicht klappen?

            @OliverIO Auch danke für deine Antwort! Aber müsste dann nicht zumindest der Wert beim Start der view einmal gefunden werden - und sich später halt nicht ändern...?

            mickym OliverIO 2 Replies Last reply Reply Quote 0
            • mickym
              mickym Most Active @bluefish last edited by

              @bluefish sagte in VIS html binding mit Variable:

              @mickym Danke für deine Antwort! An diese Lösung habe ich auch schon gedacht. Ich dachte nur ich könnte mir so vielleicht unzählige Datenpunkte sparen (ist nicht der einzige Wert mit Variable, den ich ausgeben will)...

              Aber wenn das Binding stattfindet bevor der Code ausgeführt wird, dürfte doch die "fixed" Ausgabe auch nicht klappen?

              @OliverIO Auch danke für deine Antwort! Aber müsste dann nicht zumindest der Wert beim Start der view einmal gefunden werden - und sich später halt nicht ändern...?

              In Node-Red gibt es so ein ähnliches Code Fragement, um im script Block die Bindung zu ermöglichen - ich denke es müsste im VIS ähnlich gehen, da ich glaube dass der Bindungsmechanismus ähnlich ist.

              (function(scope){ 
                      scope.$watch('msg', function(msg) {
                          
              ....
                      });
                  })(scope);
              

              Statt msg und function(msg) muss da was anderes stehen im VIS - aber das übersteigt meinen Horizont.

              1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @bluefish last edited by

                @bluefish sagte in VIS html binding mit Variable:

                @mickym Danke für deine Antwort! An diese Lösung habe ich auch schon gedacht. Ich dachte nur ich könnte mir so vielleicht unzählige Datenpunkte sparen (ist nicht der einzige Wert mit Variable, den ich ausgeben will)...

                Aber wenn das Binding stattfindet bevor der Code ausgeführt wird, dürfte doch die "fixed" Ausgabe auch nicht klappen?

                @OliverIO Auch danke für deine Antwort! Aber müsste dann nicht zumindest der Wert beim Start der view einmal gefunden werden - und sich später halt nicht ändern...?

                ja richtig, deswegen funktioniert ja auch die erste abfrage.
                bei der 2. Abfrage steht der datenpunkt-name ja noch nicht fest, sondern wird erst bei Aufruf der funktion ermittelt. Das findet vis dann nicht.
                vis sucht mit regex nach allem was sich zwischen den spitzen klammern befindet, macht ein paar Prüfungen und was dann übrigbleibt wird beim server angefragt. wenn dann dazu werte kommen, dann werden die auch angezeigt und danach bei änderung auch aktualisiert.

                in meinem vorigen post habe ich den code für das einmalige abfragen geschrieben. um die abfrage und automatische aktualisierung nachzubilden ist noch ein wenig mehr code notwendig und ist nicht ganz so benutzerfreundlich.

                hier ein Beispiel aus meinen widgets
                https://github.com/oweitman/ioBroker.tvprogram/blob/4a413bc434850ec667b52fa3c70689307d0e700a/widgets/tvprogram/js/tvprogram.js#L2222

                B 1 Reply Last reply Reply Quote 0
                • B
                  bluefish @OliverIO last edited by bluefish

                  @oliverio vielen Dank für die Rückmeldung und die Lösung, die ich allerdings nicht verstehe. (Was aber nicht an deiner Erklärung, sondern an meinen Kenntnissen liegt)

                  Daher muss ich wohl die Bindings im javascript Adapter zusammensetzen und halt in eigenen Datenpunkten ablegen. Die Lösung gefällt mir zwar nicht, ich finde sie nicht wirklich elegant...

                  Schade, dass es in vis keine einfachere Lösung gib mit Variablen auf Datenpunkte zuzugreifen.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  595
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

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