Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. special binding „local_*“

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    special binding „local_*“

    This topic has been deleted. Only users with topic management privileges can see it.
    • ice987
      ice987 @Scrounger last edited by

      @scrounger
      Ich habe auf vis v1.4.5 aktualisiert. Nun erhalte ich die Meldung Fehler: View wurde nicht gefunden und keine Seite wird beim Erststart im „view in widget 8“ geladen (z.b. aus dem Editor). Das Objekt ID besteht aus der lokalen Variable local_nav. Die Index-Seite besteht aus „materialdesing - Top App Bar“ in Kombination mid dem „basic - view in widget 8“. Gibt‘s dazu ggf. Abhilfe? Aktueller workaround ist, die View mittels http://192.168.a.bcd:8082/vis/index.html?local_nav=0&visu=0_Index zu laden.

      System
      vis v1.4.5
      material design widgets v0.5.9

      1 Reply Last reply Reply Quote 0
      • P
        PPB1308 @Scrounger last edited by

        @scrounger
        Gibt es hier Neuerungen zur Initialisierung der lokalen Variablen?

        Gruß,
        Peter

        C 1 Reply Last reply Reply Quote 0
        • C
          Conceit @PPB1308 last edited by

          Hallo.. Das ist mein erster Post hier im Forum, und ich hoffe ich kann mit diesem kleinen Workaround zur local_* Initialisierung ein wenig was beitragen. Da die URL-Parameterübergabe in der Android-App bei mir nicht funktioniert hat, habe ich mir eine etwas andere Lösung gebaut.

          Dazu habe ich ein Skript im Vis Editor hinzugefügt. Das Skript überlädt die interne Funktion "vis.updateStates" (aus vis.js) mit deren Originalcode, welcher aber so abgeändert wurde, dass ein neuer Hook (vis.initLocalVar(id)) aufgerufen wird. In diesem kann man dann die lokalen Variablen initialisieren.

          Vorteile dieser Lösung:

          • funktioniert schon jetzt als "normales" JS im Skript-Fensters des Editors - einfach den gesamten Code unten hineinkopieren und vis.initLocalVar entsprechend anpassen.
            • entspricht der Codebasis von heute (03.02.22), es gibt eine kleine Chance, mit zukünftigen Versionen inkompatibel zu werden
          • Es wurde nur eine Zeile an der Originalfunktion geändert. Diese kann/darf/soll bei Wunsch von @Scrounger direkt so ins Git übernommenwerden, dann kann man sich mit der nächsten Version den riesigen Codeblock mit "vis.updateStates" sparen und zukünftige Inkompatibilitäten werden vermieden. (Sorry, ich war etwas faul und habe nicht gecloned und einen Pull-Request für den 1-Zeiler gemacht. Ich hoffe das ist akzeptabel.)
          • voll abwärtskompatibel. Gibt es keine initialisierungsfunktion, wird weiterhin nach url-Parametern gesucht
          • ermöglicht in Zukunft z.B. die Implementierung einer GUI-Box-Datenübergabe innerhalb einer vorgegebenen vis.initLocalVar - Funktion
            • in diesem Fall weiterhin abwärtskompatibel: eigene Überladungen im Skriptfenster würden weiterhin funktionieren
          vis.initLocalVar = function(id) {
             /* Beispiel: Initialisierung von local_nav mit 0 */
              if(id == "local_nav")
                  return 0;
              else
                  return this.getUrlParameter(id);
          };
          
          vis.updateStates =
              (function (data) {
                  if (data) {
                      for (var id in data) {
                          if (!data.hasOwnProperty(id)) continue;
                          var obj = data[id];
          
                          if (id.indexOf('local_') === 0) {
                              // if its a local variable, we have to initiate this
                              obj = {
             /* --->  hier die geänderte Codezeile */
                                  val: (this.initLocalVar ? this.initLocalVar(id) : this.getUrlParameter(id)),          // check for initLocalVar hook, otherwise use url parameter to set intital value of local variable
             /* <---  hier die geänderte Codezeile */
                                  ts: Date.now(),
                                  lc: Date.now(),
                                  ack: false,
                                  from: "system.adapter.vis.0",
                                  user: `system.user.${vis.user}` || "system.user.admin",
                                  q: 0
                              }
                          }
          
                          if (!obj) continue;
          
                          try {
                              if (this.editMode) {
                                  this.states[id + '.val'] = obj.val;
                                  this.states[id + '.ts'] = obj.ts;
                                  this.states[id + '.ack'] = obj.ack;
                                  this.states[id + '.lc'] = obj.lc;
                                  if (obj.q !== undefined && obj.q !== null) {
                                      this.states[id + '.q'] = obj.q;
                                  }
                              } else {
                                  var oo = {};
                                  oo[id + '.val'] = obj.val;
                                  oo[id + '.ts'] = obj.ts;
                                  oo[id + '.ack'] = obj.ack;
                                  oo[id + '.lc'] = obj.lc;
                                  if (obj.q !== undefined && obj.q !== null) {
                                      oo[id + '.q'] = obj.q;
                                  }
                                  this.states.attr(oo);
                              }
                          } catch (e) {
                              this.conn.logError('Error: can\'t create states object for ' + id + '(' + e + ')');
                          }
          
                          if (!this.editMode && this.bindings[id]) {
                              for (var i = 0; i < this.bindings[id].length; i++) {
                                  var widget = this.views[this.bindings[id][i].view].widgets[this.bindings[id][i].widget];
                                  var value = this.formatBinding(this.bindings[id][i].format, this.bindings[id][i].view, this.bindings[id][i].widget, widget);
          
                                  widget[this.bindings[id][i].type][this.bindings[id][i].attr] = value;
          
                                  this.subscribeOidAtRuntime(value);
                                  this.visibilityOidBinding(this.bindings[id][i], value);
                              }
                          }
                      }
                  }
              });
          

          Viele Grüße,
          Markus

          Swisslizard R 2 Replies Last reply Reply Quote 1
          • Swisslizard
            Swisslizard @Conceit last edited by Swisslizard

            @conceit
            😀 Danke für das Script! 👍

            1 Reply Last reply Reply Quote 0
            • R
              Roelli @Conceit last edited by

              Super! Genau nach soetwas habe ich gesucht! 🙂

              @conceit sagte in special binding „local_*“:

              einfach den gesamten Code unten hineinkopieren und vis.initLocalVar entsprechend anpassen.

              "einfach hineinkopieren" habe ich tatsächlich geschafft.
              Aber... ich hab keine Ahnung was ich wie mit der vis.initLocalVar anpassen muss.?

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

                @roelli

                Du brauchst dieses Skript nicht mehr.
                Mittlerweile befindet sich diese Lösung bereits vis

                Suche auf der folgenden Seite nach. Local.

                https://github.com/ioBroker/ioBroker.vis

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

                  @oliverio sagte in special binding „local_*“:

                  Suche auf der folgenden Seite nach. Local.

                  Ja megapraktisch

                  Jetzt muss ich's nur noch verstehen.
                  Hab mal local_ gefolgt von dem Datenpunkt (String von 1-8) probiert, scheint aber falsch zu sein was ich da mache. Tuts jedenfalls nicht.

                  Ich will ja das View in Widget, welches einen Dantepunkt mit Zahlen benutzt auf einem zweiten VIS-Display unabhängig vom ersten VIS Display benutzen, damit nicht das zweite Display auch das erste Display umschaltet.
                  view in widget.jpg

                  N 1 Reply Last reply Reply Quote 0
                  • N
                    NoVinoPhobie @Roelli last edited by

                    @roelli
                    ich hänge mich hier mal rein, weil ich glaube sowas ähnliches zu haben, was bisher ging aber seit dem letzten Update nicht mehr.

                    Ich schreibe hiermit abhängig vom übergebenen local_PanelIndex in die entsprechende Variable. Da ich auch vom Handy darauf zugreife und keinen Panel Index habe, ist die Fallback Variable da noch auf 1.
                    ac9a396f-e262-4bc0-ad33-7b407342abc6-image.png

                    aufgerufen wird das dann bei mir über diese Adresse: http://192.168.3.103:8082/vis-2/?local_PanelIndex=2&EG.Flur#Main

                    Abhängig vom Panel mit nem anderen Index.
                    So ähnlich sollte das dann auch bei dir gehen.

                    N 1 Reply Last reply Reply Quote 0
                    • N
                      NoVinoPhobie @NoVinoPhobie last edited by

                      Mein Problem ist aber aktuell, das funktioniert nur bis zur Version 2.12.8. Mit der aktuellen 2.12.12 wird der Panel Index nicht bei allen Widgets übernommen.

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        Roelli @NoVinoPhobie last edited by

                        @novinophobie sagte in special binding „local_*“:

                        Mein Problem ist aber aktuell, das funktioniert nur bis zur Version 2.12.8. Mit der aktuellen 2.12.12 wird der Panel Index nicht bei allen Widgets übernommen.

                        Ich kann man bei mir probieren, aber ein anderes ViewInWidget über die URL aufrufen klappt bei mir auch nicht, vielleicht weil ich die URL falsch einstelle.

                        Meine Hauptseite der VIS ist:
                        http://192.168.64.3:8082/vis-2/?2025#Main

                        Ich hab mal versucht hiermit aufzurufen:
                        http://192.168.64.3:8082/vis-2/?local_nav=4#Main

                        Mein "local" Datenpunkt ist: "local_nav"

                        Schaltet aber nicht um.
                        Dafür kann ich aber die Views über z.B. eine "Taste" in der VIS umschalten indem ich einen numerischen Wert an "local_nav" gebe.

                        Hier im Video sieht man wie ich durch anklicken der 3 Buttons auch 3 verschiedene Views aufrufe, die aber nur auf den jeweiligen Tablets umschaltet werden und nicht global:
                        TEST.gif

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        819
                        Online

                        32.0k
                        Users

                        80.4k
                        Topics

                        1.3m
                        Posts

                        9
                        23
                        2270
                        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