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. Entwicklung
  4. Eigenes Vis widget: Daten werden im View-Mode nicht geladen -> Erklärung für vis.states[] gesucht

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    15
    1
    430

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

Eigenes Vis widget: Daten werden im View-Mode nicht geladen -> Erklärung für vis.states[] gesucht

Geplant Angeheftet Gesperrt Verschoben Entwicklung
8 Beiträge 2 Kommentatoren 2.8k Aufrufe
  • Ä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.
  • Rene_HMR Offline
    Rene_HMR Offline
    Rene_HM
    Developer
    schrieb am zuletzt editiert von
    #1

    Ich versuche mich gerade an meinem ersten eigenen widget. Soweit bisher alles gut bis auf das wichtigste:

    Im Edit-Mode werden alle Daten geladen und das widget (basierend auf flot) zeigt alles wie gewünscht an.

    Im View-Mode dagegen bekomme ich den log "TypeError: xyz is undefined".

    Der folgende der code snippet zeigt das Problem:

    //get date
    var dateoid = data.instance + ".NextDaysDetailed.0d.date";
    
    //test only
    var val_temp_id = vis.states.attr(dateoid + '.val');
    if (val_temp_id === undefined || val_temp_id === null || val_temp_id === '') {
    	val_temp_id = '';
    	console.log("test failed " + val_temp_id);
    } else {
    	val_temp_id = val_temp_id.toString();
    	console.log("test " + val_temp_id);
    }
    
    

    Im edit-Mode komme ich immer in den else-Zweig, und die Daten aus dem Wetter-Adapter werden angezeigt.

    Im view-Mode komme ich nicht dorthin, sondern val_temp_id ist undefined.

    Ich habe diesen Code-Schnipsel in vielen anderen widgets so oder so ähnlich gesehen, dort scheint er zu funktionieren. Warum nicht bei mir?

    edit:

    Jetzt habe ich den browser einfach mal im view-Mode stehen gelassen. Und nach einer Weile werden die Diagramme auch hier angezeigt.

    Vielleicht kann mir jemand erklären, wie vis.states[] gefüllt wird? Im debugger sieht man, dass beim ersten Start nur sehr wenige Datenpunkte von den Adaptern enthalten sind. Nach einer Weile werden es immer mehr. Ich war erst der Meinung, dass die registrierten Datenpunkte nach vis.states.bind() enthalten sein müssten. Das stimmt nicht, da Datenpunkte enthalten sind, die mein widget nicht registriert…

    1 Antwort Letzte Antwort
    0
    • Rene_HMR Offline
      Rene_HMR Offline
      Rene_HM
      Developer
      schrieb am zuletzt editiert von
      #2

      Da bisher keine Ideen oder Lösungsvorschläge vorliegen, versuche ich die Frage anders zu stellen:

      Ich möchte ein widget erstellen, welches ganz bestimmte Datenpunkte von einem Adapter liest und darstellt. Da ich die Namen der Datenpunkte kenne (ist ja auch mein eigener Adapter :) ) und die Anzahl der nowtendigen datenpunkte hoch ist, möchte ich in der Konfiguration des widgets nur die Instanz des Adapters konfigurieren. Ich binde die Datenpunkte im widget, so dass ich das widget updaten kann, sobald sich der/die Datenpunkt(e) ändert/ändern. Ich möchte aber beim Start schon die aktuellen Daten ausgeben. Zu diesem Zeitpunkt scheint aber vis.states noch nicht gefüllt zu sein, wie oben schon geschrieben…

      Was wäre hier best practice um den aktuellen kompletten Datensatz bei einem Adapter abzuholen? Ein GetState oder ähnliches würde wahrscheinlich helfen...

      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

        Man sollte es anders machen.

        Da im View Modus wird Trafik optimiert und es werden nur die States geladen die in "oid*" gefunden werden.

        Du solltest für jeden Zustand, was du verwendest doch ein Input Feld machen.

        Nur die füllen solltest du automatisch. So ist in hq-widgets, starline, mediaplayer gemacht.

        Schaue hier an:

        https://github.com/instalator/ioBroker. … s.html#L13

        Du kannst für onChange eine Funktion definieren (onPlayWinampChanged)

        Die du dann so implementieren kannst:

        https://github.com/instalator/ioBroker. ... rs.js#L651

        1 Antwort Letzte Antwort
        0
        • Rene_HMR Offline
          Rene_HMR Offline
          Rene_HM
          Developer
          schrieb am zuletzt editiert von
          #4

          Danke Bluefox, so geht es…

          Ich habe für alle (160!) Datenpunkte ein Input-Feld angelegt und fülle diese automatisch. Das funktioniert und auch im live-Mode werden meine Daten nun angezeigt.

          Kann man die Input-Felder im Editor unsichtbar machen? Aus meiner Sicht macht es keinen Sinn, dem user die Möglichkeit

          zu geben, diese Datenpunkte zu ändern...

          oder alternativ:

          Wenn ich sie weiterhin änderbar lasse, muss ich die Änderungen auch im Programm verwenden. In dem Fall wäre es hilfreich, wenn

          man die OID's in arrays halten könnte.

          Im Moment würde der code (symbolisch) so aussehen:

          var data = $div.data('options');
          
          var sDate1 = vis.states[data.oid_Date1];
          var sDate2 = vis.states[data.oid_Date2];
          
          ...
          
          var sDate40 = vis.states[data.oid_Date40];
          
          

          lieber wäre mir

          var data = $div.data('options');
          
          for (var i=0; i<40) {
          	var sDate = vis.states[data.oid_Date[i]];
          }
          
          
          1 Antwort Letzte Antwort
          0
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #5

            @Rene_HM:

            Danke Bluefox, so geht es…

            Ich habe für alle (160!) Datenpunkte ein Input-Feld angelegt und fülle diese automatisch. Das funktioniert und auch im live-Mode werden meine Daten nun angezeigt.

            Kann man die Input-Felder im Editor unsichtbar machen? Aus meiner Sicht macht es keinen Sinn, dem user die Möglichkeit

            zu geben, diese Datenpunkte zu ändern...

            oder alternativ:

            Wenn ich sie weiterhin änderbar lasse, muss ich die Änderungen auch im Programm verwenden. In dem Fall wäre es hilfreich, wenn

            man die OID's in arrays halten könnte.

            Im Moment würde der code (symbolisch) so aussehen:

            var data = $div.data('options');
            
            var sDate1 = vis.states[data.oid_Date1];
            var sDate2 = vis.states[data.oid_Date2];
            
            ...
            
            var sDate40 = vis.states[data.oid_Date40];
            
            

            lieber wäre mir

            var data = $div.data('options');
            
            for (var i=0; i<40) {
            	var sDate = vis.states[data.oid_Date[i]];
            }
            
            ```` `  
            

            Du kannst versuchen die OIDs so zu definieren:

            oid(1-160)/hidden;
            
            

            https://github.com/ioBroker/ioBroker.vi … .html#L123

            Dann werden deine OIDs so adressiert werden können:

            for (var i=0; i<160) {
            	var sDate = vis.states[data.['oid' + i]];
            }
            
            

            Was bastelst du da? ;)

            1 Antwort Letzte Antwort
            0
            • Rene_HMR Offline
              Rene_HMR Offline
              Rene_HM
              Developer
              schrieb am zuletzt editiert von
              #6

              @Bluefox:

              Was bastelst du da? ;) `

              siehe http://forum.iobroker.net/viewtopic.php … 2&start=40

              Mein Ziel ist eigentlich, mein Heimautomatisierungs-UI basierend auf Qt in C++ durch ioBroker zu ersetzen. Dafür benötige

              ich noch diese Wetterdatenanzeige…

              Das widget liegt unter https://github.com/rg-engineering/ioBroker.vis-weather

              Im browser sieht mein widget jetzt bis auf ein paar Kleinigkeiten nicht so schlecht aus.

              1391_wether-widget.png

              In der android app wird das widget aber gar nicht angezeigt. Leider habe ich da überhaupt keine Möglichkeit,

              zu debuggen, oder?

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                @Rene_HM:

                @Bluefox:

                Was bastelst du da? ;) `

                siehe http://forum.iobroker.net/viewtopic.php … 2&start=40

                Mein Ziel ist eigentlich, mein Heimautomatisierungs-UI basierend auf Qt in C++ durch ioBroker zu ersetzen. Dafür benötige

                ich noch diese Wetterdatenanzeige…

                Das widget liegt unter https://github.com/rg-engineering/ioBroker.vis-weather

                Im browser sieht mein widget jetzt bis auf ein paar Kleinigkeiten nicht so schlecht aus.

                wether-widget.PNG

                In der android app wird das widget aber gar nicht angezeigt. Leider habe ich da überhaupt keine Möglichkeit,

                zu debuggen, oder? `
                Es gibt die Möglichkeit zu debuggen. Ich habe neulich im Forum die links auf debug Apk gepostet.

                Und es gibt Anleitung wie man Android über Chrome debuggen kann.

                Aber…...

                Es werden keine fremde Widgets in der App angezeigt.

                Mache einen offiziellen Widget Set und der taucht dann in der neue App Version auf.

                Deine Widgets sehen gut aus. :D

                1 Antwort Letzte Antwort
                0
                • Rene_HMR Offline
                  Rene_HMR Offline
                  Rene_HM
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @Bluefox:

                  Mache einen offiziellen Widget Set und der taucht dann in der neue App Version auf. `

                  Ich habe die beiden Adapter "DasWetter" und "vis-weather" auf NPM hochgeladen. Das war es, was du mit "mach ein offizielles widget set" gemeint hattest, oder?

                  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

                  618

                  Online

                  32.5k

                  Benutzer

                  81.6k

                  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