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. Visualisierung
  4. VIS-2: vis.states[] liefert beim 1. Aufruf immer undefined

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

VIS-2: vis.states[] liefert beim 1. Aufruf immer undefined

Geplant Angeheftet Gesperrt Verschoben Visualisierung
4 Beiträge 2 Kommentatoren 281 Aufrufe 2 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.
  • K Offline
    K Offline
    koilapo
    schrieb am zuletzt editiert von
    #1

    Hallo,

    bin ziemlich neu in ioBroker. Aber komme gut voran. Ziel ist, in VIS-2 einen DP auszulesen und davon abhängig etwas zu schalten.

    Zum Test habe ich das hier gemacht (geht kein Bildschirm an, nennt sich nur so):

    <div onclick="toggleBildschirm();" style="cursor: pointer;">
        Wert: {0_userdata.0.System.Bildschirm_an}
    </div>
    
    <script>
    function toggleBildschirm() {
    	let currentValue = vis.states['0_userdata.0.System.Bildschirm_an.val'];
    	console.log('Wert ' + currentValue);
    	vis.setValue("0_userdata.0.System.Bildschirm_an", currentValue ? false : true);
    }
    </script>
    

    Problem: Beim 1. Mal, wenn ich hier auf das Widget klicke, kommt immer "undefined" im log. Danach geht es, wie es soll.

    Interessant hierbei: Ich habe in vielen Beiträgen gelesen, dass man den DP als Binding in einem anderen Widget braucht, um so drauf zuzugreifen. Aber zum einen geht das auch ohne (der DP wird beim 1. Aufruf von vis.states wohl automatisch abonniert) und zum anderen geht es nie ohne undefined beim 1. Aufruf, selbst wenn der DP sogar in genau diesem Widget ein Binding ist, wie oben, auch nicht in einem anderen Widget.

    Wie kriege ich das mit dem undefined weg? Viele Dank!

    OliverIOO 1 Antwort Letzte Antwort
    0
    • K koilapo

      Hallo,

      bin ziemlich neu in ioBroker. Aber komme gut voran. Ziel ist, in VIS-2 einen DP auszulesen und davon abhängig etwas zu schalten.

      Zum Test habe ich das hier gemacht (geht kein Bildschirm an, nennt sich nur so):

      <div onclick="toggleBildschirm();" style="cursor: pointer;">
          Wert: {0_userdata.0.System.Bildschirm_an}
      </div>
      
      <script>
      function toggleBildschirm() {
      	let currentValue = vis.states['0_userdata.0.System.Bildschirm_an.val'];
      	console.log('Wert ' + currentValue);
      	vis.setValue("0_userdata.0.System.Bildschirm_an", currentValue ? false : true);
      }
      </script>
      

      Problem: Beim 1. Mal, wenn ich hier auf das Widget klicke, kommt immer "undefined" im log. Danach geht es, wie es soll.

      Interessant hierbei: Ich habe in vielen Beiträgen gelesen, dass man den DP als Binding in einem anderen Widget braucht, um so drauf zuzugreifen. Aber zum einen geht das auch ohne (der DP wird beim 1. Aufruf von vis.states wohl automatisch abonniert) und zum anderen geht es nie ohne undefined beim 1. Aufruf, selbst wenn der DP sogar in genau diesem Widget ein Binding ist, wie oben, auch nicht in einem anderen Widget.

      Wie kriege ich das mit dem undefined weg? Viele Dank!

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @koilapo

      stimmt, habe ich ausprobiert.
      Meiner Meinung nach ist das ein Fehler.

      Bei vis1 wurden alle widgets bei vis start darauf untersucht ob irgendwo object IDs stehen.
      Diese wurden beim server abonniert und sobald dann die werte eintrudeln dann in vis aktualisiert.
      Hier passiert das abonnieren und aktualisieren zwar, aber vis.states wird nicht aktualisiert.
      Das vis Objekt unter vis2 ist eigentlich nur eine kompatibilitäts abbildung um mit vis1 kompatibel zu bleiben. das passiert in diesem fall nicht.

      Am besten da mal schaun ob es auf github schon ein issue gibt und ggfsl einen anlegen.

      workaround wäre platziere ein nicht sichtbares widget bspw basic bool checkbox und trage den datenpunktnamen ein. dann ist die information auch beim ersten mal in vis.states verfügbar.
      allerdings wohl nur mit "true" als string.

      zum testen kannst du direkt als erste zeile der funktion toggleBildschirm

      debugger;
      

      eintragen, dann kannst du in der web devloper console direkt debuggen

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

      K 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @koilapo

        stimmt, habe ich ausprobiert.
        Meiner Meinung nach ist das ein Fehler.

        Bei vis1 wurden alle widgets bei vis start darauf untersucht ob irgendwo object IDs stehen.
        Diese wurden beim server abonniert und sobald dann die werte eintrudeln dann in vis aktualisiert.
        Hier passiert das abonnieren und aktualisieren zwar, aber vis.states wird nicht aktualisiert.
        Das vis Objekt unter vis2 ist eigentlich nur eine kompatibilitäts abbildung um mit vis1 kompatibel zu bleiben. das passiert in diesem fall nicht.

        Am besten da mal schaun ob es auf github schon ein issue gibt und ggfsl einen anlegen.

        workaround wäre platziere ein nicht sichtbares widget bspw basic bool checkbox und trage den datenpunktnamen ein. dann ist die information auch beim ersten mal in vis.states verfügbar.
        allerdings wohl nur mit "true" als string.

        zum testen kannst du direkt als erste zeile der funktion toggleBildschirm

        debugger;
        

        eintragen, dann kannst du in der web devloper console direkt debuggen

        K Offline
        K Offline
        koilapo
        schrieb am zuletzt editiert von
        #3

        @oliverio Vielen Dank. Mit einer Bool-Checkbox geht es tatsächlich sofort korrekt, sowohl false als auch true. Ich dachte, es müsste auch gehen, wenn man ein Binding macht, z.B. mit

        {0_userdata.0.System.Bildschirm_an}
        

        in einem einfachen HTML Widget. Aber damit geht es nicht. Oder hab ich das falsch verstanden? Ist das der Fehler, von dem Du sprichst?

        Da ich noch etliche solcher DP auf diese Weise nutzen will (anklickbare HTML-Widgets), was wäre denn da das sinnvollste Vorgehen, um diese alle auf einmal direkt verfügbar zu machen? Geht das irgendwie mit einem Seiten-Skript, mit dem man die gebündelt einbindet?

        OliverIOO 1 Antwort Letzte Antwort
        0
        • K koilapo

          @oliverio Vielen Dank. Mit einer Bool-Checkbox geht es tatsächlich sofort korrekt, sowohl false als auch true. Ich dachte, es müsste auch gehen, wenn man ein Binding macht, z.B. mit

          {0_userdata.0.System.Bildschirm_an}
          

          in einem einfachen HTML Widget. Aber damit geht es nicht. Oder hab ich das falsch verstanden? Ist das der Fehler, von dem Du sprichst?

          Da ich noch etliche solcher DP auf diese Weise nutzen will (anklickbare HTML-Widgets), was wäre denn da das sinnvollste Vorgehen, um diese alle auf einmal direkt verfügbar zu machen? Geht das irgendwie mit einem Seiten-Skript, mit dem man die gebündelt einbindet?

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #4

          @koilapo
          Nein, das so zu notieren sollte schon gehen und in vis1 funktioniert das auch.

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

          724

          Online

          32.6k

          Benutzer

          82.2k

          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