fhempy: googlecast

Begonnen von dominik, 04 Dezember 2020, 23:33:53

Vorheriges Thema - Nächstes Thema

loosu

Zitatich habe gestern ein Update auf die neue Version gemacht. Spotify geht wieder  :), aber seitdem funktioniert die Speak-Funktion nicht mehr.
Hat noch jemand das Problem? Oder liegt es an meinem System?

Ja!!!!!!!! ,bei mir auch. Ich lasse mir die Temperaturen und Fensterzustände bei kritischen Situationen durchsagen. habe heute den ganzen Tag probiert und herausgefunden das alle meine original google mini und co. , auch in Gruppen nichts mehr mit Speak sagen. ein einzelner LG WK7 mit Assistent machts noch, aber dann auch nur direkt und nicht aus der Gruppe heraus. ärgerlich.  Es sieht so aus als ob Google seinen Geräten ein neues Updaten verpasst hat. Pakete wie nodejs usw. habe ich auch schon aktualisiert. keine Chance. Auch der direkte URL-Stream läuft mit PLAY im Gegensatz zum normalen WEB-Radiostream nicht. http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=das%20ist%20ein%20test.
Auch mit dem alten Modul geht das nicht mehr.
Über den Webbrowser oder VLC wird der Stream ausgegeben! ich tappe total im dunklen. bin auch in der Programmierung nicht fit. Da kann, glaube ich, nur einer helfen, wenn er mal Zeit hat.

a_quadrat

Danke für deine Antwort, dann scheint es an Google zu liegen.

Atara

Bei mir geht 'Speak' ebenfalls nicht mehr.
Es kommt, wie immer, ein Ping am Lautsprecher und danach nichts mehr.

loosu

Seit heute läuft Speak wieder! jedenfalls im Moment

a_quadrat

Bei mir läuft's auch wieder  :).

loosu

Aber verdammt langsame Geschwindigkeit, genau wie direkt bei Google translate selbst. Naja vielleicht ändert sich das auch wieder.

robii

es funktioniert wieder aber diese weinerlich bist selbstmordgefährdet klingende Stimme nervt echt. War irgendwie besser als es gar nicht mehr funktioniert hat ...

loosu

habe schon mal ein Feedback an google geschickt.....vieleicht wird es irgendwann mal wieder besser

presskopf

Das Speak ist schon klasse. Ich lasse meiner Frau berichten, dass die Waschmaschine fertig ist. :D (Sie findet es wirklich gut!)


Ein anderes Thema beschäftigt mich gerade:

Ich streame gerne Radiostreams auf meinen Onkyo per googlecast. Das funktioniert recht gut.
Mir ist aber aufgefallen, dass keine Daten zum Stream angezeigt werden. Ich fänd es prima, wenn z.B. Radiosender, Artist oder Song angezeigt werden. Das ließe sich doch prima im FTUI visualisieren. :)
Wenn ich den Stream im VLC am PC abspiele, erhalte ich diese Daten. Die sind also da.

Muss ich noch was einstellen oder ist das im Moment nicht möglich?
Beispielstreams:
set onkyo.chromecast play http://streams.radiobob.de/bob-acdc/mp3-192/mediaplayer

http://br-br3-live.cast.addradio.de/br/br3/live/mp3/128/stream.mp3



presskopf

#264
Für mein zuvor beschriebenes Problem habe ich nun folgenden Workaround gefunden; elegant ist aber anders, finde ich:

Ich verwende den MPD, um den Stream aus dem Internet zu holen und gebe als Output-Device einen httpd an: z.B. localhost:8000
Der MPD zeigt mir Artist und Title als Reading an, welches ich dann am FTUI ausgeben kann.

