node-raumserver
node-raumserver copied to clipboard
Stationstasten aufrufen
Hallo,
Wäre es möglich das man über den raumserver auf die Stationstasten zugreifen könnte?
Zb auf der 1 ist eine Spotify Playlist gespeichert. Ich würde diese dann gerne über einen Befehl ansteuern und nicht immer die Taste drücken.
Mit freundlichen Grüßen
Ja. Man müsste mit dem Request "loadContainer" arbeiten und dort die container ID der jeweiligen Stationstaste mitgeben. Ich weiß den containerlink jetzt aber nicht auswendig. Dazu müsste man den content durchbrowsen z.B.: so https://github.com/ChriD/node-raumkernel/blob/master/sample_contentBrowser.js Vieleicht schaue ich am abend kurz nach.
Es gibt unter https://github.com/ChriD/node-raumserver/tree/master/test eine HTML/JS Testseite womit du das probieren kannst. Einfach den testFolder runterladen, die IP für die Base anpassen und im browser öffnen. Dort kannst du dann in der "loadContainer" sektion rumspielen.
Wow, werde ich nachher gleich schauen.. damit wäre dann das SpotifyConnect Problem auch behoben.
Hab kurz mal geschaut. Bei mir wäre das z.B. folgender container auf taste 2.. Bei dir ist es anders! Da musst du selber nachsehen Die uuid ist die ID des renderers welcher die Station buttons hat. Die "21488" weiß ich nicht so recht ob das immer gleich ist oder sich ändert
0/Renderers/uuid:41aa6673-745a-481b-b075-28876332af2e/StationButtons/21488
Hab jetzt die Test html offen und kann darüber auch die raumfelder steuern, aber wo findest du das mit den stationbuttons?
Nein da hast du mich falsch verstanden.
Die Station buttons sind nur "containerIds"
D.h also du kannst sie mit dem "loadContainer" Befehl in die Playlist des jeweiligen raumes laden.
In der Test HTML kannst du dafür den "load container" button ganz unten benutzen oder du rufst den "loadContainer" request auf. Und als ID bzw. value im Test html musst du dann z.B. folgendes eingeben
"0/Renderers/uuid:41aa6673-745a-481b-b075-28876332af2e/StationButtons/21488"
Nur das die uuid bei dir anders sein wird, das ist die UUID des gerätes, also der Box. Auch die Nummer hinter den Station buttons wird eventuell anders sein.
Kurz gesagt. Du musst also die container ID der jeweiligen Station Buttons rausfinden.
Super ich hab’s gefunden. Leider springt Spotify mal wieder aus der Reihe. Man kann Playlisten auf die Stationstasten speichern und abspielen, aber bei AVTransportURI steht einfach nur Spotify-Playlist://playback
Wenn ich andere Playlisten ( SoundCloud ect ) speichere steht es richtig da mit stationsbutton.
Sehr schade
Was möchtest du den eigentlich genau machen? Ich werd dir zwar vermutlich bei spotify nicht weiterhelfen können, aber wer weiß
Ich habe durch den raumserver und fhem alle Lautsprecher mit Alexa verbunden. Hab alle Lautsprecher in eine Gruppe gepackt und realisiere über den manuellstandby mein Multiroom. Wenn die Lautsprecher im manuellen Standby sind, werden sie bei Spotify vom Server gelöscht und verschwinden aus der App von Spotify. Schaltet man nun die Lautsprecher wieder über den leavestandby ein, erscheinen sie in der App von Spotify und können vom Handy aus bespielt werden. Das ganze funzt aber nur vom Handy aus. Das Spotify Connect der raumfelder funzt anders ( über Blobs ) da sie nur lokal gefunden werden von der App. Andere Spotify Clients zeigen die raumfelder dann nicht an und ich kann daher nicht über ein Script darauf zugreifen und sie über einen Sprachbefehl ansteuern.
Erst wenn sie 1x von der Handyapp bespielt wurden, könnte ich sie auch vom Spotify fhem Modul erreichen.
Mein Plan war halt sie über die Stationstaste ( Containers ) 1x starten und sie dann halt über die Alexa und das Spotifytransferplay zu bespielen.
Wenn die Lautsprecher im manuellen Standby sind, werden sie bei Spotify vom Server gelöscht und verschwinden aus der App von Spotify.
Dazu kann ich dir eine Lösung anbieten: https://github.com/gahujipo/node-raumserver-wiki/blob/master/Use/Standby.md
Das Laden einer Playlist wäre toll, dazu habe ich aber auch noch keine Lösung.
Die Lösung kenn ich ja. Ich hab’s bei mir halt nur so gemacht, das alle Geräte zusammen gruppiert sind ( höre wenn dann eh in allen Räumen das gleiche ). Durch den manuellen Standby kann ich halt zb in der Küche die Musik starten ( Alexa, mach die Musik an ), kann dann rüber ins Bad und kann hier entweder Alexa nutzen oder halt easy auf den Schalter drücken und dort spielt das gleiche. Durch den automatic Standby würden dann ja alle Boxen loslegen die in der Gruppe sind.
Sobald sie sich ja in der Spotify App angemeldet haben und 1x bespielt wurden, kann man Spotify ja ohne Probleme Einpflegen über Alexa und damit steuern, Playlisten abspielen lassen ect. Ist halt nur immer die erste Anmeldung..
Das ist ja interessant was ihr da macht mit spotify. Hört sich kompliziert an :-) Gibts von Spotify keine API?
Doch die gibt es, aber auch hier ist das Problem der lokalen Geräte. Echo dots die generell ständig angemeldet sind, werden gefunden. Lokale Geräte erst nachdem sie 1x angespielt wurden.
Spiele im Moment nen bissel mit spotconnect rum. Das kann die blobs solcher Geräte verarbeiten.
Durch den automatic Standby würden dann ja alle Boxen loslegen die in der Gruppe sind.
Du hast natürlich Recht. Habe bei mir nur 2 Zonen, von daher nehme ich im einen Raum manualStandby, weil ich diesen nur bei Bedarf zuschalte und bei anderen automaticStandby.
In deinem Fall ist das natürlich auch keine Lösung. Cool wäre wenn man dem Raumserver bspw. einen JSON-Array-String mit den gewünschten aktiven Zonen geben könnte.
Gibts von Spotify keine API?
Doch, das wäre wahrscheinlich sogar die Lösung.
Ohne es getestet zu haben sollten diese folgenden beiden Aufrufe reichen. Werde es mal testen:
- https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-transfer-a-users-playback
- https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-start-a-users-playback
Die beiden Aufrufe gehen nur wenn der Stream 1x angespielt wurde auf einer der Boxen, ansonsten kommt Not found
Diese api nutzt zb auch der skill Connect Control für die Alexa Geräte. Schaltet man 1 Raumfeld gerät ein über den Leavestandby und fragt dann „ frage Connect Control nach Geräten“ erscheint die Raumfeld nicht, obwohl sie in der App auf dem Telefon/MacBook angezeigt wird. Die App zeigt dir lokale Geräte an, die webapi leider nicht. Erst wenn ein Stream in Gang gesetzt wurde zeigt dir auch Connect Control das Gerät an.
Oh, jetzt verstehe ich endlich warum die Raumfeld nicht immer auf allen Geräten angezeigt wird. Das ist somit nur, wie du richtigerweise sagst, wenn das Gerät einmal verbunden war. Wie ist es, wenn die Geräte nie vom Strom genommen werden?
Sobald der manuelle Standby aktiviert wird, melden die sich ab. Hier hilft nur wie von dir erwähnt der automaticstandby.
Über spotcontrol könnte man die Geräte id mit dem entsprechendem blob senden und diese damit in Gang setzen ( theoretisch ). Im blob sind zb nutzername und Passwort von Spotify enthalten.
Was evtl auch noch funzt wäre wenn man Spotify auf dem raspi installiert und dann über ein Script die Ausgabe auf das jeweils device. Ich weiß aber nicht ob die Geräte auf dem Pi dann angezeigt werden. Müsste man mal testen 🤔
Was evtl auch noch funzt wäre wenn man Spotify auf dem raspi installiert und dann über ein Script die Ausgabe auf das jeweils device. Ich weiß aber nicht ob die Geräte auf dem Pi dann angezeigt werden. Müsste man mal testen
Über die API der App? oder wie sprichst du die theoretische App auf dem Raspberry vom Script aus an?
Über spotcontrol könnte man die Geräte id mit dem entsprechendem blob senden und diese damit in Gang setzen ( theoretisch ).
Wäre das das hier? https://github.com/badfortrains/spotcontrol
Genau über die eigentlich api der App.
Evtl das hier https://github.com/Fornoth/spotify-connect-web
Genau das ist das spotcontrol was ich meine
Hab evtl noch eine andere Idee..
Ein raumfelder sollte halt min im automaticstandby laufen. Damit der aber dann nicht auch losspielt, wenn man es nicht will,wird dieser auf Mute gesetzt. Und zb bei einem AN Befehl setzt man hier die Lautstärke hoch. Somit hat man einen Lautsprecher im System der das Gerät angemeldet lässt und damit kann man auch wunderbar Spotify nutzen über externe Schalter,Alexa ect.
Daran hatte ich auch bereits gedacht, aber das ist ökonomisch gesehen wirklich nur ein Workaround und keine saubere Lösung.
Naja was ist heutzutage schon ökonomisch. Werd mir wohl noch die alten stereo S holen und die haben den Standbybereich so oder so nicht 🤔
Über spotcontrol könnte man die Geräte id mit dem entsprechendem blob senden und diese damit in Gang setzen ( theoretisch ).
https://github.com/badfortrains/spotcontrol/tree/master/examples/micro-controller#mdns-discovery
Damit sollte es zumindest laut Doku gehen. Werde das testen.
Ich bin durch ein ähnliches Problem auf eure Diskussion gestoßen. Problem: Auswahl des LineIn, da die Teufel Stereo L an meinem TV angeschlossen sind
Lösung 1 (http://www.hifi-forum.de/viewthread-212-1272-7.html):
LineIn als Playlist in der Raumfeld-App hinterlegen und mit folgendem Request aufrufen:
raumserver/controller/loadContainer?id=Wohnzimmer&value=LineIn
(id=[Raum] und value=[Name_der_Playlist])
Problem bei dieser Lösung ist jedoch, dass Teufel immer bei einem Streaming des LineIn eine Verzögerung des Tons verursacht (Lippen und Ton unsynchron). Das lässt sich bspw. mit SPDIF auf Chinch Adaptern (DAC Konvertern) und einer Audioverzögerung (am TV) in den Griff bekommen, kostet aber wieder ~ 20 €.
Lösung 2:
LineIn ganz einfach als Container ansteuern, da dieser immer fix und per Haus aus auf einer Taste [ ] (mit diesem Symbol) hinterlegt ist. Hierzu ruft man den folgenden Request auf:
raumserver/controller/loadContainer?id=Wohnzimmer&value=LineIn
(id=[Raum] und value=[Id_des_Controllers])
Siehe da - die Verzögerung zwischen Lippen und Ton ist nun weg. Aufwand: 5 Sekunden.
Soweit ich gesehen habe, ist die ID immer gleich bei dieser Taste und von Teufel so festgelegt. Ich hoffe, dass ich mit der Erklärung jemandem helfen kann, der ein ähnliches Problem hat.
Vielen Dank für eure befruchtende Diskussion. Grüße, Erik
Hallo und erstmal vielen Dank für das Projekt. Ich schreibe gerade an einer kleinen Teufel / Homekit-Integration, und für mich hat sich die gleiche Frage ergeben: wie kann man die Stationstasten über die Raumfeld API ansprechen? Hat das inzwischen jemand lösen können? Die URL-"Belegung" der Tasten lässt sich über getStationButtonAssignment() finden (etwa: "0/Renderers/uuid:8a7a9a5c-2dbe-4f14-ac66-c97928b412d4/StationButtons/20"). Allerdings finde ich keinen Weg, diese URL abzuspielen. LoadContainer führt nur zur "Error: For this track, no music resource is available."