NEWS
[Vorlage] Denon HEOS Script
-
@withstu Ja mit Gong und anschließender Ansage bekomme ich auch nicht vernünftig zum laufen.
Generell ist die 5 sec. Zeitverzögerung für eine Haustürklingel nicht ganz optimal. Manchmal geht es auch deutlich länger, wenn in meinem Fall die Soundbar im "sleep" ist.
Ich habe vor meinen Gong jetzt 5 sec. Leerlauf eingebaut. Der Gong kommt so immer sauber durch aber halt manchmal recht spät.
Zudem muss man wissen wie lange der Gong in etwa läuft um dann wieder ein "Stop" an den Heos Lautsprecher zu schicken sonst läuft dieser in Endlosschleife!
Wenn jemand hier Tips hat darf er diese gerne äußern!
Danke! -
@Mars Eine Idee wäre den Gong in eine HEOS Playlist zu packen und über die neuen Playlist States (0_userdata.0.heos.playlists.ID.play) das Abspielen zu triggern. Dauert auch bei mehreren Playern nicht länger als 2 Sekunden. Vorher sollte Shuffle noch deaktiviert werden (player/set_play_mode&shuffle=off) bzw. Repeat (player/set_play_mode&repeat=off). Wenn die Playlist einmal abgespielt wurde, stoppen die Player die Wiedergabe. Bei dieser Variante ist natürlich die gespielte Musik verloren und müsste wieder gestartet werden. Leider speichert HEOS in den Playlists kein Url Stream und damit wäre TTS aus dem Rennen.
-
@Mars Mir kommt da als Quelle noch ein mp3 auf einem USB-Stick direkt in der Box in den Sinn. Könnte schneller gehen, aber ob man das ansteuern kann? Ein Versuch wärs Wert. Das Problem mit der unterbrochenen/ abgebrochenen Musik wird da aber wohl auch auftreten. Vielleicht könnte man den aktuellen Status durch ein Skript vor dem Auslösen auslesen und dann wieder weiterspielen?
Viele Grüße Christian -
@withstu das hatte ich in einer Playlist gemacht, jedoch wusste ich noch nicht wie man eine Playlist abspielt. Das ist ja aber jetzt mit einem Datenpunkt sehr einfach geworden. Also der Klingel Gong wird so zuverlässig eingespielt. Habe noch 2 sec. Leerlauf vor den Gong gepackt, dann kommt dieser sauber durch.
Mein Ziel wäre es eigtl. Alexa zu ersetzen als Ausgabe Lautsprecher da es hier über die Cloud geht.
Für mich als Laie ist unklar was jetzt bei dem sehr umfangreichen Script noch fehlt, dass es wie bei einer Sonos Box mit dem "text to speech" funktioniert?
@chrisblu die Gong MP3 ist auf einem USB direkt an der Box dran. Das mit dem auslesen und wieder einspielen des Status war auch mal mein Gedanke hatte ich aber noch nicht probiert. -
Hi,
möglicherweise kam die Frage schon, aber kann man rausbekommen, ob auf einen der Quick-Select buttons gedrückt worden ist?Mein Use-Case: Wenn ich im Bad die (1) drücke, dann soll das gleiche gespielt werden, was gerade im Wohnzimmer läuft.
Grüße,
klaus -
@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
-
@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.
-
@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 -
@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
-
@withstu Der Fehler tritt mit deinem Script nicht mehr auf.
Kannst Du den Github link hier posten?Gruß,
klaus -
@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"
-
@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
-
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!
-
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:
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?
-
Bekomme das Script nicht importieret. Kann jemand einen Tipp geben wie ich es am besten installiere bzw. importiere? Danke Euch.
-
@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.
-
@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!!!! -
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?
-
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?
-
@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.