Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Binding-Wert aus JSON filtern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Binding-Wert aus JSON filtern

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

      Servus,

      Ich habe bisher in der Vis einzelne Datenpunkte oder auch mal einzelne Werte aus einer JSON als Bindings verwendet. Nun möchte ich erneut mit einer JSON arbeiten, allerdings müsste ich die Einträge nach Eigenschaften filtern. In diesem Falle nach dem Gerätenamen.
      So schaut meine JSON aus, diese wird aus einer Datenbank per Skript erzeugt:

      [
        {
          "geraet_name": "Gerät A",
          "issue_name": "Nachbearbeiten",
          "issue_date": "24.09.2024",
          "issue_type": "warning",
        },
        {
          "geraet_name": "Test 4",
          "issue_name": "Vorrichtung nicht vorhanden",
          "issue_date": "04.05.2025",
          "issue_type": "warning",
        },
        {
          "geraet_name": "Auto",
          "issue_name": "defekt",
          "issue_date": "31.05.2025",
          "issue_type": "error",
        },
      

      Und so habe ich es bisher versucht einzubinden:

      {path:0_userdata.0.Fehlermeldung.wo_issues_data_json; v:"Gerät A"; vis.StandardFehler_V2(path, v)}
      

      Und im Skript in der Vis:

      vis.StandardFehler_V2 = function(jsonString, Geraetename) {
          try {
              const daten = JSON.parse(jsonString);
      
              // Filtere nach Gerätenamen
              const eintraege = daten.filter(e => e.geraet_name === Geraetename);
      
              if (eintraege.length === 0) return 'green';
      
              const Error = eintraege.some(e => e.issue_type === 'error');
              const Warning = eintraege.some(e => e.issue_type === 'warning');
              const Notification = eintraege.some(e => e.issue_type === 'notification');
      
              if (Error) return 'red';
              if (Warning) return 'yellow';
              if (Notification) return 'green';
      
              return 'green'; 
          } catch (err) {
              console.error('[StandardFehler_V2] Fehler beim Parsen oder Filtern:', err.message);
              return 'grey';
          }
      };
      

      Das Ziel ist es je nach Fehlertyp eine Farbe für den Widget auszugeben. Hierzu wird der JSON-Eintrag nach dem Gerätenamen gefiltert und der Wert von issue_type wird abgefragt, dieser gibt dann die Farbe zurück.
      Kann allerdings nicht schlussfolgern woran es scheitert.

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

        @marcio

        dann schaue mal in die browser konsole mit F12.
        Bindings haben glaube ich manchmal Probleme mit JSON

        Ergänzung.
        Du hast du im binding einen fehler

        Der folgende Ausdruck ist ungültig. Der Doppelpunkt ist nur in Verbindung eines Datenpunkts gültig. Da muss man dann = nehmen

        v:"Gerät A"
        

        Wenn die Funktion im script-Reiter drinsteht, dann ohne vis. referenzieren.

        {path:0_userdata.0.Fehlermeldung.wo_issues_data_json; v="Gerät A"; StandardFehler_V2(path, v)}
        

        Deine Funktion wird jedesmal mehrfach aufgerufen, teilweise mit undefined. Da musst mal schauen ob da noch was in der Funktion machen musst.
        Wenn du in die erste Zeile deiner Funktion

        debugger;
        

        reinschreibst und die developer konsole des browsers geöffnet hast, kannst du im detail sehen was passiert.

        M OliverIO 2 Replies Last reply Reply Quote 0
        • M
          MarcIO @OliverIO last edited by MarcIO

          @oliverio

          In der Konsole wird dies hier ausgegeben:

          [StandardFehler_V2] Fehler beim Parsen oder Filtern:"JSON Parse error: Unexpected identifier \"undefined\""
          

          Wüsste nicht warum dieser Zustand entstehen sollte und woher es auch kommen könnte. Findet er unter dem Pfad die JSON-Datei nicht oder kann er den Inhalt nicht auslesen?

          Aber der Skript wird ausgeführt, ich bekomme den Wert grau, standardmäßig ist es weiß.

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

            @oliverio sagte in Binding-Wert aus JSON filtern:

            Bindings haben glaube ich manchmal Probleme mit JSON

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

              @oliverio

              Also einfach so annehmen? Ist ja mega verärgerlich..

              Gäbe es eine Alternative?

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

                @marcio
                ich habe mal ein widget gebaut mit dem das geht.
                https://forum.iobroker.net/topic/31521/test-widget-json-template
                Dan kannst du dir deine Darstellung individuell bauen

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

                  @oliverio

                  Ja den kenne ich bereits und nutze es auch, aber für diesen Fall wäre es leider viel zu aufwändig.
                  Wie schaut es denn mit getState aus? Ist es mittlerweile wieder sinnvoll damit zu arbeiten? Hatte nämlich in der Vergangenheit öfter mal Probleme damit in IoB.

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

                    @marcio

                    Was heißt aufwändig, eigentlich nicht.

                    GetState gibt es bei vis quasi nicht, bzw. ist es noch aufwändiger.

                    Dann könnte man noch den Datenpunkt per Binding in ein Java Skript in einem HTML Widget einblenden. Ist aber genauso aufwändig, wie jsontemplate

                    Beispiel:

                    <p class="myvar">test</p>
                    <script>
                    debugger;    
                    var json = {0_userdata.0.test};
                    $(".myvar").html(json[0].geraet_name);
                    </script>
                    
                    
                    M 1 Reply Last reply Reply Quote 0
                    • M
                      MarcIO @OliverIO last edited by

                      @oliverio

                      Von der Logik her nicht unbedingt, aber ich habe dieses Binding in nav-button verwendet und müsste es entsprechend in html/css/js nochmals machen.

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      854
                      Online

                      31.9k
                      Users

                      80.1k
                      Topics

                      1.3m
                      Posts

                      2
                      9
                      190
                      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