Closed Zefau closed 3 years ago
@funky4t
First step could be the integration of a very simple Player visualisation with play/pause/skip options and maybe a cover section. I'm thinking of a simple interface for controlling services like Sonos, TuneIn, Amazon Music etc... Datapoints are coming manually from different adapters and have to be assigned by the user.
2nd step or even a Pro-Feature could be a more detailed player with library search or playlist function using datastructure of common brands as Sonos, Bose, Yamaha or so... I guess Step 2 is quite hard in programming compared to Step 1.
added with 2.2.0-beta.1
.
Missing:
Bitte noch die Deviceauswahl von Spotity mit aufnehmen (Sprich an welchem Gerät es abgespielt werden soll, oder fällt das bei dir mit unter Multiplay Support?) spotify-premium.0.devices
Wird es auch eine Sonos Unterstützung geben?
Für Sonos brauche ich einen Screenshot der Adapter Struktur
Reicht dir das so?
Jo
added with
2.2.0-beta.1
.Missing:
- [x] Adjusting volume
- [x] Multiplayer support
sehr cool! aber wo genau ist die PlayerID von Spotify/Alexa zu finden?
Spotify braucht keine. Steht auch in der Info. Dort wird immer der letzte genommen (spotify-premium.0.player
).
Alexa2 die ID unter alexa2.0.Echo-Devices
https://forum.iobroker.net/post/555662
im Media Player Widget passt die „Zeit“ nicht. Ragt über das Widget hinaus. Siehe Screenshot
added multiplayer and player selection support with v2.2.0-beta.12
.
Play selection ist ohne Funktion, vermutlich gehst du nicht auf die useForPlayback OID
spotify-premium.0.devices.xxxxxxx.useForPlayback
Doch, es wird useForPlayback
angesprochen:
{
"_namespace": "",
// information
"artist": ".player.artistName",
"album": ".player.album",
"track": ".player.trackName",
"year": null,
"cover": ".player.albumImageUrl",
// actions
"play": {
"state": ".player.isPlaying", // isPlaying
"action": ".devices.{PLAYER}.useForPlayback"
},
"pause": {
"action": ".player.pause"
},
"resume": {
"action": ".play"
},
"stop": {
"action": null
},
"previous": {
"action": ".player.skipMinus"
},
"next": {
"action": ".player.skipPlus"
},
// attributes
"progress": {
"state": ".player.progress",
"convert": convertToSeconds,
"action": ".player.progressMs",
"setter": seconds => {
return seconds * 1000
}
},
"duration": {
"state": ".player.duration",
"convert": convertToSeconds
},
// options
"repeat": {
"state": ".player.repeat",
"action": ".player.repeat",
"display": {
"off": "off",
"item": "track",
"all": "context"
}
},
"shuffle": {
"state": ".player.shuffle",
"action": ".player.shuffle",
"display": {
"off": "off",
"on": "on"
}
},
"volume": {
"state": ".player.device.volume",
"action": ".player.device.volume",
"display": {
"off": 0
}
}
}
Funktioniert auch bei mir nicht zuverlässig. Manchmal geht es und manchmal nicht. Liegt vermutlich an dem Aktuallisierungsinterval. Hab meine Werte jetzt etwas heruntergesetzt mal schauen ob es besser läuft.
Update:
bekomme aber folgenden Fehler wenn ich eine Aktion trigger:
`
spotify-premium.0 | 2021-01-13 15:14:36.247 | error | (1056) erron in request: 403 |
---|---|---|---|
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at processTicksAndRejections (internal/process/task_queues.js:79:11) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at flush (/opt/iobroker/node_modules/asap/raw.js:50:29) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at /opt/iobroker/node_modules/promise/lib/core.js:123:15 |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at tryCallOne (/opt/iobroker/node_modules/promise/lib/core.js:37:12) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at /opt/iobroker/node_modules/iobroker.spotify-premium/main.js:262:38 |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | (1056) Error |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at processImmediate (internal/timers.js:461:21) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5388:34) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at Adapter.emit (events.js:314:20) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at Adapter.setExternal (/opt/iobroker/node_modules/iobroker.spotify-premium/lib/cache.js:258:2) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at trigger (/opt/iobroker/node_modules/iobroker.spotify-premium/lib/cache.js:219:11) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at Array.forEach ( |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at /opt/iobroker/node_modules/iobroker.spotify-premium/lib/cache.js:225:19 |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at Object.listenOnSkipPlus [as func] (/opt/iobroker/node_modules/iobroker.spotify-premium/main.js:1712:5) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | at sendRequest (/opt/iobroker/node_modules/iobroker.spotify-premium/main.js:154:21) |
spotify-premium.0 | 2021-01-13 15:14:36.246 | warn | (1056) Error |
spotify-premium.0 | 2021-01-13 15:14:36.245 | warn | (1056) http request error not handled, please debug |
`
Ich hatte nachgefragt ob man das Widget auch den musiccast Adapter (GitHub Link) unterstützen könnte. Wie gewünscht (Foren Post), hier die gemappte Aufstellung: Allgemein besitzt der musiccast Adapter für alle Geräte ein Verzeichnis mit den Unterverzeichnissen main und netsub die interessant sind. Bei einigen Mappings hab ich als Kommentar noch offene Fragen eingefügt.
{
"_namespace": "",
// information
"artist": ".netusb.artist",
"album": ".netusb.album",
"track": ".netusb.track",
"year": null, // nicht verfügbar
"cover": ".netusb.albumart_url",
// actions
"play": {
"state": null, // mir ist nicht ganz klar was hier genau gemeint ist
"action": null // hier ebenfalls
},
"pause": {
"action": ".netusb.playPause"
},
"resume": {
"action": ".netsub.playPause"
},
"stop": {
"action": ".netsub.stop"
},
"previous": {
"action": ".netsub.prev"
},
"next": {
"action": ".netsub.next"
},
// attributes
// hier muss ich nochmal schauen da die Informationen nicht bei jeder Quelle verfügbar sind und in einem
// solchen Fall wohl negative default Werte annehmen.
"progress": {
"state": null,
"convert": null,
"action": null,
"setter": null
},
"duration": {
"state": ".player.duration",
"convert": convertToSeconds
},
// options
"repeat": {
"state": ".netsub.repeat_stat",
"action": ".netsub.repeat",
// "netsub.repeat" hat die role Button, ich weiß nicht ob der display
// Abschnitt überhaupt nötig ist
"display": {
"off": "off",
"on": "on"
}
},
"shuffle": {
"state": ".netsub.shuffle_stat",
"action": ".netsub.shuffle",
// hier gilt das selbe wie bei repeat
"display": {
"off": "off",
"on": "on"
}
},
"volume": {
"state": ".main.volume",
"action": ".main.volume",
"display": {
"off": 0
}
}
}
Falls noch offene Fragen sind steh ich gern zur Verfügung :-)
Kannst du mir noch ein Screenshot der Objekt-Struktur des Adapters posten, damit ich ein Gefühl für den Aufbau bekomme? Danke dir.
Gern
main:
netsub:
@zucki vielen Dank für deinen Support in dieser Sache.
Ich habe musiccast mit v2.2.0-beta.15
hinzugefügt. Schau dir das mal an. Leider kann ich es nicht vortesten, da ich den Adapter nicht habe.
Eine Fortschrittsanzeige wirst du nicht haben, weil ich jetzt keinen Datenpunkt für den Fortschritt / Abspielzeit sehe? Nur die Gesamtlänge (total_time
).
@Zefau Ich hab mal angefangen zu testen.
Zum Thema Fortschrittsanzeige. Es gibt unter netusb den Wert _playtime. Allerdings gibt der zumindest bei Net-Radio und Spotify nicht den Trackfortschritt sondern die gesamte Zeit seit der letzten Pause an. Außerdem ist das Aktualisierungsinterval des musiccast Adapters nicht allzu hoch. Ich denke es macht wenig Sinn den Wert zu nutzen. Ich muss es mal noch mit lokal gespeicherter Musik probieren. _totaltime bleibt bei mir immer 0. Also auch der Wert scheint nicht verwendbar zu sein.
Ansonsten tut sich leider gar nichts.
Die Datenpunkte werden aber in dem Versuch befüllt.
Im Adapter kann es ja mehrere Geräte geben. Wie wird das denn im Widget dargestellt? Und beim anlegen des Mappings war mir ja nicht ganz klar was der Punkt "play" in den actions tut. Vielleicht ist da noch was falsch? Es gibt übrigens den Datenpunkt .netusb.playback für jedes Gerät. Der wechselt zwischen Stop/Play/Pause je nach Status. Wird das Gerät ausgeschaltet wird auch Stop in den Datenpunkt geschrieben.
Wäre es auch möglich eine Album und Track Auswahl mit einzubauen?
Hi Zefau, vorab vielen Dank für diesen tollen Adapter. Ich bewundere deine Arbeit. ;-)
Ich hätte zwei Anregungen zur Integration von Echo Devices über den Alexa2-Adapter.
Es wäre genial, wenn man die im Dropdown anzuzeigenden Geräte eingrenzen könnte. Ich würde z. B. gerne nur meine Lautsprecher-Gruppen sehen, die einzelnen Echos sind mir wurscht.
@duczz Wüsste nicht wie. Eine Trackauswahl gibt es im Spotify Adapter so nicht, oder?
@SaschaWeiher nehme ich für v2.3 auf die Agenda
@Zefau Über die OID "spotify-premium.0.html.tracks" lässt es sich via VIS steuern
@JayRHa hast du den Fehler noch? Welche Version von Spotify hast du? Ich bekomme den Fehler nicht, bin aber auf dem stable repo.
@duczz über spotify-premium.0.html.tracks
lässt sich das nicht steuern. Der OID steht auf write
false
?
@Zefau Richtig steht auf false Eine kleine Übersicht der Tracks würde ja theoretisch reichen, dann kann man mit den weiter tasten durchklicken sieht aber zumindest ein paar kommende lieder
Edit: In der OID gibts pro Track den Punkte "onclick="vis.setValue" mit dem kannst du es evtl. schalten?
@duczz ich bekomm den Datenpunkt gar nicht befüllt, wenn ich etwas abspiele. Muss ich da was machen?
@duczz ich hab's mal für v2.3 aufgenommen: https://github.com/Zefau/ioBroker.jarvis/issues/616#issuecomment-763900928
Normal befüllt er sich automatisch, ich geh mal davon aus das du ne Playlist mit Tracks hast und den Adapter mit deinem Premium Acc verknüpft hast?
Also bei mir kann ich Spotify stoppen, aber nicht mehr mit play starten, hat das problem noch jemand?
Also bei mir kann ich Spotify stoppen, aber nicht mehr mit play starten, hat das problem noch jemand?
Ja manchmal nicht immer läuft nicht so zuverlässig
Bezüglich des Play Buttons Problems, der Funktioniert bei mir nur wenn ich Play Drücke und dann das Lied wechsle, ansonsten tut sich da nix
Bei mir reagiert der PlayButton auch nicht. Nur der NextTrackButton wechselt den Track und startet das Lied. Wenn ich den Quellcode richtig verstehe, schaltet der PlayButton nur auf den aktuellen Player um, startet aber nicht das Lied.
play: { state: ".player.isPlaying", action: ".devices.{PLAYER}.useForPlayback" },
Play selection ist ohne Funktion, vermutlich gehst du nicht auf die useForPlayback OID
spotify-premium.0.devices.xxxxxxx.useForPlayback
Habe mit Spotify genau das gleiche Problem. Wenn ich versuche das Gerät zu wechseln kommt folgende Ausgabe im iobroker Log:
Auch geht bei mir der Play Befehl nicht, pausieren kann ich zwar aber dann nicht wieder starten.
Habe Version v2.2.0-beta.42 installiert.
@simonssoftware @joerg2805 @duczz @JayRHa bitte schaut nochmal mit v2.2.0-beta.43
, ob es damit besser geworden ist.
Sofern der Play-Button nicht funktioniert, bitte mal im ioBroker schauen, ob die Datenpunkte der Geräte unter spotify-premium.0.devices
korrekt befüllt sind (insbesondere .isAvailable
).
@Zefau Nope ist leider gleich geblieben
Bitte mehr Infos. Geht's denn über den Spotify Adapter direkt? Wie sieht in ioBroker die Struktur aus? Sind die Player aktiv?
Über Spotify und Vis gehts einwandfrei. Player sind aktiv
Keine Veränderung. Über den Spotify Adapter funktioniert es.
bitte nochmal mit v2.2.0-beta.46
probieren
Geht immer noch nicht. Unterschied zu vorher: Wenn man Play drückt verschwindet der Fortschrittsbalken für 2s. Ausserdem wird der Progress falsch angezeigt.
Bei mir klappts leider auch nicht.
Wenn ich ein anderes Gerät auswähle, kommt immer noch der gleiche Fehler.
Ich hab mir oben mal deine Config für den Spotify Teil angeschaut, ich glaube da hat sich bei "resume" ein Fehler eingeschlichen, müsst bei der "action" nicht anstatt nur ".play" -> ".player.play" stehen?
Das Problem wie @joerg2805 es beschreibt hab ich nicht...
probiert bitte nochmal v2.2.0-beta.47
.
Wiedergabe starten funktioniert jetzt, Spotify hängt sich in meinem Fall dann zwar auf, aber die Status im iobroker werden jetzt richtig gesetzt.
Bei Änderung des Wiedergabegerätes leider immernoch die gleiche Fehlermeldung 😕
Manchmal geht es, meistens jedoch springt er nun für 0.1s auf play und dann wieder von alleine auf pause. Die progress Zeit wird falsch angezeigt. Und ein klick auf den progress Balken springt nicht an die gewünschte Stelle, sondern wechselt den Track.
Nicht ganz einfach. Den Fehler mit dem Klick auf den Progress-balken und springen zu einer bestimmten Stelle, den dann aber den Track wechselt, konnte ich bei mir nachstellen.
Das Wechseln des Wiedergabe-Geräts und den Fehler kann ich mir nicht erklären / nachstellen. Hab mal versucht das zu fixen, aber eher blind.
Auch, dass der Player nach dem Anschalten direkt wieder pausiert ist sehr merkwürdig. Und inwiefern wird die Progress-Zeit falsch angezeigt? Das wird bei jeder Aktualisierung aus ioBroker übernommen.
Versucht bitte nochmal die v2.2.0-beta.49
.
Das Klicken in den Fortschrittsbalken funktioniert jetzt. Die Progress Zeit springt allerdings nicht auf die neue Zeit. Erst wenn die Seite neu geladen wird, stimmt die Zeit wieder. Von den Buttons (Start/Pause, Next, Previous) geht jetzt gar keiner mehr.
Bei mir geht der Play Button nun - Nice
Muss mich korrigieren. Jarvis Adapter, Web Adapter, Spotify Adapter neu gestartet, Browser Cache gelöscht: Jetzt geht alles, bis auf die Progress Anzeige.
add new module to display and control Multimedia contents, e.g. Spotify, Plex, Alexa, etc.