NEWS
[Vorlage] Denon HEOS Script
-
@Meister-Mopper
Ich habe einen Denon-AVR-X1400H. Das ist eine 7.1 Anlage mit HEOS. Lässt sich über die App ganz normal steuern. -
Ich glaub ich weiß wo es hängt. Auf meinem Livesystem wird der AVR nicht gefunden. Mache ich das Ganze auf meinem Testsystem läuft es... Kann mir jemand sagen wie ich prüfen kann ob node-ssdp ordnungsgemäß tut?
MfG,
André -
@andre was kommt denn, wenn Du es mit npm installierst?
npm install node-ssdp
-
Hallo,
mich würde interessieren ob jemand eine Türklingel über KNX Taster mit dem Script umgesetzt hat. Ich habe Leider aktuell noch keinen vollen Erfolg. Muss aber auch dazu sagen, dass ich neu bin, in der IObroker Welt.
Was ich gemacht habe ist auf einen USB Stick ein Klingel mp3 file abgelegt. Der USB ist an meiner Soundbar. Ich kann sowohl über die Heos app als auch über das Script(mit Handeingabe der werte der Objekte) dieses mp3 abspielen.
Ich habe ein wahrscheinlich schlechtes blockly geschrieben das auf den KNX Taster getriggert ist und dann in jeder der Zeilen den Wert der Objekte das "richtige" rein schreibt. Dazu habe ich beim ersten mal das klingel mp3 über die HEOS app gestartet und geschaut was in die Zeilen geschrieben wird. Das habe ich dann übernommen. Soweit funktioniert das auch doch wenn ich dann zwischendurch mal einen Radio favorit höre und jemand die "klingel" taste drückt schreibt er zwar kurzzeitig die Werte die ich im blockly geschrieben habe in die Werte Zeilen jedoch werden die kuzerhand wieder überschrieben und der Radio läuft weiter.Ist mein Vorhaben mit dem Skript so möglich?
Gibt es eine Möglichkeiten Playlists gezielt abzuspielen wie das auch mit den favoriten funktioniert?
Gibt es eine Möglichkeit wie bei z.B. Echo Dot oder Sonos Lautsprecher erst ein klingel ton abzuspielen gefolgt mit einer Sprechansage "Es klingelt jemand an der Haustür"?
Würde mich freuen wenn ich Rückmeldung erhalten würde.
Vielen Dank!
Bedanke mich in dem Zug auch für die tolle Arbeit an den Script!
-
@Mars Ich hab die Erfahrung gemacht, dass das nich sehr komfortabel mit NAS/DLNA ist. Man muss erst über die CLI und Source ID 1024 die Track ID raussuchen. Bei mir war das leider nicht verlässlich, da sich die IDs ständig geändert haben. Das leichteste ist wahrscheinlich noch mit "play_stream&url=url_path" zu arbeiten.
Ich habe nächste Woche Urlaub und vielleicht habe ich ein wenig Zeit dafür übrig.
Entweder versuche ich den SONOS Adapter mit HEOS Technik nachzubauen, sodass man über den SayIt Adapter das komfortabel lösen könnte. Oder ich füge einfach nur ein tts State für jeden Player hinzu. -
Danke für deine schnelle Rückmeldung. Ok, wenn der Profi sagt es ist nicht verlässlich dann denke ich muss man einen anderen Weg wählen.
Das mit Kommando "play_stream&url=url_path" habe ich ehrlicherweise nicht verstanden. Kann man das in 2 Sätzen erklären? Bzw. wie finde ich den Pfad des audiofiles auf z.B. dem USB stick heraus?Eine Integration wie im SONOS Adapter wäre natürlich eine extrem komfortable Lösung und ich würde mich riesig freuen wenn du das umsetzen würdest.
Habe gerade das mit dem Befehl "play_stream&url=url_path" ausprobiert. Habe wieder zuerst über die App das Klingel file abgespielt und geschaut was er mir in die "aktuelle mid" rein schreibt. Diesen URL Pfad habe ich dann benutzt und das scheint erstmal zu funktionieren. Danke für den Hinweis. Ich hatte damit schon probiert mir war jedoch unklar wie ich das URL bekomme....
Jetzt wäre der nächste Schritt wenn gerade Musik läuft und es klingelt der Gong ertönt dann die Musik weiter geht. Das ist aber viell. in einem Skript abzubilden!? -
@Mars Um eine SayIt Datei über einen HEOS Player auszugeben würde der Command so aussehen: play_stream&url=http://IOBROKER:8082/state/sayit.0.tts.mp3
Ich habe wie beim SONOS einen neuen State tts und tts_playing hinzugefügt (heos.js). Den tts State gibt es sowohl global und für alle Player. Der State muss nach dem Schema VOLUME;URI gefüllt werden z.b.: 20;http://IOBROKER:8082/state/sayit.0.tts.mp3
Das Script ist noch nicht perfekt, da es von HEOS einige Einschränkungen gibt z.B. ist es schwierig zu erkennen, wann HEOS mit dem Abspielen der TTS Datei fertig ist. Aber nach dem Abspielen der SayIt Datei wird das Letzte Lied/Station für TuneIn, Amazon, AUX und NAS Streams wiederhergestellt.
-
@withstu Vielen Dank!
Ich habe jetzt probiert erst einen Gong abzuspielen und im Anschluss eine Sprachansage. Jedoch ist das vom Timing her nicht so einfach die Sprachausgabe kommt manchmal gar nicht "durch".
Hast du das bei dir so im Einsatz? Wenn ja wie?Der say.it adapter kann von sich aus auch einen Gong vor die Ansage setzen jedoch bekomme ich das nicht auf die Soundbar.
Viell. habe ich aber auch den say.it Adapter falsch konfiguriert.
-
Hallo,
ich danke vielmals für dieses Script. Habe es heute das erste mal hinzugefügt.
Ich laufe direkt auf einen Fehler beim Starten:21:34:42.068 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected end of JSON input {"heos": {"command": "player/get_now_playing_media", "result": "success", "message": "pid=1849007305"}, "payload": {"type": "song", "song": "Casimir von Oettingen & Lenia don't wanna go home 21:34:42.070 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected token K in JSON at position 1 Kater Blau 24.02.19", "album": "", "artist": "Casimir von Oettingen", "image_url": "https://i1.sndcdn.com/artworks-000495104037-6l4zar-t500x500.jpg", "album_id": "1", "mid": "581602872", "qid": 3, "sid": 9, "gid": 1849007305}, "options": []} 21:34:42.088 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected end of JSON input {"heos": {"command": "player/get_now_playing_media", "result": "success", "message": "pid=-1557307954"}, "payload": {"type": "song", "song": "Casimir von Oettingen & Lenia don't wanna go home 21:34:42.090 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected token K in JSON at position 1 Kater Blau 24.02.19", "album": "", "artist": "Casimir von Oettingen", "image_url": "https://i1.sndcdn.com/artworks-000495104037-6l4zar-t500x500.jpg", "album_id": "1", "mid": "581602872", "qid": 3, "sid": 9, "gid": 1849007305}, "options": []} 21:34:42.105 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected end of JSON input {"heos": {"command": "player/get_now_playing_media", "result": "success", "message": "pid=413862456"}, "payload": {"type": "song", "song": "Casimir von Oettingen & Lenia don't wanna go home 21:34:42.107 error javascript.0 (21822) script.js.Heos: [Heos] parseResponse: Unexpected token K in JSON at position 1 Kater Blau 24.02.19", "album": "", "artist": "Casimir von Oettingen", "image_url": "https://i1.sndcdn.com/artworks-000495104037-6l4zar-t500x500.jpg", "album_id": "1", "mid": "581602872", "qid": 3, "sid": 9, "gid": 1849007305}, "options": []}
Jetzt hab ich mir mal den Liedtitel (Soundcloud) angesehen. Der beinhaltet ein "|". Kann es sein, dass daher der Parsing-Error entsteht? Das "Lied" habe ich einfach in meinen Likes drin.
Hast du zufällig eine Idee wie man das fixen könnte?Schöne Grüße
-
@Stueckinger Oh das ist natürlich blöd. Mit der Pipe | wurden die Heos Nachrichten gesplittet Jetzt funktioniert es: heos.js
@Mars Ja der Gong kommt bei mir auch noch nicht mit durch. Hatte gedacht, dass sayit alles in eine mp3 packt...
-
@withstu super, dankeschön. Das hat funktioniert.
Man kann nur auf Favoriten - sprich Radiosender - zugreifen, oder? (Presets)
Meine Playlists tauchen leider nicht auf. -
Hallo zusammen,
ich musste heute ein Backup von heute morgen einspielen über backitup wegen einer Vis View.... Seit dem Zeitpunkt des neuen Backups wird mein Java Adapter beendet sobald ich das Heos Skript aktiviere. Das passiert mit meinem alten Skript was bisher lief aber auch wenn ich das neue von ende 2019 nehme, welches ich gerade getestet habe.Was mich total verwundert ist, das gleich der ganze Adapter 4.6.17 auf rot geht.
Node.js
v12.18.1
NPM
6.14.4Es kommt folgende Meldung
host.Homeserver 2020-06-19 17:46:59.368 info Restart adapter system.adapter.javascript.0 because enabled host.Homeserver 2020-06-19 17:46:59.367 error instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at processTicksAndRejections (internal/process/task_queues.js:84:21) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at emitErrorAndCloseNT (internal/streams/destroy.js:60:3) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at emitErrorNT (internal/streams/destroy.js:92:8) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at Socket.EventEmitter.emit (domain.js:482:12) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at Socket.emit (events.js:315:20) host.Homeserver 2020-06-19 17:46:59.367 error Caught by controller[0]: at Socket.<anonymous> (script.js.HIFI.Heos:629:18) host.Homeserver 2020-06-19 17:46:59.366 error Caught by controller[0]: at Heos.disconnect (script.js.HIFI.Heos:543:30) host.Homeserver 2020-06-19 17:46:59.364 error Caught by controller[0]: TypeError: this.nodessdp_client.destroy is not a function javascript.0 2020-06-19 17:46:59.308 info (15005) script.js.HIFI.Heos: registered 1 subscription and 0 schedules javascript.0 2020-06-19 17:46:59.265 info (15005) script.js.HIFI.Heos: [Heos] connecting to HEOS ... javascript.0 2020-06-19 17:46:59.257 info (15005) Start javascript script.js.HIFI.Heos
-
@Stueckinger Prinzipiell kann man auf alles zugreifen. Habe die Playlists und Sources inkl. Play Buttons hinzugefügt: heos.js
-
@withstu weißt du ob das mit den neuen Home 150 oder größer besser/anders ist?`
Ich habe nämlich noch eine alte HEOS HomeCinema Soundbar. Die Frage ist wenn ich jetzt eine neue Home 150 Box kaufe und dann diese anspreche und die alte soundbar in die gleiche Gruppe nehme, Verbesserung verspricht.Gibt es eine andere sinnvolle Lösung die HEOS Box als SmartHome Sprachrohr zu nutzen mit oder ohen sayit adapter?
-
@Mars @withstu Ich könnte mir vorstellen, dass der Grund warum der Gong nicht gespielt wird, die Pufferungszeit vom Heos ist. Wenn ich ein mp3 Abspiele werden immer erst 5 Sekunden lautlos gespielt, bevor ich was höre.
Versucht doch mal, vor den Gong z.B. leere 5 Sekunden in das mp3 zu packen.
Ich schätze, dass sich das bei neueren Boxen auch nicht anders verhält, weil das System den Puffer braucht, um mehrere Boxen synchron spielen zu können.
Nur ein Gedankenanstoß, vielleicht hilfts.
Viele Grüße Christian -
Hallo @withstu,
das Skript lief in der Version 2.0 vom Anfang Mai super, ist aber am Freitag nach dem Update der Heos-Boxen abgeschmiert und hat mir das Log gescheit mit Information gefüllt. Die Heos-App hat ein Update verlangt, ich habe dann alle Boxen gleich mit upgedated. Im Log ist folgendes passiert:Beim Update kam:
2020-06-25 19:01:55.020 - [33mwarn[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] HEOS closed the connection to 192.168.111.20 2020-06-25 19:01:55.022 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] reconnecting to HEOS ... 2020-06-25 19:01:55.023 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] disconnecting from HEOS ... 2020-06-25 19:01:55.025 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] [HEARTBEAT] Stop interval 2020-06-25 19:01:55.026 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [HeosPlayer 1645177266] stopping HEOS player with pid 1645177266 (192.168.111.22) 2020-06-25 19:01:55.044 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [HeosPlayer -140829128] stopping HEOS player with pid -140829128 (192.168.111.23) 2020-06-25 19:01:55.065 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [HeosPlayer -1359970574] stopping HEOS player with pid -1359970574 (192.168.111.20) 2020-06-25 19:01:55.085 - [31merror[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] Error: This socket has been ended by the other party 2020-06-25 19:01:55.086 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] reconnecting to HEOS ... 2020-06-25 19:01:55.086 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] disconnecting from HEOS ... 2020-06-25 19:01:55.087 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] [HEARTBEAT] Stop interval 2020-06-25 19:01:55.088 - [31merror[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] Error: This socket has been ended by the other party 2020-06-25 19:01:55.088 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] reconnecting to HEOS ... 2020-06-25 19:01:55.088 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] disconnecting from HEOS ... 2020-06-25 19:01:55.088 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] [HEARTBEAT] Stop interval
Innerhalb von 2 Sekunden wurden hier ca. 1500 mal diese 4 Zeilen geschrieben.
Dann kam diese Meldung, aber nur ca. 80 mal:2020-06-25 19:02:10.461 - [31merror[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] sendMsg: Maximum call stack size exceeded
Weiter gings ca. 1500x mit folgender Meldung:
2020-06-25 19:02:11.831 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] disconnected from HEOS
und
2020-06-25 19:02:24.383 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] searching for HEOS devices ...
und dann bis ichs gemerkt habe (ca. 400k Einträge in 2h):
2020-06-25 19:02:48.835 - [32minfo[39m: javascript.1 (1416) script.js.Steuerung.heos: [Heos] still searching for HEOS devices ...
Ich habe dann den iobroker neu gestartet. Wahrscheinlich hätte ein Restart des javascript Adapters auch gereicht? aber ich habe den broker eh angehalten wegen mehrfacher Updates.
Irgendwie hat wohl das Update der Boxen das Skript bzw. den Adapter verwirrt.
Wenn ich alle Boxen ausstecke, dann kommt zwar auch "searching", jedoch nur im 30s-Takt.Hier wäre es eventuell günstiger, den Ausgabe bzw. auch den Verbindungsversuch zu minimieren, dass der nicht im ms-Takt einen Reconnect versucht.
Auch scheint hier das Heartbeat Intervall (15s) nicht zu greifen? Oder wird das nur angewendet, wenn die Verbindung aufgebaut ist?
Viele Grüße
Christian -
Das Update führt wohl selbst auch zu Problemen...
Caschys Blog: Denon Heos: Probleme nach Firmware-Update.
http://feedproxy.google.com/~r/stadt-bremerhaven/dqXM/~3/tPazcUOP0Ys/Könnte also auch daran liegen.
Grüße Brati
-
Hey @chrisblu,
hatte gerade mal das Debugging eingeschaltet und dabei ein HEOS Player aktualisiert. Bei mir gab es keine Probleme. Das Script trennt die Verbindung, falls der Heartbeat fehlschlägt und reconnected, wenn der Player nach dem Update gefunden wurde.
Die reconnect Funktion wird immer aufgerufen, falls HEOS Fehler wirft oder die Verbindung fehlerhaft ist. Nach dem disconnect wird dann 5 Sekunden gewartet, um eine neue Verbindung aufzubauen. Leider gab es hier keine Beschränkung wie oft diese Funktion ausgeführt wird. Bei vielen Fehlern würden auch die reconnect Funktion sehr oft aufgerufen werden. Habe jetzt im Script versucht das wiederholte Ausführen der reconnect Funktion zu unterbinden. Ich hoffe, dass dadurch der Fehler Geschichte ist.
Der Heartbeat wird übrigens nur aktiviert, falls es eine Verbindung zu einem HEOS Player gibt. Bei einem reconnect/disconnect wird der Heartbeat ausgeschaltet.@Mars Da sich die Schnittstelle bei den neuen Playern nicht geändert hat, wird es da auch nicht besser funktionieren. Problem mit dem Gong und sayit ist, dass sayit den Gong und den Text hintereinander unter der selben URL veröffentlicht (Die Datei wird nach dem Gong mit der Text mp3 ersetzt). Dadurch müsste mein Script quasi zweimal im richtigen Moment play_stream ausführen und dafür die Längen der beiden mp3s kennen. Dafür habe ich aktuell noch keine Lösung. Der Sonos Adapter arbeitet da wohl mit einer Queue https://github.com/ioBroker/ioBroker.sonos/blob/master/lib/tts.js. Durch die Integration von Sonos im sayit Adapter wird zudem für den Gong und den Text jeweils ein Update auf dem tts state durchgeführt.
Script: heos.js
-
-
@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!