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 @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
                            • liv-in-sky
                              liv-in-sky last edited by

                              @Homoran

                              du bist doch regex freak

                              hast du eine idee dazu

                              das ist unser text (hier mit "neuer zeile", ist im orginal nicht drin

                              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),
                               ....
                              

                              weißt du, ob man über ein regex das komma nach "Touching" ersetzen kann - der ganze text soll anschliessend mit "," gesplittet werden - somit ist das komma nach "Touching" für uns ein problem
                              evtl so:
                              wenn zwischen 2 bindestrichen mehrere komma, dann ersetze alle komma, außer das letzte, mit strichpunkt

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

                                @mosi289

                                sorry - mich überfordert die erstellung eines regex für diesen anwendungsfall (habe etwas rumprobiert und gesucht).

                                bei dieser sache solltest du sicherstellen, daß die dateinamen der songs keine kommas enthalten - es gibt doch free-tools, die dir ordner mit dateien in ein richtiges format umbenennen. es muss auch sichergestellt sein, dass immer der interpret dann ein bindestrich und dann der titel kommt! auch ein komma beim interpreten sollte nicht vorkommen - ich glaube, dass würde ich machen (die namen der dateien bearbeiten)

                                das einzige, was ich noch versucht habe, ist ein script, welche checkt, ob ein bindestrich in deiner tabelle in einer spalte erscheint, wenn nicht, ist es wieder ein komma-fall und dann wird das array nachträglich bearbeitet - aber auch da ist der bindestrich wichtig und bei mehreren komma im titel wird es wieder wackelig bzw stimmen die titel nicht ganz.

                                das script löscht zeilen aus dem mit split erzeugten array, wenn dort kein bindestrich ist - somit sollte das array wieder dem index entsprechen ( habe im script mehrere kommas dazugefügt)

                                let text="Trey Songz - Touchin, Touching, Lovin (feat. Nicki Minaj), Chris Brown - Ayo, Serani - No Games, No Cry No Women, GAMPER & DADONI - Far from Home, Sandro Silva - Epic, Total Epic, Mike Candys - Paradise, Hell (Radio Edit)";
                                let vari=text.split(",");
                                let arry=[];
                                for(let i=1;i<vari.length;i++) {
                                   log(vari[i-1])
                                   if(!vari[i].includes("-")) {//log("2==" + vari[i]);
                                     vari[i-1]= vari[i-1]+vari[i];
                                     arry.push(i);
                                       }}
                                
                                for(let i=0;i<vari.length;i++) {log(vari[i])}
                                for(let i=arry.length-1;i>-1;i--) {
                                 //   log(arry[i].toString())
                                     vari.splice(arry[i], 1);}
                                
                                
                                log(arry.toString())
                                for(let i=0;i<vari.length;i++) {log(vari[i])}
                                
                                

                                Image 160.png

                                1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @liv-in-sky last edited by

                                  @liv-in-sky hatte schon begürchtet, dass du mich anpingst 🙂

                                  So auf Anhieb hab ich keine Ahnung.
                                  wie sieht denn das Original der Liste aus? newLine wäre ein möglicher Trenner.

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

                                    @homoran nee- ist ein string ohne new line (mit new line wäre cool)

                                    *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)...
                                    

                                    grob zusammengefaßt:

                                    ich hatte versucht herauszufinden, ob zwischen 2 bindestrichen mehrere kommas vorkommen und je nach javascript befehl , nur das letzte komma beim split zu nehmen oder alle kommas zwischen den bindenstrichen zu ersetzen außer das letzte komma
                                    aber wie oben beschrieben - es darf keine komma in den interpreten geben und es muss ein bindestrich nach dem interpreten kommen und es darf keinen bindestrich im titel geben - also ganz schön viele vorraussetzungen

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @liv-in-sky last edited by

                                      @liv-in-sky ja! so hätte ich es auch versucht, aber mit dummem sturen RegEx sehe ich da keine Möglichkeit

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

                                        @homoran

                                        ich war mir bei meinen versuchen nicht sicher ob regex dumm ist oder ich als anwender 🙂

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

                                          @homoran
                                          hier ein beispiel: ich kann zwar das letzt komma finden (mit einem Negative Lookahead) aber das ganze sollte auf : zwischen " bindestrichen " angewendet werden - bekomme ich nicht hin.

                                          Image 161.png

                                          1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators last edited by Homoran

                                            @liv-in-sky jetzt hast du mich angefixt!

                                            aber hier
                                            Screenshot_20230122-102919_Firefox.jpg
                                            sehe ich keinen verwertbaren Unterschied zu den anderen Kommmas

                                            (hat sich überschnitten!)

                                            liv-in-sky 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            596
                                            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