Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst] VIS - JSON-Wert anklicken und an DP ü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

    [gelöst] VIS - JSON-Wert anklicken und an DP übergeben

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

      Tag,
      heutiges Projekt soll folgendes sein:

      Ich zeichne den Verlauf der Musiktitel (TuneIn) auf und schreibe diese in eine JSON Tabelle:

      Screenshot 2023-02-15 082802.png

      Nun würde ich gerne auf einen Titel klicken so dass dieser Wert automatisch in einen bestimmten DP geschrieben wird.

      Jetzt ist so die Frage ob ich da eine Möglichkeit habe schon beim Erstellen der JSON (mach ich per Blockly) etwas zu berücksichtigen oder/und ob dies auch rein per VIS zu lösen ist.

      Merci schon mal

      sigi234 liv-in-sky OliverIO 3 Replies Last reply Reply Quote 0
      • sigi234
        sigi234 Forum Testing Most Active @DJMarc75 last edited by sigi234

        @djmarc75

        Hi,
        Kannst du das Blockly zur Verfügung stellen?

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

          @sigi234 sagte in VIS - JSON-Wert anklicken und an DP übergeben:

          Kannst du das Blockly zur Verfügung stellen?

          Klaro:

          Screenshot 2023-02-15 140433.png

          Der TriggerDP "Titel" sieht immer prinzipiell folgend aus:

          Artist - Titel
          
          1 Reply Last reply Reply Quote 1
          • liv-in-sky
            liv-in-sky @DJMarc75 last edited by

            @djmarc75

            evtl geht sowas - https://forum.iobroker.net/post/932571 und post weiter unten

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

              @liv-in-sky bin jetzt nach folgendem Beitrag vorgegangen:

              https://forum.iobroker.net/post/932657

              in meinem Testdatenpunkt wird dann 0 bei Klick auf Zeile 1, 1 bei Klick auf Zeile 2 , usw ausgegeben...

              Brauche aber den Wert im Datenpunkt 🙂
              Was muss ich im Skript ändern?

              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'),'#w00565', '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.Testobjekte.MusiktitelTEST',(matches.split('-')[1]).replace(/...(.)/,"$1")); 
                  /*  vis.setValue('0_userdata.0.CONTROL-OWN.AAATEST.whiskey-id',matches2.trim());*/
               });  
              }, 0, true);
              
              liv-in-sky mickym 3 Replies Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @DJMarc75 last edited by

                @djmarc75 bin leider gleich weg - aber eigentlichsteht es in matches drin - das muss dann evtl mit regex oder script rausgesucht werden

                gib mal

                 alert(matches);
                

                rein - dann siehst du zb cell-row0-col1

                also ist row0 der erste wert row1 der zweite ....

                muss jetzt los - sonst kann ich dir ab 18:00 noch "beistehen" 🙂

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

                  @djmarc75
                  du könntest für die titelspalte direkt einen link tag reinschreiben, der bei klick den datenpunkt mit simple api beschreibt.
                  beim erstellen der daten für die tabelle musst du die strings so zusammenbauen, das die dann passen

                  <a href='#' onclick='jquery.get("http://ipaddress:8087/set/javascript.0.test?value='+encodeURIComponent('titel des aktuellen lied oder anderen Wert, den du in datenpunkt schreiben willst')+'");'>Titel des aktuellen Lieds zur Anzeige in Tabelle</a>
                  

                  Aufpassen bei den anführungsstrichen.
                  Der Befehl encodeURIComponent wandelt einen Text so um, das er als url-Parameter auch übertragen werden kann, da direkte Leerzeichen da nicht vorkommen können.
                  Beispiel aus
                  "eins zwei"
                  wird dann
                  "eins%20zwei"
                  andere Zeichen werden ähnlich kodiert.
                  Aber das sollte dann auch richtig beim Datenpunkt ankommen

                  Nachtrag, da ich mit Blockly nicht gut auskenne, hier der Block für encodeURIcomponent

                  https://www.smarthome-tricks.de/software-iobroker/blockly-url-encode-mit-blockly/

                  Das Beispiel im Link kannst du adaptieren um an den String zu kommen, den du dann in die Spalte schreibst. Das macht etwas ähnliches. Dein Ergebnis-Blockly dürfte dann etwas komplexer werden wie jetzt

                  DJMarc75 1 Reply Last reply Reply Quote 1
                  • mickym
                    mickym Most Active @DJMarc75 last edited by

                    @djmarc75 Wenn Du ein Array mit Objekten hast und Du mit einem Klick die Zeile bekommst, dann kannst Du doch direkt auf das Arrayelement zugreifen?

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

                      @oliverio sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                      du könntest für die titelspalte direkt einen link tag reinschreiben, der bei klick den datenpunkt mit simple api beschreibt.

                      Die Idee ist schonmal sehr gut !

                      Habe mir ein Blockly geschrieben welches mal "Testweise" ein JSON erstellt.

                      ABER da scheint noch was nicht ganz so rund zu sein (Thema Anführungsstrichen oder sowas):

                      Screenshot 2023-02-15 180907.png

                      [{"name":"<a href='#' onclick='jquery.get("http://192.168.178.2:8087/set/0_userdata.0.Testobjekte.MusiktitelTEST?value=EMELI%20SANDE%20-%20READ%20ALL%20ABOUT%20IT%20(PART%203)");'>EMELI SANDE - READ ALL ABOUT IT (PART 3)</a>"}]
                      

                      Ob Du da was sehen kannst was noch nicht stimmt?

                      Merci

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

                        @djmarc75 sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                        matches.split('-')[1]).replace(/...(.)/,"$1")

                        zeile 1 oder 2 oder 3 - also der index beginnend bei 1 !

                        Number(matches.replace(/cell-row(.*?)\-col.*/,"$1"))+1
                        

                        der inhalt der zelle:

                        $(this).text(); 
                        
                        DJMarc75 1 Reply Last reply Reply Quote 0
                        • DJMarc75
                          DJMarc75 @liv-in-sky last edited by

                          @liv-in-sky sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                          der inhalt der zelle:

                          puh, wo muss ich das denn im Skript eintragen ?
                          Bin da voll der Honk wenns um so Skripte geht 😵

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

                            @djmarc75

                            zeile 31: natürlich mit deinem datenpunkt

                            vis.setValue('0_userdata.0.Testobjekte.MusiktitelTEST',Number(matches.replace(/cell-row(.*?)\-col.*/,"$1"))+1 ); 
                            

                            und in zeile 19 muss die widget id deines widgets drinstehen (#w00565)

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

                              @liv-in-sky sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                              zeile 31: natürlich mit deinem datenpunkt

                              hatte ich schon gemacht aber wo muss ich

                              $(this).text(); 
                              

                              im Skript einfügen um den Wert in meinen DP zu schreiben ?

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

                                @djmarc75 das wäre dann ein extra dp in dem der titel stehen soll - also einfache eine neue zeile

                                vis.setValue('0_userdata.0.Testobjekte.MusiktitelTEST2',$(this).text() ); 
                                
                                DJMarc75 1 Reply Last reply Reply Quote 1
                                • DJMarc75
                                  DJMarc75 @liv-in-sky last edited by

                                  @liv-in-sky sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                                  also einfache eine neue zeile

                                  Jepp, funktioniert ! Danke und da werd ich mich morgen mal damit intensiver beschäftigen !

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

                                    @djmarc75 sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                                    [{"name":"<a href='#' onclick='jquery.get("http://192.168.178.2:8087/set/0_userdata.0.Testobjekte.MusiktitelTEST?value=EMELI SANDE - READ ALL ABOUT IT (PART 3)");'>EMELI SANDE - READ ALL ABOUT IT (PART 3)</a>"}]

                                    ja, das json-attribut ist ebenfalls in " eingeschlossen, daher müssen alle " innerhalb escaped werden, also ein \ davor hinzugefügt 2x

                                    "<a href='#' onclick='jquery.get(\"http://192.168.178.2:8087/set/0_userdata.0.Testobjekte.MusiktitelTEST?value=EMELI%20SANDE%20-%20READ%20ALL%20ABOUT%20IT%20(PART%203)\");'>EMELI SANDE - READ ALL ABOUT IT (PART 3)</a>"
                                    
                                    DJMarc75 1 Reply Last reply Reply Quote 1
                                    • DJMarc75
                                      DJMarc75 @OliverIO last edited by

                                      @oliverio sagte in VIS - JSON-Wert anklicken und an DP übergeben:

                                      also ein \ davor hinzugefügt 2x

                                      wahnsinn ... es funktioniert blendend !
                                      Danke dafür 👍

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      771
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      17
                                      481
                                      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