Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. special binding „local_*“

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

special binding „local_*“

Scheduled Pinned Locked Moved Visualisierung
23 Posts 9 Posters 3.1k Views 13 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ice987I Offline
    ice987I Offline
    ice987
    wrote on last edited by ice987
    #1

    Mit der ioBroker.vis v.1.3.9 wird/wurde das special binding local_* eingeführt. Mit diesem Binding möchte ich nun eine benutzerunabhängige, lokale Navigation erstellen. Eine erste Variante ist hier zu finden. Aktuell kriege ich jedoch viele Fehlermeldungen im ioBroker-Log im Styl von:

    State "local_locale" has no existing object, this might lead to an error in future versions
    

    Hat jemand bereits Erfahrungen mit diesem doch noch neuen Binding sammeln können?

    https://github.com/Scrounger/ioBroker.vis-materialdesign/issues/175
    https://github.com/ioBroker/ioBroker.vis/issues/370
    https://github.com/ioBroker/ioBroker.web/issues/137
    https://github.com/ioBroker/ioBroker.vis/issues/397

    husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

    1 Reply Last reply
    0
    • cdellasantaC Offline
      cdellasantaC Offline
      cdellasanta
      Developer
      wrote on last edited by
      #2

      Ich will (wie @ice987) mit den local_* den frontend für multi-user fähig machen, und nicht wie jetzt, dass wenn auf einen Gerät etwas gemacht wird, dass den andere auch ungewollt bekommt.

      Hier den Problem:
      the problem.gif

      Ich muss:

      1. Navigation
      2. Theme-Auswahl
      3. Sprachauswahl
      4. Sämtliche Benutzer-Selektionen

      Von der Stati unabhängig machen

      ice987I 1 Reply Last reply
      0
      • cdellasantaC cdellasanta

        Ich will (wie @ice987) mit den local_* den frontend für multi-user fähig machen, und nicht wie jetzt, dass wenn auf einen Gerät etwas gemacht wird, dass den andere auch ungewollt bekommt.

        Hier den Problem:
        the problem.gif

        Ich muss:

        1. Navigation
        2. Theme-Auswahl
        3. Sprachauswahl
        4. Sämtliche Benutzer-Selektionen

        Von der Stati unabhängig machen

        ice987I Offline
        ice987I Offline
        ice987
        wrote on last edited by ice987
        #3

        @cdellasanta
        @Scrounger

        wenn ich unter Object ID im Widget "basic -view in widget 8" UND "materialdesign - TppApp Bar" einen Wert, beginnend mit "local_" und diesen in geschweifte Klammer eingebe (z.B. {local_navigation}) funktioniert die "lokale, unabhängige Variable" bis auf den Log-Error Eintrag:

        web.0	2021-06-05 16:25:45.471	warn	(6793) State "0" has no existing object, this might lead to an error in future versions
        

        vis: v1.3.8
        vis: v1.3.9 gleiches Verhalten
        vis: v1.4.3 gleiches Verhalten (jedoch mit … State "10" …)

        husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

        1 Reply Last reply
        0
        • ice987I Offline
          ice987I Offline
          ice987
          wrote on last edited by
          #4

          gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

          husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

          ScroungerS OliverIOO 2 Replies Last reply
          0
          • ice987I ice987

            gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

            ScroungerS Offline
            ScroungerS Offline
            Scrounger
            Developer
            wrote on last edited by Scrounger
            #5

            @ice987, @cdellasanta

            Ich bin Euch ja noch eine Antwort schuldig aus dem issue auf gihub.
            Hab mir den Code angeschaut und bereits einen PR erstellt der in der VIS Adapter 1.4.5 bereits enthalten ist.

            Verwendung von local_:
            In einem widget könnt ihr als Objekt ID oder in einem Binding einfach z.B. local_mein_datenpunkt eintragen. Dieser Datenpunkt muss nicht existieren (also im Objektbaum vom iob) und wird dann nur innerhalb der Runtime verwendet. Somit kann man z.B. die TopAppBar clientsafe machen.

            Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
            Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
            https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

            @ice987 sagte in special binding „local_*“:

            gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

            Nein das geht nicht, bzw. ich wüsste nicht wie.

            ice987I OliverIOO 3 Replies Last reply
            1
            • ScroungerS Scrounger

              @ice987, @cdellasanta

              Ich bin Euch ja noch eine Antwort schuldig aus dem issue auf gihub.
              Hab mir den Code angeschaut und bereits einen PR erstellt der in der VIS Adapter 1.4.5 bereits enthalten ist.

              Verwendung von local_:
              In einem widget könnt ihr als Objekt ID oder in einem Binding einfach z.B. local_mein_datenpunkt eintragen. Dieser Datenpunkt muss nicht existieren (also im Objektbaum vom iob) und wird dann nur innerhalb der Runtime verwendet. Somit kann man z.B. die TopAppBar clientsafe machen.

              Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
              Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
              https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

              @ice987 sagte in special binding „local_*“:

              gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

              Nein das geht nicht, bzw. ich wüsste nicht wie.

              ice987I Offline
              ice987I Offline
              ice987
              wrote on last edited by
              #6

              @scrounger
              Vielen Dank für deine Unterstützung und deinen Einsatz! Ich werde dies direkt ausprobieren :flushed:

              husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

              1 Reply Last reply
              0
              • ice987I ice987

                gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                wrote on last edited by
                #7

                @ice987 sagte in special binding „local_*“:

                gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

                dafür sind doch normale datenpunkte da.

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                1 Reply Last reply
                0
                • ScroungerS Scrounger

                  @ice987, @cdellasanta

                  Ich bin Euch ja noch eine Antwort schuldig aus dem issue auf gihub.
                  Hab mir den Code angeschaut und bereits einen PR erstellt der in der VIS Adapter 1.4.5 bereits enthalten ist.

                  Verwendung von local_:
                  In einem widget könnt ihr als Objekt ID oder in einem Binding einfach z.B. local_mein_datenpunkt eintragen. Dieser Datenpunkt muss nicht existieren (also im Objektbaum vom iob) und wird dann nur innerhalb der Runtime verwendet. Somit kann man z.B. die TopAppBar clientsafe machen.

                  Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
                  Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
                  https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

                  @ice987 sagte in special binding „local_*“:

                  gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

                  Nein das geht nicht, bzw. ich wüsste nicht wie.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by OliverIO
                  #8

                  @scrounger sagte in special binding „local_*“:

                  Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
                  Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
                  https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

                  aber dann kann man doch gleich einen datenpunkt anlegen und den steuern?
                  dadurch wird eine 3.kommunikationsschine zwischen client und server aufgemacht (neben dem sendto/message-weg)
                  wenn dann wäre es sinnvoll, den lokalen datenpunkt über javascript local zu setzen, also bspw mit vis.setValue, was eigentlich auch gehen müsste.

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  ice987I 1 Reply Last reply
                  0
                  • OliverIOO OliverIO

                    @scrounger sagte in special binding „local_*“:

                    Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
                    Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
                    https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

                    aber dann kann man doch gleich einen datenpunkt anlegen und den steuern?
                    dadurch wird eine 3.kommunikationsschine zwischen client und server aufgemacht (neben dem sendto/message-weg)
                    wenn dann wäre es sinnvoll, den lokalen datenpunkt über javascript local zu setzen, also bspw mit vis.setValue, was eigentlich auch gehen müsste.

                    ice987I Offline
                    ice987I Offline
                    ice987
                    wrote on last edited by
                    #9

                    @oliverio

                    Die Idee dahinter ist, dass eine, auf mehreren Geräten, ggf. mit unterschiedlichen Benutzer unabhängige Navigation erstellt werden kann.
                    Nutze ich dafür einen DP, ist die Navigation auf allen Geräten/bei allen Benutzern synchron oder ich muss für jedes Gerät/Benutzer einen einzelnen, separaten DP anlegen, welcher dann in einer eigenen, separaten Navigation angesteuert werden muss.

                    husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

                    OliverIOO 1 Reply Last reply
                    0
                    • ice987I ice987

                      @oliverio

                      Die Idee dahinter ist, dass eine, auf mehreren Geräten, ggf. mit unterschiedlichen Benutzer unabhängige Navigation erstellt werden kann.
                      Nutze ich dafür einen DP, ist die Navigation auf allen Geräten/bei allen Benutzern synchron oder ich muss für jedes Gerät/Benutzer einen einzelnen, separaten DP anlegen, welcher dann in einer eigenen, separaten Navigation angesteuert werden muss.

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      wrote on last edited by OliverIO
                      #10

                      @ice987 sagte in special binding „local_*“:

                      @oliverio

                      Die Idee dahinter ist, dass eine, auf mehreren Geräten, ggf. mit unterschiedlichen Benutzer unabhängige Navigation erstellt werden kann.
                      Nutze ich dafür einen DP, ist die Navigation auf allen Geräten/bei allen Benutzern synchron oder ich muss für jedes Gerät/Benutzer einen einzelnen, separaten DP anlegen, welcher dann in einer eigenen, separaten Navigation angesteuert werden muss.

                      das habe ich verstanden.
                      wenn der datenpunkt rein lokal bleibt ist das ja auch in ordnung.
                      aber der von scrounger umgesetzte Weg spricht den vis adapter an, der dann über einen "anderen" weg jetzt den local_ datenpunkt setzt.das bedeutet wieder client-server-kommunikation.
                      das ist eine weitere technische lösung für das was schon 2 mal da ist.

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      ScroungerS 1 Reply Last reply
                      0
                      • OliverIOO OliverIO

                        @ice987 sagte in special binding „local_*“:

                        @oliverio

                        Die Idee dahinter ist, dass eine, auf mehreren Geräten, ggf. mit unterschiedlichen Benutzer unabhängige Navigation erstellt werden kann.
                        Nutze ich dafür einen DP, ist die Navigation auf allen Geräten/bei allen Benutzern synchron oder ich muss für jedes Gerät/Benutzer einen einzelnen, separaten DP anlegen, welcher dann in einer eigenen, separaten Navigation angesteuert werden muss.

                        das habe ich verstanden.
                        wenn der datenpunkt rein lokal bleibt ist das ja auch in ordnung.
                        aber der von scrounger umgesetzte Weg spricht den vis adapter an, der dann über einen "anderen" weg jetzt den local_ datenpunkt setzt.das bedeutet wieder client-server-kommunikation.
                        das ist eine weitere technische lösung für das was schon 2 mal da ist.

                        ScroungerS Offline
                        ScroungerS Offline
                        Scrounger
                        Developer
                        wrote on last edited by Scrounger
                        #11

                        @oliverio sagte in special binding „local_*“:

                        das ist eine weitere technische lösung für das was schon 2 mal da ist.

                        Ich versteh leider nicht was du meinst. Kannst du mal zwei konkrete Beispiele machen für das schon 2 mal da ist.

                        Der local_ Datenpunkt hat keine socket.io Verbindung d.h. keine Verbindung zu iobroker. D.h. dieser steht nur in der gerade laufenden Runtime zur Verfügung und kann nur in dieser von den dortigen Widgets verwendet werden - d.h. er ist nur bei diesem Client verfügbar und somit clientspezifisch.
                        Das einzige ist - neben ein paar Fehlern beim subscribing korrigiert - das ich eingebaut habe das man diesen local_ Datenpunkten per url parameter beim laden der Runtime bereits setzen kann, weil der sonst null ist und das manche Widgets nicht mögen.

                        Ohne diese Funktion müsste man z.B. für die TopAppBar für jeden Client (Tablet, Handy, Desktop) immer einen eigenen Datenpunkt anlegen und auch immer eine eigene View im VIS Editor erstellen.

                        Und weiterer Vorteil ist das man die local_ Variable in Object IDs per Binding verwenden kann und somit clientspezfische Datenpunkte ansteuern kann ohne das man immer eine extra View pro Client erstellen muss.

                        OliverIOO 1 Reply Last reply
                        0
                        • ScroungerS Scrounger

                          @oliverio sagte in special binding „local_*“:

                          das ist eine weitere technische lösung für das was schon 2 mal da ist.

                          Ich versteh leider nicht was du meinst. Kannst du mal zwei konkrete Beispiele machen für das schon 2 mal da ist.

                          Der local_ Datenpunkt hat keine socket.io Verbindung d.h. keine Verbindung zu iobroker. D.h. dieser steht nur in der gerade laufenden Runtime zur Verfügung und kann nur in dieser von den dortigen Widgets verwendet werden - d.h. er ist nur bei diesem Client verfügbar und somit clientspezifisch.
                          Das einzige ist - neben ein paar Fehlern beim subscribing korrigiert - das ich eingebaut habe das man diesen local_ Datenpunkten per url parameter beim laden der Runtime bereits setzen kann, weil der sonst null ist und das manche Widgets nicht mögen.

                          Ohne diese Funktion müsste man z.B. für die TopAppBar für jeden Client (Tablet, Handy, Desktop) immer einen eigenen Datenpunkt anlegen und auch immer eine eigene View im VIS Editor erstellen.

                          Und weiterer Vorteil ist das man die local_ Variable in Object IDs per Binding verwenden kann und somit clientspezfische Datenpunkte ansteuern kann ohne das man immer eine extra View pro Client erstellen muss.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          wrote on last edited by
                          #12

                          @scrounger
                          ok habe in dein commit reingeschaut. du fragst im browser die location ab und interpretierst dann die daten daraus.
                          ich dachte schon das da jemand mit der url ein request an einen vis adapter absendet, der die url liest und dann hinten rum auch per socket oder andere kommunikation an vis schickt.

                          besser und für die meisten eingängiger wäre doch ein weiterer reiter neben view-script und view-css um alle lokalen datenpunkte mit datentyp und initialwert zu definieren,
                          so das sie in den widgets und bindings verwendet werden können.

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          ScroungerS 1 Reply Last reply
                          2
                          • OliverIOO OliverIO

                            @scrounger
                            ok habe in dein commit reingeschaut. du fragst im browser die location ab und interpretierst dann die daten daraus.
                            ich dachte schon das da jemand mit der url ein request an einen vis adapter absendet, der die url liest und dann hinten rum auch per socket oder andere kommunikation an vis schickt.

                            besser und für die meisten eingängiger wäre doch ein weiterer reiter neben view-script und view-css um alle lokalen datenpunkte mit datentyp und initialwert zu definieren,
                            so das sie in den widgets und bindings verwendet werden können.

                            ScroungerS Offline
                            ScroungerS Offline
                            Scrounger
                            Developer
                            wrote on last edited by
                            #13

                            @oliverio sagte in special binding „local_*“:

                            @scrounger
                            besser und für die meisten eingängiger wäre doch ein weiterer reiter neben view-script und view-css um alle lokalen datenpunkte mit datentyp und initialwert zu definieren,
                            so das sie in den widgets und bindings verwendet werden können.

                            Super Idee und vorallem für useabillity sicher die beste Lösung. Jetzt brauchen wir nur noch jmd der das schreibt ;-)

                            P 1 Reply Last reply
                            1
                            • ScroungerS Scrounger

                              @ice987, @cdellasanta

                              Ich bin Euch ja noch eine Antwort schuldig aus dem issue auf gihub.
                              Hab mir den Code angeschaut und bereits einen PR erstellt der in der VIS Adapter 1.4.5 bereits enthalten ist.

                              Verwendung von local_:
                              In einem widget könnt ihr als Objekt ID oder in einem Binding einfach z.B. local_mein_datenpunkt eintragen. Dieser Datenpunkt muss nicht existieren (also im Objektbaum vom iob) und wird dann nur innerhalb der Runtime verwendet. Somit kann man z.B. die TopAppBar clientsafe machen.

                              Wenn jetzt die runtime geladen wird ist der Wert ersteinmal null.
                              Deshalb hab ich in der VIS Adapter 1.4.5 die Funktion eingebaut, dass man den Wert beim laden der Runtime über die url setzen kann, bsp:
                              https://iobroker.vis.heimt/vis/index.html?local_mein_datenpunkt=wert&visu#0_Start

                              @ice987 sagte in special binding „local_*“:

                              gibt es eine Möglichkeit die lokale Variable local_* in vis aus dem Javascript-Adapter zu steuern/definieren?

                              Nein das geht nicht, bzw. ich wüsste nicht wie.

                              ice987I Offline
                              ice987I Offline
                              ice987
                              wrote on last edited by
                              #14

                              @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

                              husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

                              1 Reply Last reply
                              0
                              • ScroungerS Scrounger

                                @oliverio sagte in special binding „local_*“:

                                @scrounger
                                besser und für die meisten eingängiger wäre doch ein weiterer reiter neben view-script und view-css um alle lokalen datenpunkte mit datentyp und initialwert zu definieren,
                                so das sie in den widgets und bindings verwendet werden können.

                                Super Idee und vorallem für useabillity sicher die beste Lösung. Jetzt brauchen wir nur noch jmd der das schreibt ;-)

                                P Offline
                                P Offline
                                PPB1308
                                wrote on last edited by
                                #15

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

                                Gruß,
                                Peter

                                C 1 Reply Last reply
                                0
                                • P PPB1308

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

                                  Gruß,
                                  Peter

                                  C Offline
                                  C Offline
                                  Conceit
                                  wrote on last edited by
                                  #16

                                  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

                                  SwisslizardS R 2 Replies Last reply
                                  1
                                  • C Conceit

                                    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

                                    SwisslizardS Offline
                                    SwisslizardS Offline
                                    Swisslizard
                                    wrote on last edited by Swisslizard
                                    #17

                                    @conceit
                                    :grinning: Danke für das Script! :+1:

                                    1 Reply Last reply
                                    0
                                    • C Conceit

                                      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

                                      R Offline
                                      R Offline
                                      Roelli
                                      wrote on last edited by
                                      #18

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

                                      NUC6i7KYK M.2 32GB RAM mit Proxmox
                                      14 AccessPoints, 5 Switches 115 Adapter, 67913 Objekte, 57954 Zustände,126x Shelly, 26 Thermostate, Fire Tablets, DMX, USV, 18x echodot, 9xKlima, 4x heizung, beamer, 6x IP Speed dome, AiOnTheEdge, Tasmota Wemos, Fingerabdrucksensoren, VOIP TFE, Türsteuerung, BMZ,EMA

                                      OliverIOO 1 Reply Last reply
                                      0
                                      • R Roelli

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

                                        OliverIOO Offline
                                        OliverIOO Offline
                                        OliverIO
                                        wrote on last edited by
                                        #19

                                        @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

                                        Meine Adapter und Widgets
                                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                        Links im Profil

                                        R 1 Reply Last reply
                                        0
                                        • OliverIOO OliverIO

                                          @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 Offline
                                          R Offline
                                          Roelli
                                          wrote on last edited by
                                          #20

                                          @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

                                          NUC6i7KYK M.2 32GB RAM mit Proxmox
                                          14 AccessPoints, 5 Switches 115 Adapter, 67913 Objekte, 57954 Zustände,126x Shelly, 26 Thermostate, Fire Tablets, DMX, USV, 18x echodot, 9xKlima, 4x heizung, beamer, 6x IP Speed dome, AiOnTheEdge, Tasmota Wemos, Fingerabdrucksensoren, VOIP TFE, Türsteuerung, BMZ,EMA

                                          N 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          401

                                          Online

                                          32.6k

                                          Users

                                          82.1k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe