Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Ausgewählter Index von JSON Tabelle an Datenpunkt übergeben

    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

    Ausgewählter Index von JSON Tabelle an Datenpunkt übergeben

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

      Guten Abend,

      ich habe mittels einer JSON Tabelle meine aktuelle Sonos Playlist (queue) dargestellt. Das klappt auch alles soweit ganz gut.
      Jetzt möchte ich, wenn ich einen Eintrag in dieser Tabelle anklicke, dass der Index des ausgewählten Eintrags (also quasi die Tabellenzeile als Zahl) in einen Datenpunkt geschrieben wird. Dieser Datenpunkt bildet den aktuellen Titel ab, der abgespielt wird. So könnte ich mit einem Klick auf einen Song in der Tabelle diesen direkt abspielen.

      Ich habe schon versucht den Datenpunkt in der Bestätigung-ID und der Ausgewählt-ID einzutragen, weil es dazu auch leider keinerlei Hilfestellung gibt. Beides hat aber absolut keine Wirkung. Lässt sich das ganze vielleicht über ein globales Skript realisieren?

      Ich muss noch dazu sagen, dass ich gerade erst angefangen habe mit der Visualisierung und da echt wenig Plan von habe 🙃

      Mit freundlichen Grüßen
      Robin M.

      OliverIO liv-in-sky 2 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @Mosi289 last edited by

        @mosi289

        Bitte ein Beispiel zeigen

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

          @oliverio

          ich versuche es mal mit Bildern zu verdeutlichen.

          Ich nutze das JSON Table Widget habe in der Table Object ID meine JSON Tabelle übergeben:

          A0675569-EB47-47D7-8EDA-93A7076CBF50.jpeg

          Die Tabelle sieht dann so aus (noch nicht formatiert):

          556223BB-B1BD-4144-B3E9-36B1F8648727.jpeg

          Man kann da jetzt auch Titel anklicken. Der Cursor ändert sich und der Titel leuchtet dann blau auf. Jetzt würde ich gerne den RowIndex an den Datenpunkt current_Title vom Sonos Adapter übergeben, um den Song wechseln zu können. Momentan ist es ja einfach nur eine Tabelle mit Daten, mehr nicht.

          Ich würde gerne Code anfügen, bis zu diesem Punkt habe ich aber noch gar keinen gebraucht 😁 .

          OliverIO liv-in-sky 2 Replies Last reply Reply Quote 0
          • OliverIO
            OliverIO @Mosi289 last edited by

            @mosi289
            Er schreibt von Json
            Postet aber kein JSON

            1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @Mosi289 last edited by

              @mosi289

              meist du sowas:

              script-vis18.gif

              Image 151.png

              M 1 Reply Last reply Reply Quote 0
              • M
                Mosi289 @liv-in-sky last edited by

                @liv-in-sky

                ja das ist schon fast was ich brauche! Allerdings würde ich gerne wenn du z.B. auf "Jun" klickst den Reihenindex 0 übergeben und nicht den Inhalt. Bei Mai eine 1, Apr eine 2 usw..

                Der Datenpunkt, in den ich das schreiben möchte, bildet quasi den aktuell abgespielten Song der Liste ab (current_track_number):

                8B2270C0-8A58-47A5-A7D7-67D2BC4CB682.jpeg

                liv-in-sky 2 Replies Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @Mosi289 last edited by liv-in-sky

                  @mosi289 ohne ein zusätzliches script, wirst du da nicht weiterkommen - das brauchst du zum analysieren

                  ich habe noch eine andere lösung, ist aber weitaus komplexer (im gif taucht immer die index nummer auf, bevor der text kommt - einfach übersehen - ist eigentlich für etwas anderes gedacht - oder brauchst du genau diesen index ????😞

                  script-vis19.gif

                  1 Reply Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @Mosi289 last edited by

                    @mosi289

                    habe es nochmal gelesen - du willst ja eigentlich den index

                    script-vis19.gif

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      Mosi289 @liv-in-sky last edited by

                      @liv-in-sky

                      Ja genau das brauche ich! 🙂 Wie hast du das jetzt gelöst?

                      liv-in-sky 1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @Mosi289 last edited by liv-in-sky

                        @mosi289

                        • dazu nutze ich das materialdesign table widget - materialdesign widget adapter muss installiert sein - geht im adapter-tab (- siehe letztes bild)
                        • und ein script im script-tab des vis editors

                        da dieses script sich auf das widget bezieht, braucht man ein weiteres script(ist enthalten), welches auf da widget wartet, während die view ladet

                        das alles muss in den script-tab im vis editor

                        function waitForElement(parent, elementPath, wid, widgetName, callBack, counter = 0, debug = false) {
                        
                                if (counter < 30) {
                        
                                    setTimeout(function () {
                        
                                        if (parent.find(elementPath).length > 0) {
                        
                                            if (debug) console.log(`[${widgetName} ${wid}] it took ${counter}ms to wait for the element '${elementPath}'`);
                        
                                            callBack();
                        
                                        } else {
                        
                                            if (debug) console.log(`[${widgetName} ${wid}] wait for element '${elementPath}'`);
                        
                                            counter++
                        
                                            waitForElement(parent, elementPath, wid, widgetName, callBack, counter, debug);
                        
                                        }
                        
                                    }, 1000);
                        
                                } else {
                        
                                   if (debug) console.warn(`[${widgetName} ${wid}] stop waiting after ${counter} retries`);
                        
                                    callBack();
                        
                               }
                        
                           }
                        
                          waitForElement($('body'),'#w00401', 'dummy', 'dummy', function () {
                        
                          // Widget ist geladen, auf das Widget klicken, w02705 ist die ID von meinem basic - Screen Resolution Widget
                        
                         console.log("jetzt")
                        
                         $("[id$='col1']").click(function() {
                             var matches = this.id; 
                           /*  console.log(this.id)
                               var newId=matches.replace("col0","col2");newId="#"+newId;
                             var matches3=$(newId).text();
                              var matches2 = $(this).text(); */
                              
                             /* alert(matches+matches2+matches3);*/
                              vis.setValue('0_userdata.0.CONTROL-OWN.AAATEST.whiskey-id',(matches.split('-')[1]).replace(/...(.)/,"$1")); 
                            /*  vis.setValue('0_userdata.0.CONTROL-OWN.AAATEST.whiskey-id',matches2.trim());*/
                         });  
                        
                        }, 0, true);
                        
                        
                        
                        
                        
                        

                        an diesen stellen musst du deine widget-id und den datenpunkt eintragen

                        Image 155.png

                        widget-installation:
                        Image 156.png

                        M 3 Replies Last reply Reply Quote 0
                        • M
                          Mosi289 @liv-in-sky last edited by

                          @liv-in-sky

                          Ich werde das heute Nachmittag direkt ausprobieren. Vielen Dank dir schon mal! 🙂

                          1 Reply Last reply Reply Quote 0
                          • M
                            Mosi289 @liv-in-sky last edited by

                            @liv-in-sky

                            Habe es doch jetzt schon mal probiert, bekomme es aber noch nicht zum Laufen.
                            Die Widget-ID im Skript (in deinem Beispiel w00401): ist das die Widget-ID von der MaterialDesign Tabelle?

                            Ich kann in der Tabelle nämlich leider keine Zeile anklicken, nur den Text der Zeile markieren.

                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @Mosi289 last edited by

                              @mosi289 ja

                              Image 157.png

                              zeig mal die tabelle im neuen widget

                              1 Reply Last reply Reply Quote 0
                              • M
                                Mosi289 @liv-in-sky last edited by

                                @liv-in-sky

                                So jetzt läufts! 🙂 Der Klick bezog sich im Skript auf col1, ich nutze aber col0. Vielen Dank!

                                Jetzt habe ich noch ein letztes, wahrscheinlich triviales Problem. Meine Playlist wird vom Sonos Adapter als Komma separierter String ausgegeben:

                                Stylo G - Dumpling, Cypress Hill - Busted In the Hood (Explicit Album Version), rako - Aus dem Schatten ins Licht, Kanye West - Gold Digger, Lil Wayne - A Milli, Young T & Bugsey - Strike a Pose (feat. Aitch), Headie One - Both, Summer Cem - Tamam Tamam, Manudigital - Only Just Begun...
                                

                                Den Versuche ich mit einem Skript in eine JSON Form zubekommen, indem ich bei "," splitte. Das klappt theoretisch gut. Wenn aber z.B. mehrere Interpreten eines Songs mit "," getrennt werden, splittet er natürlich auch an der Stelle. Mein Skript sieht wie folgt aus:

                                on({id: [].concat(['sonos.0.root.192_168_178_29.favorites_set']), change: "ne"}, async function (obj) {
                                await wait(3000);
                                var json = [];
                                var to = getState('sonos.0.root.192_168_178_29.queue').val
                                var toSplit = to.split(",");
                                for (var i = 0; i < toSplit.length; i++) {
                                    json.push({playlist:toSplit[i]});
                                }
                                setState('0_userdata.0.Playlist',json)
                                setState("vis.0.control.command"/*Command for vis*/, 'refresh');
                                });
                                

                                Wahrscheinlich ist das so eine absolute Katastrophe, aber ich programmiere wirklich nur selten und wenn dann meistens in Swift 😬

                                liv-in-sky 2 Replies Last reply Reply Quote 0
                                • liv-in-sky
                                  liv-in-sky @Mosi289 last edited by liv-in-sky

                                  @mosi289

                                  wo sehe ich so einen fall mit mehreren interpreten? erkenne ich in denem beispiel leider nicht - kenne die musik nicht 😞

                                  M 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @Mosi289 last edited by liv-in-sky

                                    @mosi289 achso - gleich der erste ?

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      Mosi289 @liv-in-sky last edited by

                                      @liv-in-sky

                                      **Trey Songz - Touchin, Lovin (feat. Nicki Minaj)**, Chris Brown - Ayo, Serani - No Games, GAMPER & DADONI - Far from Home, Sandro Silva - Epic, Mike Candys - Paradise (Radio Edit), Akon - Smack That, Mike Candys - Make It Home (Radio Edit)...
                                      

                                      Die Playlist ist ziemlich lang, deswegen habe ich mal nur einen Ausschnitt eingefügt. Gleich beim erster Titel taucht im Songnamen ein "," auf wo er dann splittet. Das führt natürlich dazu, dass ab dem Eintrag der Index immer um 1 verrutsch ist.

                                      liv-in-sky DJMarc75 2 Replies Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @Mosi289 last edited by liv-in-sky

                                        @mosi289

                                        da muss ich mal nachdenken - event. mit regex

                                        wenn zwischen 2 bindestrichen mehrere komma, dann ersetze alle komma, außer das letzte, mit bindestrich

                                        irgendwie so

                                        1 Reply Last reply Reply Quote 0
                                        • DJMarc75
                                          DJMarc75 @Mosi289 last edited by

                                          @mosi289 aus welchem Datenpunkt vom SonosAdapter nimmst Du Deine Playliste ?

                                          M 1 Reply Last reply Reply Quote 0
                                          • M
                                            Mosi289 @DJMarc75 last edited by

                                            @djmarc75

                                            Der Datenpunkt heißt „queue“. Bin leider gerade unterwegs und kann keinen Screenshot schicken.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            593
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            38
                                            1342
                                            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