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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Denon HEOS Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      withstu @Mars last edited by

      @Mars Das Problem ist hier die HEOS API. Es gibt nur eine play_stream Funktion, die einen Stream sofort abgespielt. Für unsere TTS Funktion bräuchten wir aber eher eine Funktion, die den Stream lediglich zur Queue hinzufügt, aber nicht abspielt. So ist es quasi unmöglich mehrere Streams (Gong + TTS) hintereinander abzuspielen. Zudem ist der Sonos Adapter in den SayIt Adapter integriert und hat so die Dauer der Audiofiles zur Verfügung.

      @Klaus-Baumecker Es gibt kein Event dafür, um das zu erkennen. Workaround könnte sein, dass du hinter dem Quickselect ein stilles Lied mit einem bestimmten Lied Titel hinterlegst und dann ein Script den Liedtitel überwachen lässt.

      Btw. mir ist aufgefallen, dass die States der Gruppen nicht richtig funktioniert haben. Deswegen gibts ne neue Version: heos.js

      K 1 Reply Last reply Reply Quote 0
      • K
        Klaus Baumecker @withstu last edited by Klaus Baumecker

        @withstu Das mit dem stillen Lied hatte ich mir auch schon überlegt. Bzw einen URL, der direkt das Web-API vom iobroker anspricht. Ich werde das demnächst mal probieren und berichte dann.

        Ich hatte übrigens auch einen Fehler im Script entdeckt: Beim scannen nach HEOS devices wird bei mir ein ungültiges device gefunden. Daraufhin bricht die Suche ab. Ich checke mal das neue von Dir bei Gelegenheit. Vielleicht sollte man es auch nach Github schieben. Dann kann man besser mir issues und PRs arbeiten.

        D 1 Reply Last reply Reply Quote 0
        • D
          DobbyMuh @Klaus Baumecker last edited by DobbyMuh

          @withstu Vielen Dank für das coole Skript.

          Aktuell habe ich ein Problem mit dem Skript in meiner Umgebung.

          Umgebung: Mein ioBroker läuft in einem Docker auf einem Synology-NAS. Das Netzwerk ist im Bridged-Mode mit dem NAS (für einen Teil der Adapter leider erforderlich). Im Bridged-Mode läuft das Denon Skript nicht. Es kommt die Meldung "[Heos] searching for HEOS devices ...", ohne das etwas gefunden wird.

          Fehleranalyse: Habe das Skript in einem separaten MACVLAN Ausprobiert. Damit hat das Skript fehlerfrei funktioniert. Es wurden sofort die beiden Heos-Lautsprecher und der AVR gefunden. Meine Vermutung ist jetzt, dass für das Skript eine Portweiterleitung in der Konfiguration des Docker-Containers fehlt.

          Frage: Welche Ports werden für den Betrieb des Skriptes benötigt? Die Ports 1255 und 53871 habe ich bereits eingerichtet. Fehlen da noch weitere?

          Wäre super, wenn mir jemand weiterhelfen kann.
          Lieben Gruß, DobbyMuh

          W 1 Reply Last reply Reply Quote 0
          • W
            withstu @DobbyMuh last edited by

            @DobbyMuh Ich glaub das Beste ist, wenn du dir ein kleines node Script bastelst und die Device Suche nachstellst. Dazu brauchst du folgendes Paket https://www.npmjs.com/package/node-ssdp und das Target "urn:schemas-denon-com:device:ACT-Denon:1". Die Ports passen. Eventuell hilft auch Wireshark weiter...

            @Klaus-Baumecker Ich arbeite gerade an einen HEOS Adapter auf GitHub. Falls du den Fehler noch eingrenzen kannst wäre das super.

            @Uhula Ich hab dich auf GitHub zum privaten Heos Adapter Repo hinzugefügt. Kannst ja mal schauen, was du noch dazu beitragen kannst. Mir gefällt aktuell noch nicht, dass ich deine schöne Player Klasse auflösen musste. Habe das Script erstmal nach dem Motto "Make it work" in einen Adapter transformiert 🙂

            K 1 Reply Last reply Reply Quote 1
            • K
              Klaus Baumecker @withstu last edited by

              @withstu Der Fehler tritt mit deinem Script nicht mehr auf.
              Kannst Du den Github link hier posten?

              Gruß,
              klaus

              W 2 Replies Last reply Reply Quote 0
              • W
                withstu @Klaus Baumecker last edited by

                @Klaus-Baumecker Ich hab dir ein Invite für das GitHub Projekt gesendet. Das Projekt ist noch privat, da ich den Adapter noch ein paar Wochen testen möchte, bisher läuft er stabil. Zudem muss ich noch "aufräumen" 😂

                1 Reply Last reply Reply Quote 0
                • W
                  withstu @Klaus Baumecker last edited by

                  @Klaus-Baumecker Habe gerade ein wenig aufgeräumt. Schau mal, ob der Adapter bei dir funktioniert. Sonst würde ich demnächst dann mal eine Version veröffentlichen: https://github.com/withstu/ioBroker.heos

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

                    Verwende des Script aus dem Startpost von Uhula. Seit gestern läuft mein Log mit folgender Meldung voll.

                    2020-09-10 10:26:57.471 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                    {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=43000&duration=0"}}
                    2020-09-10 10:27:02.497 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                    {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=48000&duration=0"}}
                    2020-09-10 10:27:07.477 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                    {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=53000&duration=0"}}
                    2020-09-10 10:27:12.473 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                    {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=58000&duration=0"}}
                    

                    Script bereits mehrmals neu gestartet. Alle Objekte javascirpt.0.heos gelöscht und auch den Javascript-Adapter neu gestartet. Ohne Erfolg!

                    Irgendwelche Tipps? Danke!

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

                      Ich hab nochmal getestet... Wenn ich das Script neu starte und bekomme ich folgendes Log:

                      2020-09-11 21:03:57.707 - info: javascript.0 (4043) Start javascript script.js.common.Denon.Heos
                      2020-09-11 21:03:57.749 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] connecting to HEOS ...
                      2020-09-11 21:03:57.913 - info: javascript.0 (4043) script.js.common.Denon.Heos: registered 1 subscription and 0 schedules
                      2020-09-11 21:03:59.008 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] connecting to 192.168.178.3 ...
                      2020-09-11 21:03:59.012 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] connected to HEOS
                      2020-09-11 21:03:59.012 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] connected to 192.168.178.3
                      2020-09-11 21:03:59.019 - error: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] startPlayers: Cannot read property 'replace' of undefined
                      2020-09-11 21:03:59.021 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] signed in: success
                      2020-09-11 21:03:59.679 - info: javascript.0 (4043) script.js.common.Denon.Heos: [Heos] signed in: success
                      

                      Und diese Objekte werden angelegt:
                      3bf61f4a-7421-49c8-8cf0-3e27a9c872a1-image.png

                      Das Skript lief immer ohne Probleme! Kein das Downgrade des Javascript-Adapter von 4.7.3 auf 4.6.26 damit etwas zu tun haben?

                      Sobald ich auf meinem Denon Spotify laufen lasse, läuft mein Log mit der o.g. Meldung voll

                      2020-09-10 10:26:57.471 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                      {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=43000&duration=0"}}
                      2020-09-10 10:27:02.497 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                      {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=48000&duration=0"}}
                      2020-09-10 10:27:07.477 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                      {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=53000&duration=0"}}
                      2020-09-10 10:27:12.473 - error: javascript.0 (27991) script.js.common.Denon.Heos: [Heos] parseResponse: Cannot read property 'pid' of undefined
                      {"heos": {"command": "event/player_now_playing_progress", "message": "pid=1167970203&cur_pos=58000&duration=0"}}
                      
                      

                      Kann mir keiner weiterhelfen?

                      W 1 Reply Last reply Reply Quote 0
                      • C
                        CrazyFloyd last edited by

                        Bekomme das Script nicht importieret. Kann jemand einen Tipp geben wie ich es am besten installiere bzw. importiere? Danke Euch.

                        1 Reply Last reply Reply Quote 0
                        • W
                          withstu @BobBruni last edited by

                          @BobBruni Es sieht so aus, dass die message nicht korrekt geparsed werden kann (Cannot read property 'pid'). Versuche mal eine neuere Version des Scripts. Seit dem Script im ersten Post hat sich viel getan.

                          @CrazyFloyd Das Script musst du in den JS-Adapter kopieren, Anmeldedaten eintragen und starten. Den Adapter musst du einfach über die "Katze" unter Adapter (Installieren aus eigener URL) installieren. Dazu ist lediglich die URL zum GitHub Repo nötig.

                          B 1 Reply Last reply Reply Quote 0
                          • B
                            BobBruni @withstu last edited by

                            @withstu said in [Vorlage] Denon HEOS Script:

                            @BobBruni Es sieht so aus, dass die message nicht korrekt geparsed werden kann (Cannot read property 'pid'). Versuche mal eine neuere Version des Scripts. Seit dem Script im ersten Post hat sich viel getan.

                            Nachdem ich geheckt habe, dass die states nun in 0_userdata.0 liegen, läuft wieder alles. Vielen Dank!
                            Ich freue mich, wenn es hierzu bald einen neuen Adapter gibt!!!!

                            W 1 Reply Last reply Reply Quote 0
                            • W
                              withstu @BobBruni last edited by

                              Der Adapter lief jetzt bei mir mehrere Wochen stabil. Deswegen habe ich meinen ersten Adapter veröffentlicht 🙂 Allerdings weiß ich nicht, wie dieser ins Repository aufgenommen werden kann: https://github.com/withstu/ioBroker.heos

                              @Bluefox Hast du eine Idee, wer den Adapter im Repo hinzufügen kann?

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

                                Ich habe einen Denon AVR-X 4400H und habe mir jetzt den Adapter installiert.
                                Das klappt auch soweit richtig gut.
                                Der Denon greift ja nicht mehr direkt auf Netztwerkfreigaben zu, sondern nur noch über HEOS.
                                Ich habe mir nun die 167 Tread durchgelesen aber kann nicht finden, ob ich über das scribt auch durch meine
                                Musikdatenbank auf den NAS navigieren kann...

                                Bietet der Adapter die möglichkeit bzw gibt das die HEOS "API" überhaupt her?

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

                                  @sveni_lee Das bietet das HEOS API nicht an, sondern nur das Abspielen. Eine Navigation darüber wäre wohl auch zu langsam, und für dich im Design zu aufwendig in der Umsetzung, da du selbst die Ergebnislisten (Ordner, Dateien) darstellen müsstest und über Ereignisse die Ordner wechseln.

                                  S 1 Reply Last reply Reply Quote 0
                                  • S
                                    sveni_lee @Uhula last edited by

                                    @Uhula

                                    okay, verstehe...
                                    in der HEOS App auf dem Handy kann ich ja durch die Ordnerstrucktur browsen. das bedeutet ja es gibt durchaus "Befehle" die das ermöglichen. wenn Ich nun die Kommunikation in meinem Netzwerk mitlogge (wireshark), müsste man es ja rausbekommen.
                                    Ich hatte sowas mal mit meinem alten Onkyo gemacht...

                                    Uhula W 3 Replies Last reply Reply Quote 0
                                    • Uhula
                                      Uhula @sveni_lee last edited by

                                      @sveni_lee Mag sein, wenn denn das API das her gibt. Trotzdem bleibt immer noch der Aufwand dieses dann zu visualisieren. Manchmal sind die nativen Apps doch besser geeignet als nachgebaute Eigenentwürfe. Ich nutze das HEOS Script nur für die grundsätzliche Steuerung (für meine Frau). NDR2, Playlist Johannes Oerding, ... Lautstärke. Alles andere findet dann in der HEOS App bzw. in der Spotify App statt.

                                      1 Reply Last reply Reply Quote 0
                                      • W
                                        withstu @sveni_lee last edited by

                                        @sveni_lee Alles was du über die App machen kannst, ist auch über die HEOS API möglich (http://rn.dmglobal.com/euheos/HEOS_CLI_ProtocolSpecification.pdf). Also auch die Navigation. Wie Uhula schon sagt ist die Darstellung das Problem. Die Commands könntest du jedoch schicken. Sie werden nur nicht vom Adapter ausgewertet. Wenn jemand eine Idee hat, wie man das sinnvoll umsetzen kann, ich bin offen für Anregungen.

                                        Beispielsweise könntest du im Terminal folgendes nacheinander eingeben, um dir die Ergebnisse der API anzuschauen:

                                        telnet flur 1255
                                        heos://system/prettify_json_response?enable=on
                                        heos://browse/browse?sid=1024
                                        # Entsprechend die sid raussuchen immer weiter navigieren, bis man irgendwann eine mid hat und ein playable flag
                                        heos://browse/browse?sid=851081134&cid=1$FF0
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • W
                                          withstu @sveni_lee last edited by

                                          @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.

                                          A H S 4 Replies Last reply Reply Quote 0
                                          • A
                                            ak1 @withstu last edited by

                                            Hmm, nichts geht mehr.
                                            Seit langer Zeit habe ich das HEOS Skript von @Uhula im Einsatz. Derzeit die Version vom 13.03.2020. Aus meiner Visualisierung rufe ich lediglich drei Presets auf, steuere die Lautstärke, Stopp und Start, nicht viel mehr.

                                            Seit heute morgen reagiert mein Denon allerdings nicht mehr darauf. Ich sehe im Log, dass das Skript den den Denon findet und sich verbindet. in Meinen Blockly-Skripten, genutzt durch meine Visualisierung, habe ich Debug-Einträge und sehe auch, dass die Befehle zum Abspielen des Presets rausgehen.

                                            Im Datenpunkt last_error kommt dann allerdings ein

                                            result=fail, Command not recognized
                                            

                                            zurück.

                                            Befehl ist z.B.

                                            play_preset&preset=1|set_volume&level=40
                                            

                                            Dann habe ich mal den neuen Adapter von @withstu installiert und getestet. Auch hier das gleiche Phänomen. Der Adapter findet den Denon, legt Datenpunkte mit den Presets an, alles sieht gut aus.

                                            Wenn ich dann allerdings ein Kommando abschicke, scheitert dies:

                                            heos.0	2020-09-27 12:01:19.527	warn	(1235) result=fail,text=Command not recognized,command=preset
                                            heos.0	2020-09-27 12:00:56.006	info	(1235) connected to HEOS (192.168.2.102)
                                            heos.0	2020-09-27 12:00:56.005	info	(1235) connecting to HEOS (192.168.2.102) ...
                                            heos.0	2020-09-27 12:00:54.006	info	(1235) searching for HEOS devices ...
                                            heos.0	2020-09-27 12:00:53.975	info	(1235) starting. Version 1.1.2 in /opt/iobroker/node_modules/iobroker.heos, node: v12.16.3, js-controller: 3.1.6
                                            

                                            In dem Fall war das Kommando

                                            play_preset&preset=3
                                            

                                            Hat jemand eine Idee? Mit der HEOS App geht die Auswahl der Presets wie bisher problemlos.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            742
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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