Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Vorlage] Denon HEOS Script

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[Vorlage] Denon HEOS Script

Scheduled Pinned Locked Moved JavaScript
javascripttemplate
358 Posts 48 Posters 84.1k Views 44 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H hotze78

    Erst mal Danke viel mal für eure Arbeit. Ich habe die Tage von Script auf den Adapter gewechselt. Mir ist noch nichts aufgefallen wo fehlerhaft wäre, alles funktioniert von Steuern, Gruppieren, Presets...
    Ausser Playlist habe ich noch nicht herausgefunden wie ich die an einem bestimmtes Gerät ansteuern kann. Mit heos.0.playlists.xxxxx.play ist es kein Problem. Aber mit Command auf den Player habe ich noch keine Lösung gefunden.

    W Offline
    W Offline
    withstu
    wrote on last edited by
    #178

    @hotze78 Das mit den Playlists ist in der Tat nicht so einfach. Da steht nämlich nirgends die sid von den playlists. Folgendes Kommando müsstest du im player channel im command state eingeben: add_to_queue&sid=1025&aid=4&cid=XXXXXX. Die cid ist die ID der Playlist.

    Habe mir gerade überlegt, dass ich die playlist und preset Ordner noch in den Sources Ordner verschiebe. Dann sieht man es klarer. Wenn man es streng nimmt, sind es ja auch keine devices...

    H 1 Reply Last reply
    0
    • W withstu

      @hotze78 Das mit den Playlists ist in der Tat nicht so einfach. Da steht nämlich nirgends die sid von den playlists. Folgendes Kommando müsstest du im player channel im command state eingeben: add_to_queue&sid=1025&aid=4&cid=XXXXXX. Die cid ist die ID der Playlist.

      Habe mir gerade überlegt, dass ich die playlist und preset Ordner noch in den Sources Ordner verschiebe. Dann sieht man es klarer. Wenn man es streng nimmt, sind es ja auch keine devices...

      H Offline
      H Offline
      hotze78
      wrote on last edited by
      #179

      @withstu Danke! Funktioniert bestens.
      Was ich noch nirgens in der Protokoll Spezifikationen gelesen habe, ist die Zonen Schaltung. Ich habe es bei mir mit dem Denon Adapter gelöst. Ist es denkbar das dies auch in den Heos adapter integriert werden kann wie in der App? Beispielbild
      hifi-im-hinterhof-berlin-heos-app-screenshot.jpg

      W 1 Reply Last reply
      0
      • H hotze78

        @withstu Danke! Funktioniert bestens.
        Was ich noch nirgens in der Protokoll Spezifikationen gelesen habe, ist die Zonen Schaltung. Ich habe es bei mir mit dem Denon Adapter gelöst. Ist es denkbar das dies auch in den Heos adapter integriert werden kann wie in der App? Beispielbild
        hifi-im-hinterhof-berlin-heos-app-screenshot.jpg

        W Offline
        W Offline
        withstu
        wrote on last edited by
        #180

        @hotze78 Sehr gut. Die App wird für einige Funktionen noch auf die Receiver API per Port 23 zugreifen (http://assets.eu.denon.com/DocumentMaster/DE/AVR1713_AVR1613_PROTOCOL_V8.6.0.pdf). Von daher ist da der Denon Adapter besser geeignet. In der HEOS API fehlen mir aber auch einige Funktionen, wie etwa Power An/Aus, das Vorspulen oder ein besseres Queue Management für TTS.

        PS.: Hab jetzt in v1.2.0 die presets und playlists in den entsprechenden source Ordner verschoben. Am besten vor der Installation die devices presets, playlists und sources einmal löschen.

        S 1 Reply Last reply
        0
        • W withstu

          @sveni_lee Ich habe gerade den Adapter erweitert (Version 1.1.2). In den Source Channels gibt es jetzt einen Browse Button. Im Log wird dann ausgegeben, welche HEOS Commands auf der nächsten Ebene möglich sind. So kann man halbwegs komfortabel navigieren und die Commands für die Automatisierung raussuchen.

          [BROWSE] [851081134] [Video] Possible Commands: browse/browse?sid=851081134&cid=2
          [BROWSE] [851081134] [Ordner durchsuchen] Possible Commands: browse/browse?sid=851081134&cid=64
          [BROWSE] [851081134] [Musik] Possible Commands: browse/browse?sid=851081134&cid=1
          [BROWSE] [851081134] [Bilder] Possible Commands: browse/browse?sid=851081134&cid=3
          [BROWSE] [851081134] {"sid":"851081134","returned":"4","count":"4"}
          [BROWSE] [Local Music] [Server] Possible Commands: browse/browse?sid=851081134
          [BROWSE] [Local Music] [AVM FRITZ!Mediaserver] Possible Commands: browse/browse?sid=77447081
          [BROWSE] [Local Music] {"sid":"1024","returned":"2","count":"2"}
          [BROWSE] [History] [SWR1 Baden-Württemberg 94.7 (Variety)] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s20291
          [BROWSE] [History] [1 LIVE] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s25260
          [BROWSE] [History] [DASDING 90.8 (Euro Hits)] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s20295
          

          Btw. ich habe einen Pull Request gestellt, sodass der Adapter in das offizielle Repository aufgenommen wird. Dann wird die Installation einfacher.

          S Offline
          S Offline
          sveni_lee
          wrote on last edited by
          #181

          @withstu

          vielen Dank für die neue Version. Ich werde mir das heute Abend mal ansehen.

          1 Reply Last reply
          0
          • W withstu

            @sveni_lee Ich habe gerade den Adapter erweitert (Version 1.1.2). In den Source Channels gibt es jetzt einen Browse Button. Im Log wird dann ausgegeben, welche HEOS Commands auf der nächsten Ebene möglich sind. So kann man halbwegs komfortabel navigieren und die Commands für die Automatisierung raussuchen.

            [BROWSE] [851081134] [Video] Possible Commands: browse/browse?sid=851081134&cid=2
            [BROWSE] [851081134] [Ordner durchsuchen] Possible Commands: browse/browse?sid=851081134&cid=64
            [BROWSE] [851081134] [Musik] Possible Commands: browse/browse?sid=851081134&cid=1
            [BROWSE] [851081134] [Bilder] Possible Commands: browse/browse?sid=851081134&cid=3
            [BROWSE] [851081134] {"sid":"851081134","returned":"4","count":"4"}
            [BROWSE] [Local Music] [Server] Possible Commands: browse/browse?sid=851081134
            [BROWSE] [Local Music] [AVM FRITZ!Mediaserver] Possible Commands: browse/browse?sid=77447081
            [BROWSE] [Local Music] {"sid":"1024","returned":"2","count":"2"}
            [BROWSE] [History] [SWR1 Baden-Württemberg 94.7 (Variety)] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s20291
            [BROWSE] [History] [1 LIVE] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s25260
            [BROWSE] [History] [DASDING 90.8 (Euro Hits)] Possible Commands: player/play_stream&sid=1026&cid=STATIONS&mid=s20295
            

            Btw. ich habe einen Pull Request gestellt, sodass der Adapter in das offizielle Repository aufgenommen wird. Dann wird die Installation einfacher.

            S Offline
            S Offline
            sveni_lee
            wrote on last edited by
            #182

            @withstu

            Ich habe mir das jetzt mal angesehen und es sieht wirklich gut aus.
            kannst Du den return auch in ein State als Array oder List packen?

            bspw.

            {Bilder : browse/browse?sid=851081134&cid=3; Musik : browse/browse?sid=851081134&cid=1}
            

            dann könnte man daraus eine Widget basteln denke ich...

            W 2 Replies Last reply
            0
            • S sveni_lee

              @withstu

              Ich habe mir das jetzt mal angesehen und es sieht wirklich gut aus.
              kannst Du den return auch in ein State als Array oder List packen?

              bspw.

              {Bilder : browse/browse?sid=851081134&cid=3; Musik : browse/browse?sid=851081134&cid=1}
              

              dann könnte man daraus eine Widget basteln denke ich...

              W Offline
              W Offline
              withstu
              wrote on last edited by withstu
              #183

              @sveni_lee Hab in Version 1.2.2 den State sources.browse_result eingeführt. Schau mal, ob du daraus ein Widget basteln kannst (hab ich noch nie gemacht). Man müsste nur den payload iterieren, die Namen anzeigen und dann jeweils einen Button pro command einblenden.

              {"sid":1024,
              "name":"Local Music",
              "parameter":{"sid":"1024","returned":"2","count":"2"},
              "payload":[
              {"name":"Navigate to top","commands":{"browse":"browse/browse?sid=1024"}},
              {"name":"Server","commands":{"browse":"browse/browse?sid=851081134"}},
              {"name":"AVM FRITZ!Mediaserver","commands":{"browse":"browse/browse?sid=77447081"}}
              ]}
              
              1 Reply Last reply
              0
              • S sveni_lee

                @withstu

                Ich habe mir das jetzt mal angesehen und es sieht wirklich gut aus.
                kannst Du den return auch in ein State als Array oder List packen?

                bspw.

                {Bilder : browse/browse?sid=851081134&cid=3; Musik : browse/browse?sid=851081134&cid=1}
                

                dann könnte man daraus eine Widget basteln denke ich...

                W Offline
                W Offline
                withstu
                wrote on last edited by withstu
                #184

                @sveni_lee Hab grad noch ein Script gebastet, welches für das Vis eine Tabelle baut. Ich kann es selbst kaum glauben, aber die Navigation funktioniert!:

                HTML Widget:

                {0_userdata.0.scriptData.HeosBrowseTable}
                

                Script:

                on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                    let data = JSON.parse(obj.state.val);
                    let html = ""
                    if(data){
                        html += "<h1>Source: " + data.name + "</h1>"
                        html += "<table>"
                        for (let i = 0; i < data.payload.length; i++) {
                            let payload = data.payload[i];
                            html += "<tr>";
                            html += "<td>" + payload.name + "</td>";
                            html += "<td>";
                            for (let key in payload.commands) {
                                let command = payload.commands[key];
                                html += "<button onClick=\"servConn.setState('heos.0.command','" + command +"')\">" + key + "</button>";
                            }
                            html += "</td>";
                            html += "</tr>";
                        }
                        html += "</table>";
                    }
                    setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                });
                
                Dennis RupprechtD 1 Reply Last reply
                0
                • W withstu

                  @sveni_lee Hab grad noch ein Script gebastet, welches für das Vis eine Tabelle baut. Ich kann es selbst kaum glauben, aber die Navigation funktioniert!:

                  HTML Widget:

                  {0_userdata.0.scriptData.HeosBrowseTable}
                  

                  Script:

                  on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                      let data = JSON.parse(obj.state.val);
                      let html = ""
                      if(data){
                          html += "<h1>Source: " + data.name + "</h1>"
                          html += "<table>"
                          for (let i = 0; i < data.payload.length; i++) {
                              let payload = data.payload[i];
                              html += "<tr>";
                              html += "<td>" + payload.name + "</td>";
                              html += "<td>";
                              for (let key in payload.commands) {
                                  let command = payload.commands[key];
                                  html += "<button onClick=\"servConn.setState('heos.0.command','" + command +"')\">" + key + "</button>";
                              }
                              html += "</td>";
                              html += "</tr>";
                          }
                          html += "</table>";
                      }
                      setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                  });
                  
                  Dennis RupprechtD Offline
                  Dennis RupprechtD Offline
                  Dennis Rupprecht
                  wrote on last edited by Dennis Rupprecht
                  #185

                  @withstu Hallo, kannst du mal ne genaue Anleitung schicken wie du das hinbekommen hast mit dem HTML! Ich bekomme nur im Log:

                  javascript.0 2020-09-29 09:33:46.699 info (31899) script.js.Heos: registered 1 subscription and 0 schedules
                  javascript.0 2020-09-29 09:33:46.686 info (31899) Start javascript script.js.Heos

                  Dennis RupprechtD 1 Reply Last reply
                  0
                  • Dennis RupprechtD Dennis Rupprecht

                    @withstu Hallo, kannst du mal ne genaue Anleitung schicken wie du das hinbekommen hast mit dem HTML! Ich bekomme nur im Log:

                    javascript.0 2020-09-29 09:33:46.699 info (31899) script.js.Heos: registered 1 subscription and 0 schedules
                    javascript.0 2020-09-29 09:33:46.686 info (31899) Start javascript script.js.Heos

                    Dennis RupprechtD Offline
                    Dennis RupprechtD Offline
                    Dennis Rupprecht
                    wrote on last edited by
                    #186

                    okay browse enablen dann geht es! Blider wären noch gut

                    W 1 Reply Last reply
                    0
                    • Dennis RupprechtD Dennis Rupprecht

                      okay browse enablen dann geht es! Blider wären noch gut

                      W Offline
                      W Offline
                      withstu
                      wrote on last edited by
                      #187

                      @Dennis-Rupprecht Ist jetzt in Version 1.2.4 drin. Diese Version enthält jetzt auch die oberste Sicht mit den Musikquellen. Bezüglich Presets und Playlisten gibt es eine kleine Änderung: Damit die browse_results immer bei den Musikquellen starten, musste ich die Presets und Playlisten aus dem automatischen Abruf beim Adapterstart rausnehmen. Wenn man diese nach der Installation haben möchte, muss man entweder einmalig den Browse Button der Source drücken oder über folgendes Script im VIS in die Favoriten springen:

                      on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                          let data = JSON.parse(obj.state.val);
                          let html = ""
                          if(data){
                              html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                              html += "<table>"
                              for (let i = 0; i < data.payload.length; i++) {
                                  let payload = data.payload[i];
                                  html += "<tr>";
                                  html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                  html += "<td>" + payload.name + "</td>";
                                  html += "<td>";
                                  for (let key in payload.commands) {
                                      let command = payload.commands[key];
                                      html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                  }
                                  html += "</td>";
                                  html += "</tr>";
                              }
                              html += "</table></div>";
                          }
                          setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                      });
                      
                      Dennis RupprechtD 1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        sveni_lee
                        wrote on last edited by
                        #188

                        also ich muß schon sagen, ich bin begeistert. Das sieht schon richtig gut aus.

                        zwei kurze Frage hätte ich noch :-)
                        könnte man den Text linksbündig und die button rechtsbündig machen?
                        un gibt es eine möglichleit die Auswahlliste zu sortieren. Ich weiß nicht warum HEOS die
                        so durcheinnder würfelt.

                        Danke!1.JPG

                        W 1 Reply Last reply
                        0
                        • W withstu

                          @Dennis-Rupprecht Ist jetzt in Version 1.2.4 drin. Diese Version enthält jetzt auch die oberste Sicht mit den Musikquellen. Bezüglich Presets und Playlisten gibt es eine kleine Änderung: Damit die browse_results immer bei den Musikquellen starten, musste ich die Presets und Playlisten aus dem automatischen Abruf beim Adapterstart rausnehmen. Wenn man diese nach der Installation haben möchte, muss man entweder einmalig den Browse Button der Source drücken oder über folgendes Script im VIS in die Favoriten springen:

                          on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                              let data = JSON.parse(obj.state.val);
                              let html = ""
                              if(data){
                                  html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                                  html += "<table>"
                                  for (let i = 0; i < data.payload.length; i++) {
                                      let payload = data.payload[i];
                                      html += "<tr>";
                                      html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                      html += "<td>" + payload.name + "</td>";
                                      html += "<td>";
                                      for (let key in payload.commands) {
                                          let command = payload.commands[key];
                                          html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                      }
                                      html += "</td>";
                                      html += "</tr>";
                                  }
                                  html += "</table></div>";
                              }
                              setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                          });
                          
                          Dennis RupprechtD Offline
                          Dennis RupprechtD Offline
                          Dennis Rupprecht
                          wrote on last edited by
                          #189

                          @withstu said in [Vorlage] Denon HEOS Script:

                          @Dennis-Rupprecht Ist jetzt in Version 1.2.4 drin. Diese Version enthält jetzt auch die oberste Sicht mit den Musikquellen. Bezüglich Presets und Playlisten gibt es eine kleine Änderung: Damit die browse_results immer bei den Musikquellen starten, musste ich die Presets und Playlisten aus dem automatischen Abruf beim Adapterstart rausnehmen. Wenn man diese nach der Installation haben möchte, muss man entweder einmalig den Browse Button der Source drücken oder über folgendes Script im VIS in die Favoriten springen:

                          on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                              let data = JSON.parse(obj.state.val);
                              let html = ""
                              if(data){
                                  html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                                  html += "<table>"
                                  for (let i = 0; i < data.payload.length; i++) {
                                      let payload = data.payload[i];
                                      html += "<tr>";
                                      html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                      html += "<td>" + payload.name + "</td>";
                                      html += "<td>";
                                      for (let key in payload.commands) {
                                          let command = payload.commands[key];
                                          html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                      }
                                      html += "</td>";
                                      html += "</tr>";
                                  }
                                  html += "</table></div>";
                              }
                              setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                          });
                          

                          Hast du echt super gemacht.

                          Dennis RupprechtD 1 Reply Last reply
                          0
                          • Dennis RupprechtD Dennis Rupprecht

                            @withstu said in [Vorlage] Denon HEOS Script:

                            @Dennis-Rupprecht Ist jetzt in Version 1.2.4 drin. Diese Version enthält jetzt auch die oberste Sicht mit den Musikquellen. Bezüglich Presets und Playlisten gibt es eine kleine Änderung: Damit die browse_results immer bei den Musikquellen starten, musste ich die Presets und Playlisten aus dem automatischen Abruf beim Adapterstart rausnehmen. Wenn man diese nach der Installation haben möchte, muss man entweder einmalig den Browse Button der Source drücken oder über folgendes Script im VIS in die Favoriten springen:

                            on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                                let data = JSON.parse(obj.state.val);
                                let html = ""
                                if(data){
                                    html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                                    html += "<table>"
                                    for (let i = 0; i < data.payload.length; i++) {
                                        let payload = data.payload[i];
                                        html += "<tr>";
                                        html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                        html += "<td>" + payload.name + "</td>";
                                        html += "<td>";
                                        for (let key in payload.commands) {
                                            let command = payload.commands[key];
                                            html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                        }
                                        html += "</td>";
                                        html += "</tr>";
                                    }
                                    html += "</table></div>";
                                }
                                setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                            });
                            

                            Hast du echt super gemacht.

                            Dennis RupprechtD Offline
                            Dennis RupprechtD Offline
                            Dennis Rupprecht
                            wrote on last edited by Dennis Rupprecht
                            #190

                            musik.png

                            Momentan schaut es so aus! Wenn man noch für das Browse nen anderes Bild setzen kann wäre auch super.

                            Vielleicht kann mir ja jemand verraten warum das html widget sich nicht Scrollen lassen kann!? Jemand eine Idee?

                            Dennis

                            S 1 Reply Last reply
                            0
                            • Dennis RupprechtD Dennis Rupprecht

                              musik.png

                              Momentan schaut es so aus! Wenn man noch für das Browse nen anderes Bild setzen kann wäre auch super.

                              Vielleicht kann mir ja jemand verraten warum das html widget sich nicht Scrollen lassen kann!? Jemand eine Idee?

                              Dennis

                              S Offline
                              S Offline
                              sveni_lee
                              wrote on last edited by
                              #191

                              @Dennis-Rupprecht

                              lässt es sich doch...
                              das musst du aktivieren.
                              schau mal unter "overlow-y" und dort wählst Du dann "scroll" aus

                              Dennis RupprechtD 1 Reply Last reply
                              0
                              • S sveni_lee

                                @Dennis-Rupprecht

                                lässt es sich doch...
                                das musst du aktivieren.
                                schau mal unter "overlow-y" und dort wählst Du dann "scroll" aus

                                Dennis RupprechtD Offline
                                Dennis RupprechtD Offline
                                Dennis Rupprecht
                                wrote on last edited by Dennis Rupprecht
                                #192

                                @sveni_lee Danke ja habe es gefunden! Habe die Icons für Play angepasst über das Script nun fehlt nur noch das wenn Source steht ein anderes genommen wird!

                                Source = DIR ICON
                                Play= PLAY ICON

                                Vielleicht kann das ja jemand in das .js Script mit einbauen. Bin in JS nicht gewandt!

                                Gruß Dennis

                                Dennis RupprechtD 1 Reply Last reply
                                0
                                • Dennis RupprechtD Dennis Rupprecht

                                  @sveni_lee Danke ja habe es gefunden! Habe die Icons für Play angepasst über das Script nun fehlt nur noch das wenn Source steht ein anderes genommen wird!

                                  Source = DIR ICON
                                  Play= PLAY ICON

                                  Vielleicht kann das ja jemand in das .js Script mit einbauen. Bin in JS nicht gewandt!

                                  Gruß Dennis

                                  Dennis RupprechtD Offline
                                  Dennis RupprechtD Offline
                                  Dennis Rupprecht
                                  wrote on last edited by Dennis Rupprecht
                                  #193

                                  @Dennis-Rupprecht said in [Vorlage] Denon HEOS Script:

                                  @sveni_lee Danke ja habe es gefunden! Habe die Icons für Play angepasst über das Script nun fehlt nur noch das wenn Source steht ein anderes genommen wird!

                                  Source = DIR ICON
                                  Play= PLAY ICON

                                  Vielleicht kann das ja jemand in das .js Script mit einbauen. Bin in JS nicht gewandt!

                                  Gruß Dennis

                                  Okay habe es so gemacht!

                                  Diese Zeile

                                              html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                  

                                  durch

                                               html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\"><img height=\"30px\" src=\"/vis.0/main/AVR/"+ key +".png\"></span></button>";
                                  

                                  Dann ein Bild mit Name browse.png und play.png im Directory /vis.0/AVR/ angelegt.

                                  Funktioniert und passt super

                                  W 1 Reply Last reply
                                  0
                                  • Dennis RupprechtD Dennis Rupprecht

                                    @Dennis-Rupprecht said in [Vorlage] Denon HEOS Script:

                                    @sveni_lee Danke ja habe es gefunden! Habe die Icons für Play angepasst über das Script nun fehlt nur noch das wenn Source steht ein anderes genommen wird!

                                    Source = DIR ICON
                                    Play= PLAY ICON

                                    Vielleicht kann das ja jemand in das .js Script mit einbauen. Bin in JS nicht gewandt!

                                    Gruß Dennis

                                    Okay habe es so gemacht!

                                    Diese Zeile

                                                html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                    

                                    durch

                                                 html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\"><img height=\"30px\" src=\"/vis.0/main/AVR/"+ key +".png\"></span></button>";
                                    

                                    Dann ein Bild mit Name browse.png und play.png im Directory /vis.0/AVR/ angelegt.

                                    Funktioniert und passt super

                                    W Offline
                                    W Offline
                                    withstu
                                    wrote on last edited by
                                    #194

                                    @Dennis-Rupprecht
                                    Du könntest folgendes:

                                    + payload.image_url +
                                    

                                    Mit folgendem ersetzen:

                                    + (payload.name == "Sources" ? "/vis.0/AVR/sources.png" : payload.image_url ) +
                                    
                                    Dennis RupprechtD 1 Reply Last reply
                                    0
                                    • W withstu

                                      @Dennis-Rupprecht
                                      Du könntest folgendes:

                                      + payload.image_url +
                                      

                                      Mit folgendem ersetzen:

                                      + (payload.name == "Sources" ? "/vis.0/AVR/sources.png" : payload.image_url ) +
                                      
                                      Dennis RupprechtD Offline
                                      Dennis RupprechtD Offline
                                      Dennis Rupprecht
                                      wrote on last edited by
                                      #195

                                      @withstu said in [Vorlage] Denon HEOS Script:

                                      @Dennis-Rupprecht
                                      Du könntest folgendes:

                                      + payload.image_url +
                                      

                                      Mit folgendem ersetzen:

                                      + (payload.name == "Sources" ? "/vis.0/AVR/sources.png" : payload.image_url ) +
                                      

                                      Hallo,

                                      wenn ich das mache muss ich ja ne if else aufbauen und mit dem von mir wird der Name erstellt und nimmt sich wenn vorhanden das Bild dazu.

                                      Habe nur ein Problem das die Bilder im Browser zu sehen sind aber im APP iobroker nicht. Hast du da ne Ideee?

                                      Gruß Dennis

                                      1 Reply Last reply
                                      0
                                      • S Offline
                                        S Offline
                                        sveni_lee
                                        wrote on last edited by
                                        #196

                                        ich habe dein super Script mal angefangen auf meine Bedürfnisse anzupassen.
                                        Mein Problem war das die Sortierung nicht gepasst hat und das ich auch nicht einen Ordner aufwärts navigieren konnte.
                                        Beide Punkte konnte ich umsetzen. Als nächstes werde ich versuchen die Tietel auf der untersten ebene noch anzupassen.
                                        Bei mir werden derzeit nur die Titel und nicht die interpreten angezeigt und auch nicht in der Reihenfolge wir sie auf der CD sind...

                                        on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                                        
                                            let data = JSON.parse(obj.state.val); //data = JSON.parse(json).data;
                                        
                                            let html = ""
                                        
                                            if(data){
                                        
                                        //        html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                                                var str = data.parameter.cid;
                                                log(data.parameter.cid)
                                                if(str.includes("fol")) {
                                                    let pos = str.lastIndexOf('/')
                                                    str = str.substr(0, pos);
                                                    let upwarts = "browse/browse?sid=" + data.name + "&cid=" + str
                                                    html += "<table>"
                                                    html += "<tr>";
                                                    html += "<td>";
                                                    
                                                    html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + upwarts +"')\"><span class=\"ui-button-text\">" + "zurück" + "</span></button>";
                                                    html += "</td>";
                                                    html += "</tr>";
                                                }
                                        
                                                let sorted = (data.payload).sort(compareValues('name'));
                                        
                                                for (let i = 0; i < sorted.length; i++) {
                                        
                                                    let payload = sorted[i];
                                                    
                                                    if (payload.name != "Navigate to top") {
                                        
                                                        html += "<tr>";
                                        
                                                        html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                        
                                                        html += "<td>" + payload.name + "</td>";
                                        
                                                        html += "<td>";
                                        
                                                        for (let key in payload.commands) {
                                        
                                                            let command = payload.commands[key];
                                        
                                                            html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                        
                                                        }
                                        
                                                        html += "</td>";
                                        
                                                        html += "</tr>";
                                        
                                                    }
                                        
                                                }
                                        
                                                html += "</table></div>";
                                        
                                            }
                                        
                                            setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                                        
                                        });
                                        
                                        function compareValues(key, order = 'asc') {
                                          return function innerSort(a, b) {
                                            if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
                                              // property doesn't exist on either object
                                              return 0;
                                            }
                                        
                                            const varA = (typeof a[key] === 'string')
                                              ? a[key].toUpperCase() : a[key];
                                            const varB = (typeof b[key] === 'string')
                                              ? b[key].toUpperCase() : b[key];
                                        
                                            let comparison = 0;
                                            if (varA > varB) {
                                              comparison = 1;
                                            } else if (varA < varB) {
                                              comparison = -1;
                                            }
                                            return (
                                              (order === 'desc') ? (comparison * -1) : comparison
                                            );
                                          };
                                        }
                                        
                                        

                                        2.JPG

                                        H 1 Reply Last reply
                                        0
                                        • S sveni_lee

                                          ich habe dein super Script mal angefangen auf meine Bedürfnisse anzupassen.
                                          Mein Problem war das die Sortierung nicht gepasst hat und das ich auch nicht einen Ordner aufwärts navigieren konnte.
                                          Beide Punkte konnte ich umsetzen. Als nächstes werde ich versuchen die Tietel auf der untersten ebene noch anzupassen.
                                          Bei mir werden derzeit nur die Titel und nicht die interpreten angezeigt und auch nicht in der Reihenfolge wir sie auf der CD sind...

                                          on({id: 'heos.0.sources.browse_result', change: 'any'}, function (obj) {
                                          
                                              let data = JSON.parse(obj.state.val); //data = JSON.parse(json).data;
                                          
                                              let html = ""
                                          
                                              if(data){
                                          
                                          //        html += "<div style=\"background-color:#3b3b3b;color:#fff\"><h1><img src=\"" + data.image_url + "\" height=\"30px\">" + data.name + "</h1>"
                                                  var str = data.parameter.cid;
                                                  log(data.parameter.cid)
                                                  if(str.includes("fol")) {
                                                      let pos = str.lastIndexOf('/')
                                                      str = str.substr(0, pos);
                                                      let upwarts = "browse/browse?sid=" + data.name + "&cid=" + str
                                                      html += "<table>"
                                                      html += "<tr>";
                                                      html += "<td>";
                                                      
                                                      html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + upwarts +"')\"><span class=\"ui-button-text\">" + "zurück" + "</span></button>";
                                                      html += "</td>";
                                                      html += "</tr>";
                                                  }
                                          
                                                  let sorted = (data.payload).sort(compareValues('name'));
                                          
                                                  for (let i = 0; i < sorted.length; i++) {
                                          
                                                      let payload = sorted[i];
                                                      
                                                      if (payload.name != "Navigate to top") {
                                          
                                                          html += "<tr>";
                                          
                                                          html += "<td><img src=\"" + payload.image_url + "\" height=\"30px\"></td>";
                                          
                                                          html += "<td>" + payload.name + "</td>";
                                          
                                                          html += "<td>";
                                          
                                                          for (let key in payload.commands) {
                                          
                                                              let command = payload.commands[key];
                                          
                                                              html += "<button class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\" onClick=\"servConn.setState('heos.0.command','" + command +"')\"><span class=\"ui-button-text\">" + key + "</span></button>";
                                          
                                                          }
                                          
                                                          html += "</td>";
                                          
                                                          html += "</tr>";
                                          
                                                      }
                                          
                                                  }
                                          
                                                  html += "</table></div>";
                                          
                                              }
                                          
                                              setState("0_userdata.0.scriptData.HeosBrowseTable", html);
                                          
                                          });
                                          
                                          function compareValues(key, order = 'asc') {
                                            return function innerSort(a, b) {
                                              if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
                                                // property doesn't exist on either object
                                                return 0;
                                              }
                                          
                                              const varA = (typeof a[key] === 'string')
                                                ? a[key].toUpperCase() : a[key];
                                              const varB = (typeof b[key] === 'string')
                                                ? b[key].toUpperCase() : b[key];
                                          
                                              let comparison = 0;
                                              if (varA > varB) {
                                                comparison = 1;
                                              } else if (varA < varB) {
                                                comparison = -1;
                                              }
                                              return (
                                                (order === 'desc') ? (comparison * -1) : comparison
                                              );
                                            };
                                          }
                                          
                                          

                                          2.JPG

                                          H Offline
                                          H Offline
                                          hotze78
                                          wrote on last edited by hotze78
                                          #197

                                          @sveni_lee sagte in [Vorlage] Denon HEOS Script:

                                          Bei deiner Wariante bekomme ich im Log eine Fehlermeldungen. Beginnt mit
                                          (950) Error in callback: TypeError: Cannot read property 'includes' of undefined
                                          withstu sein Script funktioniert. Ein Zurück währe sicher vorteilhaft.
                                          Anstatt ein Button währe mir lieber wenn der Text auswählbar währe. Oder ein Flat Box um den Text. Bei einem Ordner ein Ordner Symbol dort wo ja auch ein Cover geht.

                                          S 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          573

                                          Online

                                          32.7k

                                          Users

                                          82.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe