Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] Denon HEOS Script

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [Vorlage] Denon HEOS Script

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

      Hallo Uhula, erstmal sensationelle Arbeit. Du hast aus dem Script von Brati sehr viel rausgeholt. Die regelmäßige Abfrage scheint in 5000ms Takt zu erfolgen, wenn ich das richtig entnommen haben. Eine sekündliche Abfrage verursacht zu viel Traffic oder was ist der Grund für die 5s Abfrage?

      Viele Grüße Ben

      1 Reply Last reply Reply Quote 0
      • Uhula
        Uhula last edited by

        @obakuhl:

        Eine sekündliche Abfrage verursacht zu viel Traffic oder was ist der Grund für die 5s Abfrage? `
        Es findet kein Polling, keine regelmäßige Abfrage statt. Stattdessen wird beim HEOS Player ein Callback (registerChangeEvents) in das Script registriert und der HEOS Player sendet dann Änderungen von sich aus dorthin. Offensichtlich macht dieser das für den Play-Fortschritt im 5 Sekunden Rhythmus. Andere Änderungen sind "sofort" da.

        1 Reply Last reply Reply Quote 0
        • P
          Postmymind last edited by

          Hey, danke für diese herausragende Arbeit! Unglaublich, was du schon rausgeholt hast. Hat es schon jemand geschafft mehrere Heos-Geräte zu gruppieren über ioBroker? Ich habe habe insgesamt 7 Geräte im Haus und würde gern' per Trigger (Sprachbefehl oder Button) z.B. im kompletten Erdgeschoss eine Quelle abspielen, wie es sonst nur über die Heos-App möglich ist. Vielen Dank schon mal für die herausragende Arbeit!

          1 Reply Last reply Reply Quote 0
          • O
            obakuhl Developer last edited by

            Ich regel das über Skripte, die die einzelnen commands dann an die jeweilige Box sendet. Blockly eignet sich sehr gut dafür. Wenn du verschiedenen Gruppen hast reicht es auch ein Gerät aus dieser Gruppe einen Befehl zu senden (z.B. über "play_preset&preset=xyz") dann spielt es auf allen "dazugehörigen" Heosgeräten auch diese Quelle ab. Die Heosapp brauch ich dadurch überhaupt nicht mehr, ich regel alles über die VIS Oberfläche.

            Ist vielleicht nicht die sauberste Lösung, aber es funktioniert sehr gut 😉
            3322_denon_mute_blockly.png

            1 Reply Last reply Reply Quote 0
            • P
              Postmymind last edited by

              Hey! Vielen Dank für die rasche Antwort. Verdammt guter Ansatz aber wie definiere ich vorgefertigte Gruppen?

              Entschuldigt mein ioBroker / Skript Einsteigerwissen.

              @obakuhl:

              Ich regel das über Skripte, die die einzelnen commands dann an die jeweilige Box sendet. Blockly eignet sich sehr gut dafür. Wenn du verschiedenen Gruppen hast reicht es auch ein Gerät aus dieser Gruppe einen Befehl zu senden (z.B. über "play_preset&preset=xyz") dann spielt es auf allen "dazugehörigen" Heosgeräten auch diese Quelle ab. Die Heosapp brauch ich dadurch überhaupt nicht mehr, ich regel alles über die VIS Oberfläche.

              Ist vielleicht nicht die sauberste Lösung, aber es funktioniert sehr gut 😉 `

              1 Reply Last reply Reply Quote 0
              • O
                obakuhl Developer last edited by

                Das musst du über die App machen. https://denon-de.custhelp.com/app/answers/detail/a_id/2256/~/heos-gruppieren.

                Sonst nochmal der Auszug aus der Supportseite:

                ` > <size size="150">Wie kann ich meine HEOS Lautsprecher zu einer Gruppe zusammenfassen?</size>

                Die Gruppierung von HEOS Lautsprechern erlaubt es Ihnen, zwei (oder mehrere) HEOS Lautsprecher in unterschiedlichen Räumen oder auch im gleichen Raum mit der gleichen Musik anzusteueren und zu bedienen. Die Gruppierung sorgt auch für einen hervorragende Synchronisation zwischen den einzelnen Lautsprechern, so dass Sie keinen zeitlichen Versatz (Echo) hören, wenn die Lautsprecher in unterschiedlichen Räumen stehen.

                Um die HEOS Lautsprecher zu gruppieren, wählen Sie in der HEOS App den Reiter Räume an. Anschliessend tippen Sie den HEOS Lautsprecher an, den Sie zu mit einem anderen HEOS Lautsprecher gruppieren möchen. Schieben Sie ihn auf den anderen HEOS Lautsprecher.

                Sie können auch alle HEOS Lautsprecher (max. 16 Stück) auf einmal zusammenfügen. Halten Sie dazu bitte den ersten und letzten HEOS Lautsprecher gedrückt und schieben diese zusammen.

                Um einen Lautsprecher aus der Gruppe zu entfernen, gehen Sie bitte genauso vor. Halten Sie den Lautsprecher gedrückt und ziehen ihn aus der Gruppe heraus. `

                1 Reply Last reply Reply Quote 0
                • P
                  Postmymind last edited by

                  Danke für die schnelle Rückmeldung. Wie ich es in der App mache weiß ich ja … Hab Heos ja seit Marktstart im Einsatz.

                  Oder meinst du, dass man die Gruppen über die App nur definiert und dann über io als Variable anspricht, damit man sich den Weg über die App spart?

                  Hätte ja aber sein können, dass ich das auch über ein Script lösen kann. Meine aktuelle Lösung für die Gruppierung von Räumen ohne die App ist der Harmony Adapter in ioBroker. In Harmony habe ich jeweils Aktivitäten ohne Quellenauswahl für die einzelnen Gruppierungen erstellt, welche dann die Speaker zusammenfasst. Mit dem Spotify Adapter kann ich dann über die Vis das aktive Device wählen.

                  @obakuhl:

                  Das musst du über die App machen. https://denon-de.custhelp.com/app/answers/detail/a_id/2256/~/heos-gruppieren.

                  Sonst nochmal der Auszug aus der Supportseite:

                  ` > <size size="150">Wie kann ich meine HEOS Lautsprecher zu einer Gruppe zusammenfassen?</size>

                  Die Gruppierung von HEOS Lautsprechern erlaubt es Ihnen, zwei (oder mehrere) HEOS Lautsprecher in unterschiedlichen Räumen oder auch im gleichen Raum mit der gleichen Musik anzusteueren und zu bedienen. Die Gruppierung sorgt auch für einen hervorragende Synchronisation zwischen den einzelnen Lautsprechern, so dass Sie keinen zeitlichen Versatz (Echo) hören, wenn die Lautsprecher in unterschiedlichen Räumen stehen.

                  Um die HEOS Lautsprecher zu gruppieren, wählen Sie in der HEOS App den Reiter Räume an. Anschliessend tippen Sie den HEOS Lautsprecher an, den Sie zu mit einem anderen HEOS Lautsprecher gruppieren möchen. Schieben Sie ihn auf den anderen HEOS Lautsprecher.

                  Sie können auch alle HEOS Lautsprecher (max. 16 Stück) auf einmal zusammenfügen. Halten Sie dazu bitte den ersten und letzten HEOS Lautsprecher gedrückt und schieben diese zusammen.

                  Um einen Lautsprecher aus der Gruppe zu entfernen, gehen Sie bitte genauso vor. Halten Sie den Lautsprecher gedrückt und ziehen ihn aus der Gruppe heraus.

                  1 Reply Last reply Reply Quote 0
                  • B
                    Brati last edited by

                    @Postymind

                    Die Gruppen solltest du gemäß CLI Protokoll mit den Player PID setzen können:

                    This command is used to perform the following actions:
                    
                    Create new group:
                    Creates new group. First player id in the list is group leader.
                    Ex: heos://group/set_group?pid=3,1,4Modify existing group members:
                    
                    Adds or delete players from the group. First player id should be the group leader id.
                    Ex: heos://group/set_group?pid=3,1,5
                    
                    Ungroup all players in the group
                    Ungroup players. Player id (pid) should be the group leader id.
                    Ex: heos://group/set_group?pid=3
                    
                    Command: heos://group/set_group?pid=player_id_leader, player_id_member_1,…,player_id_member_n
                    

                    Und das dann im "command" State übergeben. Habe es aber noch nicht getestet. Mein AVR mit 3 Zonen hat nur eine PID und dann gibt es nur eine 2. Box…

                    Grüße

                    Brati

                    1 Reply Last reply Reply Quote 0
                    • O
                      obakuhl Developer last edited by

                      Achso 8-)

                      Im Skript ist aktuell noch nichts zu Gruppen implementiert, soweit ich das durchschaut habe.

                      Genau, ich sende die Komandos, wie z.B. einen Lautsprecher muten über ioBroker. Die App verwende ich gar nicht mehr. Wahrscheinlich ist es gar nicht nötig, wenn man alles über Blocklyskripte regelt und die Lautsprecher einzeln anspricht, dass man diese gruppiert. Aber dadurch ist auf jeden Fall sichergestellt, dass die Boxen synchron laufen.

                      Generell ist aber sicher mögich, dass über die Group-Schnittstelle des CLI Protokolls von HEOS professioneller zu regeln.

                      1 Reply Last reply Reply Quote 0
                      • P
                        Postmymind last edited by

                        Danke! Ich werde mal testen sobald ich Zuhause bin. Erreichen möchte ich z.B., dass ich über verschiedene Buttons und deren "States" im Haus (ob Hue Dimmer Switch o.Ä.) Gruppierungen, Quellenauswahl und Playstate triggern kann. Ich werde mal mit den 7 vorhandenen Heos (1x Link, 6x Heos 3/5) testen. Danke schon mal

                        @Brati:

                        @Postymind

                        Die Gruppen solltest du gemäß CLI Protokoll mit den Player PID setzen können:

                        This command is used to perform the following actions:
                        
                        Create new group:
                        Creates new group. First player id in the list is group leader.
                        Ex: heos://group/set_group?pid=3,1,4Modify existing group members:
                        
                        Adds or delete players from the group. First player id should be the group leader id.
                        Ex: heos://group/set_group?pid=3,1,5
                        
                        Ungroup all players in the group
                        Ungroup players. Player id (pid) should be the group leader id.
                        Ex: heos://group/set_group?pid=3
                        
                        Command: heos://group/set_group?pid=player_id_leader, player_id_member_1,…,player_id_member_n
                        

                        Und das dann im "command" State übergeben. Habe es aber noch nicht getestet. Mein AVR mit 3 Zonen hat nur eine PID und dann gibt es nur eine 2. Box…

                        Grüße

                        Brati `

                        1 Reply Last reply Reply Quote 0
                        • P
                          Postmymind last edited by

                          Funktioniert leider nicht. Direkt über Telnet funktioniert die Gruppierung aber über die Kommandozeile des Scripts passiert leider nichts.

                          Hat sonst noch jemand weitere Ideen, wie man das lösen könnte oder ob man den Befehl über "Command" des Scripts anders senden muss?

                          1 Reply Last reply Reply Quote 0
                          • S
                            spielberger32 last edited by

                            Probier mal set_group?pid=-123456789,-223456789,-323456789 in die die Command-Option zu schreiben. Bei mir macht das folgendes Skript:

                            setState("javascript.0.heos.192_168_XXX_XXX.command", 'set_group?pid=-123456789,-223456789,-323456789');
                            

                            Für -123456789 etc natürlich jeweils die PID des Lautsprechers angeben. 😉 ACHTUNG: immer mit einem eventuellen MINUS DAVOR.

                            1 Reply Last reply Reply Quote 0
                            • P
                              Postmymind last edited by

                              Funktioniert! Danke! So kann ich meine Etagen-Gruppensteuerung realisieren.

                              1 Reply Last reply Reply Quote 0
                              • S
                                sashe last edited by

                                Hey,

                                das Script funktioniert echt Prima. Allerdings kriege ich keine Presets? Jemand ne Idee? Und ja, die Logindaten stimmen 😄

                                ! javascript.0 2018-12-09 14:27:30.435 error script.js.Automatisierungen.heos: [Heos] parseResponse: Unexpected token R in JSON at position 1 javascript.0 2018-12-09 14:27:30.434 error script.js.Automatisierungen.heos: [Heos] parseResponse: Unexpected end of JSON input javascript.0 2018-12-09 14:27:30.176 info script.js.Automatisierungen.heos: [Heos] command: load_presets !

                                Ich kann mit play_preset&preset=1 auch meine Favoriten abspielen, habe sie allerdings nicht in den Objekten in iobroker.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  spielberger32 last edited by

                                  Nach meinem letzten Stand geht es leider auch nur so … also über den Befehl per Skript

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    sashe last edited by

                                    Naja, wenn ich mir den Quelltext seines Favoriten-Widgets angucke, hat er die Presets als Objekte..

                                    "javascript.1.heos.presets.4.image_url"

                                    Das habe ich nicht

                                    1 Reply Last reply Reply Quote 0
                                    • Uhula
                                      Uhula last edited by

                                      Nach dem Scriptstart wird ein Connect zum Heos System aufgebaut, connected sich mindestens ein Player, wird in Zeil 301

                                      this.getMusicSources();

                                      aufgerufen, was zum Auslesen der Presets führen sollte. Erhält das Script vom Heos-Player eine Antwort, dann werden die Presets als Objekte im Script ab Zeile 430 erzeugt. Meine Vermutung ist, dass die Antwort des Heos-Players nicht so aussieht, wie im Script erwartet, Bsp ab Zeile 419.

                                      Dieses Laden der Presets kann man auch später, nach Scriptstart, manuell aufrufen: heos.getMusicSources();

                                      Bsp:

                                      // Heos Instanz erzeugen und verbinden   
                                      var heos = new Heos( );
                                      heos.connect();
                                      
                                      ...
                                      
                                      heos.getMusicSources();
                                      
                                      

                                      Noch ein Hinweis. Ich habe meine ioBroker Installation vom Pi3 auf einen Windows10 Rechner umziehen lassen. Da hier der node-ssdp Client wohl anders arbeitet, musste ich im Script beim connect() (ab Zeile 224) die Zeile "this.nodessdp_client.explicitSocketBind = true; " ergänzen:

                                      connect() { 
                                          try {
                                              this.log('connecting to HEOS ...');
                                              setState( this.statePath+"connected", false );
                                              const NodeSSDP = require('node-ssdp').Client;
                                      	    this.nodessdp_client = new NodeSSDP();
                                      	    this.nodessdp_client.explicitSocketBind = true;  // <--- notwendig für Windows10 !
                                                  ...    
                                      } 
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        sashe last edited by

                                        Danke. Mal schauen ob ich das fixen kann. Wenn nicht hardcode ich die Favoriten halt darein. Ansteuern kann ich sie ja und eigentlich ändern wir die auch nicht.

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          Brati last edited by

                                          Bei mir funktioniert der HEOS Login momentan auf keinem Gerät (AVR, HS1 Box, App, ioBroker…). Vielleicht ist auch gerade der Wurm drin. Am WE lief es noch.

                                          Grüße

                                          Brati

                                          1 Reply Last reply Reply Quote 0
                                          • B
                                            Brati last edited by

                                            @Brati:

                                            Bei mir funktioniert der HEOS Login momentan auf keinem Gerät (AVR, HS1 Box, App, ioBroker…). Vielleicht ist auch gerade der Wurm drin. Am WE lief es noch.

                                            Grüße

                                            Brati `

                                            Heute läuft wieder alles, werden jetzt vielleicht die Presets geladen?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            552
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript template
                                            45
                                            341
                                            52336
                                            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