Nun nutze ich fhempy-googlecast, um den Stream am localhost an den Onkyo weiterzuleiten. Dabei wird der Stream vom MPD per lame re-encodiert. Ein Durchreichen habe ich nicht gefunden. Es geht, ist aber gefühlt Käse, zwei Devices zum Streamen einzuschalten :(

Weiterer Nachteil:
Wenn man einen Stream am MPD umschaltet, dauert es doch einige Sekunden, bis das am Onkyo ankommt.

JF Mennedy

#265
Hallo,

Spotify geht seit einiger Zeit nicht mehr, liegt jedoch an der pychromecast lib und nicht an fhempy.
Es gibt schon ein fix bei pychromecast, habe es bei mir eingebaut und dann geht es wieder.
unter \.local\lib\python3.x\site-packages\pychromecast\controllers\spotify.py ersetzen durch:
"""
Controller to interface with Spotify.
"""
import logging
import threading
import requests
import json

from . import BaseController
from ..config import APP_SPOTIFY
from ..error import LaunchError

APP_NAMESPACE = "urn:x-cast:com.spotify.chromecast.secure.v1"
TYPE_GET_INFO = "getInfo"
TYPE_GET_INFO_RESPONSE = "getInfoResponse"
#TYPE_SET_CREDENTIALS = "setCredentials"
#TYPE_SET_CREDENTIALS_ERROR = "setCredentialsError"
#TYPE_SET_CREDENTIALS_RESPONSE = "setCredentialsResponse"
TYPE_ADD_USER = "addUser"
TYPE_ADD_USER_RESPONSE = "addUserResponse"
TYPE_ADD_USER_ERROR = "addUserError"

# pylint: disable=too-many-instance-attributes
class SpotifyController(BaseController):
    """Controller to interact with Spotify namespace."""

    def __init__(self, access_token=None, expires=None):
        super().__init__(APP_NAMESPACE, APP_SPOTIFY)

        self.logger = logging.getLogger(__name__)
        self.session_started = False
        self.access_token = access_token
        self.expires = expires
        self.is_launched = False
        self.device = None
        self.credential_error = False
        self.waiting = threading.Event()

    def receive_message(self, _message, data: dict):
        """
        Handle the auth flow and active player selection.

        Called when a message is received.
        """
        if data["type"] == TYPE_GET_INFO_RESPONSE:
            self.device = data["payload"]["deviceID"]
            self.client = data["payload"]["clientID"]
            headers = {
                'authority': 'spclient.wg.spotify.com',
                'authorization': 'Bearer {}'.format(self.access_token),
                'content-type': 'text/plain;charset=UTF-8'
            }

            request_body = json.dumps({'clientId': self.client, 'deviceId': self.device})

            response = requests.post('https://spclient.wg.spotify.com/device-auth/v1/refresh', headers=headers, data=request_body)
            json_resp = response.json()
            self.send_message({
                "type": TYPE_ADD_USER,
                "payload": {
                    "blob": json_resp["accessToken"],
                    "tokenType": "accesstoken"
                }
            })
        if data["type"] == TYPE_ADD_USER_RESPONSE:
            self.is_launched = True
            self.waiting.set()

        if data["type"] == TYPE_ADD_USER_ERROR:
            self.device = None
            self.credential_error = True
            self.waiting.set()
        return True

    def launch_app(self, timeout=10):
        """
        Launch Spotify application.

        Will raise a LaunchError exception if there is no response from the
        Spotify app within timeout seconds.
        """

        if self.access_token is None or self.expires is None:
            raise ValueError("access_token and expires cannot be empty")

        def callback():
            """Callback function"""
            self.send_message({"type": TYPE_GET_INFO, "payload": {}})
           
        self.device = None
        self.credential_error = False
        self.waiting.clear()
        self.launch(callback_function=callback)

        counter = 0
        while counter < (timeout + 1):
            if self.is_launched:
                return
            self.waiting.wait(1)
            counter += 1

        if not self.is_launched:
            raise LaunchError(
                "Timeout when waiting for status response from Spotify app"
            )

    # pylint: disable=too-many-locals
    def quick_play(self, **kwargs):
        """
        Launches the spotify controller and returns when it's ready.
        To actually play media, another application using spotify connect is required.
        """
        self.access_token = kwargs["access_token"]
        self.expires = kwargs["expires"]

        self.launch_app(timeout=20)


Ich habe zusätzlich zu dieser Änderung auch ein Update auf die Versin 9.2.0 von pychromecast gemacht... (.local\lib\python3.x\site-packages\fhempy\lib\googlecast\manifest.json)

Gruss Jan

dominik

Hi Jan,

danke für die Info! Ist in der 9.2.0 Version der Bug schon behoben? Wenn ja, dann aktualisiere ich gleich die Abhängigkeit.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

JF Mennedy

Hi Dominik,

nein ist noch nicht behoben, ist aber schon ein PR gestellt... Ich halte das mal im Auge und melde mich, wenn es gemerged ist...

Gruss Jan

dominik

fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

JF Mennedy

Hi,

hier der Stand der Dinge bezüglich Pychromecast und Spotify: Anscheinend wird Pychromecast nicht aktualisiert https://github.com/home-assistant-libs/pychromecast/pull/509, dafür ist Spotify in eine eigene Lib https://github.com/fondberg/spotcast ausgelagert worden.

Zur Zeit läuft Spotify bei mir mit pychromecast 9.2.0 und dem beschriebenen Fix, aber wahrscheinlich auch nur so lange, bis auf Seiten von Spotify wieder etwas geändert wird, was im Übrigen auch der Grund war, weshalb der SpotifyController aus Pychromecast ausgelagert wird :-(

Gruss Jan