Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. VIS-2: vis.states[] liefert beim 1. Aufruf immer undefined

    NEWS

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

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

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

      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!

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

        @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 1 Reply Last reply Reply Quote 0
        • K
          koilapo @OliverIO last edited by

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

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

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

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

            Support us

            ioBroker
            Community Adapters
            Donate

            1.0k
            Online

            32.1k
            Users

            80.7k
            Topics

            1.3m
            Posts

            2
            4
            215
            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