Zefau / ioBroker.jarvis

jarvis - just another remarkable vis
https://forum.iobroker.net/topic/49776
Other
148 stars 38 forks source link

add new module MediaControl #173

Closed Zefau closed 3 years ago

Zefau commented 4 years ago

add new module to display and control Multimedia contents, e.g. Spotify, Plex, Alexa, etc.

Zefau commented 4 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.

Zefau commented 3 years ago

added with 2.2.0-beta.1.

image

Missing:

duczz commented 3 years ago

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

o0shojo0o commented 3 years ago

Wird es auch eine Sonos Unterstützung geben?

Zefau commented 3 years ago

Für Sonos brauche ich einen Screenshot der Adapter Struktur

o0shojo0o commented 3 years ago

Reicht dir das so? image

Zefau commented 3 years ago

Jo

florian84z commented 3 years ago

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?

Zefau commented 3 years ago

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

Zefau commented 3 years ago

https://forum.iobroker.net/post/555662

im Media Player Widget passt die „Zeit“ nicht. Ragt über das Widget hinaus. Siehe Screenshot image

Zefau commented 3 years ago

added multiplayer and player selection support with v2.2.0-beta.12.

duczz commented 3 years ago

Play selection ist ohne Funktion, vermutlich gehst du nicht auf die useForPlayback OID

spotify-premium.0.devices.xxxxxxx.useForPlayback

Zefau commented 3 years ago

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
        }
    }
}
JayRHa commented 3 years ago

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.

Bildschirmfoto 2021-01-13 um 09 19 12

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

`

zucki commented 3 years ago

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 :-)

Zefau commented 3 years ago

Kannst du mir noch ein Screenshot der Objekt-Struktur des Adapters posten, damit ich ein Gefühl für den Aufbau bekomme? Danke dir.

zucki commented 3 years ago

Gern

main: image

netsub: image

Zefau commented 3 years ago

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

zucki commented 3 years ago

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

Die Datenpunkte werden aber in dem Versuch befüllt. image

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.

duczz commented 3 years ago

Wäre es auch möglich eine Album und Track Auswahl mit einzubauen?

SaschaWeiher commented 3 years ago

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.

  1. Echos lassen sich ja zu Lautsprecher-Gruppen zusammenfassen. Im Alexa-Adapter werden in diesem Fall die einzelnen Echos, sowie die konfigurierten Lautsprecher-Gruppen erkannt. Im Dropdown des Media Players in Jarvis werden nun Gruppen und Einzelgeräte ausgegeben.

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.

  1. Default Device Konfiguration: Die Auswahl eines Default Device wäre prima. Vorab haben wir je Device ein Media Player Widget konfiguriert. Nun benötigen wir nur noch ein Media Player Widget. In Jarvis suchen wir uns den Media Player und wählen über das Dropdown jedes Mal den gewünschten Player aus. Die Vorabdarstellung eines bevorzugten Devices wäre nicht nur für die Handhabung eine Bereicherung, ich denke auch das Design (Look&Feel) würde hiervon profitieren.
Zefau commented 3 years ago

@duczz Wüsste nicht wie. Eine Trackauswahl gibt es im Spotify Adapter so nicht, oder?

Zefau commented 3 years ago

@SaschaWeiher nehme ich für v2.3 auf die Agenda

duczz commented 3 years ago

@Zefau Über die OID "spotify-premium.0.html.tracks" lässt es sich via VIS steuern

Zefau commented 3 years ago

@JayRHa hast du den Fehler noch? Welche Version von Spotify hast du? Ich bekomme den Fehler nicht, bin aber auf dem stable repo.

Zefau commented 3 years ago

@duczz über spotify-premium.0.html.tracks lässt sich das nicht steuern. Der OID steht auf write false ?

duczz commented 3 years ago

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

Edit: In der OID gibts pro Track den Punkte "onclick="vis.setValue" mit dem kannst du es evtl. schalten?

Zefau commented 3 years ago

@duczz ich bekomm den Datenpunkt gar nicht befüllt, wenn ich etwas abspiele. Muss ich da was machen?

Zefau commented 3 years ago

@duczz ich hab's mal für v2.3 aufgenommen: https://github.com/Zefau/ioBroker.jarvis/issues/616#issuecomment-763900928

duczz commented 3 years ago

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?

duczz commented 3 years ago

Also bei mir kann ich Spotify stoppen, aber nicht mehr mit play starten, hat das problem noch jemand?

JayRHa commented 3 years ago

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

duczz commented 3 years ago

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

joerg2805 commented 3 years ago

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" },

simonssoftware commented 3 years ago

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: grafik

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.

Zefau commented 3 years ago

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

duczz commented 3 years ago

@Zefau Nope ist leider gleich geblieben

Zefau commented 3 years ago

Bitte mehr Infos. Geht's denn über den Spotify Adapter direkt? Wie sieht in ioBroker die Struktur aus? Sind die Player aktiv?

duczz commented 3 years ago

Über Spotify und Vis gehts einwandfrei. Player sind aktiv image

joerg2805 commented 3 years ago

Keine Veränderung. Über den Spotify Adapter funktioniert es.

Zefau commented 3 years ago

bitte nochmal mit v2.2.0-beta.46 probieren

joerg2805 commented 3 years ago

Geht immer noch nicht. Unterschied zu vorher: Wenn man Play drückt verschwindet der Fortschrittsbalken für 2s. Ausserdem wird der Progress falsch angezeigt.

simonssoftware commented 3 years ago

Bei mir klappts leider auch nicht.

Wenn ich ein anderes Gerät auswähle, kommt immer noch der gleiche Fehler. grafik

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

Zefau commented 3 years ago

probiert bitte nochmal v2.2.0-beta.47.

simonssoftware commented 3 years ago

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 😕

joerg2805 commented 3 years ago

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.

Zefau commented 3 years ago

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.

joerg2805 commented 3 years ago

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.

duczz commented 3 years ago

Bei mir geht der Play Button nun - Nice

joerg2805 commented 3 years ago

Muss mich korrigieren. Jarvis Adapter, Web Adapter, Spotify Adapter neu gestartet, Browser Cache gelöscht: Jetzt geht alles, bis auf die Progress Anzeige.