Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Text to Speech

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • psilo
    antwortet
    ich lass das dann mal auf develop, wenn du noch umbaust.

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi psilo ,

    "ready" - "ja", da ist aber im Moment wieder einiges im Umbruch, Doku und locale.yaml ist noch nicht aktuell.
    Mal abgesehen von der Doku könnte man im Moment schon "ready" vergeben - es läuft ja stabil.

    Gruss Andre

    Einen Kommentar schreiben:


  • psilo
    antwortet
    der state des plugins in der plugin.yaml ist noch auf develop. müsste doch inzwischen ready sein?

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi,

    ich habe mal versucht Textkommandos an eine Lautsprechergruppe zu senden. Ich bekomme als response zwar 200 zurück, es passiert aber nichts.
    Dabei habe ich auch noch mal das TuneIn-Kommando auf die Gruppe geschickt, das hatte erstaunlicherweise funktioniert. Also funktioniert Multiroom-Audio für TuneIn wohl doch :-)

    Was funktionieren könnte wäre eine synchrone Nachricht via "Announcement" - hier mal der Payload für ein Announcement an mehrere Geräte.
    Einfach mehrere Geräte unter "target" hinzufügen.

    (Hier kann mal auch SSML verwenden - "type" von "text" auf "ssml" ändern und den Text in <speak> </speak> packen)

    url ist hier : /api/behaviors/preview

    Code:
    {
      "behaviorId": "PREVIEW",
      "sequenceJson": {
        "@type": "com.amazon.alexa.behaviors.model.Sequence",
        "startNode": {
          "operationPayload": {
            "customerId": "<deviceOwnerCustomerId>",
            "content": [
              {
                "display": {
                  "title": "smartHomeNG",
                  "body": "<mValue>"
                },
                "speak": {
                  "type": "text",
                  "value": "<mValue>"
                },
                "locale": "de-DE"
              }
            ],
            "expireAfter": "PT5S",
            "target": {
              "customerId": "<deviceOwnerCustomerId>",
              "devices": [
                {
                  "deviceSerialNumber": "<serialNumber>",
                  "deviceTypeId": "<deviceType>"
                },
                {
                  "deviceSerialNumber": "YYYYYYYYYYYYY",
                  "deviceTypeId": "XXXXXXXXXXXXXX"
                }
                  
              ]
            }
          },
          "type": "AlexaAnnouncement",
          "@type": "com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode"
        }
      },
      "status": "ENABLED"
    }
    Gruss Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Hi @AndreK,

    Danke für die Infos, ich werde mal beides so testen.

    Zu deiner Frage: In der Alexa App (iOS bei mir) erstelle ich eine Lautsprecher Gruppe. Beispiel Screenshot hier drunter z.B. 'Erdgeschoss'.
    Dann sage ich "Alexa, spiele Eldoradio im Erdgeschoss" woraus Alexa antwortet "Eldoradio auf TuneIn. Es läuft auf der Erdgeschoss Gruppe"

    Das ist dann perfekt synchron. Keine Ahnung ob auch andere Befehle an eine Gruppe gesendet werden können.
    Das wäre aber sinnvoll z.B. für das "Doorbell" CmdLet, oder Text2Speech wie z.B. "Die Waschmaschiene ist fertig" oder "Alarmanlage scharf gestellt".

    PNG image.png


    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi aldaris ,

    wieso das Plugin bei Step 6 einen Fehler geschmissen hat kann ich mir im Moment nicht erklären. Es müsste aber zu diesem Zeitpunkt ein Eintrag in
    "/usr/local/smarthome/var/log/smarthome-warnings.log" gegeben haben. Kannst du hier bitte mal nachschauen was dort eingetragen wurde, besten Dank

    Gruss

    Andre

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo Foxi352 ,

    man kann ein neues Commandlet mit mehreren Anweisungen für mehrere Geräte erstellen. Das Kommando wird dann mit einem POST an die Cloud gesendet.
    Diese sendet die Nachrichten dann an alle Geräte. Wirklich synchron ist das bei mir nicht, liegt aber eventuell daran das es einmal ein Show ein einmal ein Dot ist.

    Beispiel für so einen Payload commandlet : ( die sequenceId spielt keine Rolle, man muss dann jeweils manuell die serial, customerId und deviceTyp eintragen)
    Der Payload kann um weitere Geräte erweitert werden.
    Die URL lautet : /api/behaviors/preview
    Code:
    {
      "behaviorId": "PREVIEW",
      "status": "ENABLED",
      "sequenceJson": {
        "@type": "com.amazon.alexa.behaviors.model.Sequence",
        "sequenceId": "amzn1.alexa.sequence.8d9b40ab-91a7-46c1-8d42-1cd53408874f",
        "startNode": {
          "@type": "com.amazon.alexa.behaviors.model.SerialNode",
          "name": null,
          "nodesToExecute": [
            {
              "@type": "com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode",
              "type": "Alexa.Speak",
              "operationPayload": {
                "textToSpeak": "<mValue>",
                "locale": "de-DE",
                "customerId": "<deviceOwnerCustomerId>",
                "deviceSerialNumber": "<serialNumber>",
                "deviceType": "<deviceType>"
              }
            },
            {
              "@type": "com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode",
              "type": "Alexa.Speak",
              "operationPayload": {
                "textToSpeak": "<mValue>",
                "locale": "de-DE",
                "customerId": "XXXXXXXXXXXXXXX",
                "deviceSerialNumber": "YYYYYYYYYYYYYYYYYY",
                "deviceType": "ZZZZZZZZZZZZZZZZ"
              }
            }
          ]
        }
      }
    }
    Vielleicht kannst Du das mal testen.

    Btw - we startest Du die TuneIn-Sender auf mehreren Geäten ?

    Das starten via Plugin von TuneIn-Sendern würde auch wieder funktionieren. Es gibt aber zwei Besonderheiten :
    - Die Anfrage muss als PUT gesendet werden - das haben wir bis jetzt nicht gebraucht und ist im Plugin nicht verfügbar
    - Der Payload muss doppelt base64-encodiert sein - das haben wir bis jetzt auch nicht gebraucht und ist im Plugin nicht verfügbar.

    Man kann die TuneIn-Sender aus einer Logik starten

    Code:
    import requests
    import json
    import base64
    deviceSerial = "XXXXXXXXXXXXXXX"
    deviceType = "YYYYYYYYYYYYY"
    myStationID = "s96141"
    payload = '["music/tuneIn/stationId","'+myStationID+'"]|{"previousPageId":"TuneIn_SEARCH"}'
    firstbase64 = base64.b64encode(payload.encode('utf-8'))
    secondbase64 = base64.b64encode(firstbase64)
    
    myUrl = '/api/entertainment/v1/player/queue?deviceSerialNumber={}&deviceType={}'.format(deviceSerial,deviceType)
    
    
    myHeader = { "Host": "alexa.amazon.de",
                       "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0",
                       "Connection": "keep-alive",
                       "Content-Type": "application/json; charset=UTF-8",
                       "Accept-Language": "en-US,en;q=0.5",
                       "Referer": "https://alexa.amazon.de/spa/index.html",
                       "Origin":"https://alexa.amazon.de",
                       "DNT": "1"
                      }
    mySession = requests.Session()
    mySession.cookies.update(sh.AlexaRc4shNG.cookie)
    myPayload='{"contentToken":"music:'+secondbase64.decode()+'"}'
    response= mySession.put('https://'+sh.AlexaRc4shNG.host + myUrl,headers=myHeader,data=myPayload,allow_redirects=True)
    Viele Grüsse
    Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Ja klar, das mache ich momentan auch so. Das hat aber einige Nachteile.

    Wenn du z.B. an > 5 Echo's schickt, und die Nachricht noch per Mail schicken willst, gleichzeitig noch an verschiedene PushOver Empfänger u.s.w. dann dauert das alles lange. Wenn du bei allen 3 Wegen jeweils eine Gruppe hast dann sind es 3 Zeilen in der Logik vs 20. Von der Übersichtlichkeit des Scripts reden wir mal nicht ...

    Und wenn ich im Erdgeschoss bin wo ich z.B. 3 Echo's stehen habe dann spielen die das nicht synchron ab. Hört sich bei offenen Türen scheisse an :-)
    Wogegen die TuneIn Radiosender von Alexa in der Gruppe z.B: perfekt synchron sind ...

    Ich weiss, dass sind first-world-problems. War auch nur ne Frage ob ich das irgendwie (oder irgendwann) optimieren kann ...

    Einen Kommentar schreiben:


  • Jürgen
    antwortet
    Hallo Serge,

    meine Meldungen werden an beide vorhandenen Echos ausgegeben, einfach die Ausgabebefehle doppeln und dann das Ziel ändern.

    Gruß Jürgen

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    AndreK Sag mal, ist es eigentlich möglich einen Text2Speech an eine Lautsprechergruppe zu machen ? Ich hätte sehr viele use-cases in meinem Haus dafür :-)

    Serge

    Einen Kommentar schreiben:


  • aldaris
    antwortet
    Ich nochmal, verstehen tue ich es nicht, aber nach einem Neustart von smarthome.service kann sich das plugin nun erfolgreich einloggen. Ich beobachte das mal weiter, aber im Moment kann ich arbeiten! Super Arbeit!

    Einen Kommentar schreiben:


  • aldaris
    antwortet
    Guten Morgen zusammen,

    ich freue mich, dass es hier weiter geht und wollte direkt mal probieren, ob ich jetzt weiterkomme als früher (böse MFA). Zur Klarstellung, MFA ist die 2SV (Multi = 2 ?).

    Ich hab die aktuelle Version besorgt (1.0.3) und dort den MFA Login Tab (sehr gut aufgbaut!) versucht durchzuführen. Bis Schritt 5 klappt das super :-). Bei Schritt 6 kommt dann eine rote Box: "Error while Communication !"

    Ich hab mal reindebuggt, das sind die Daten, die ich raussuchen konnte. Kann jemand damit was anfangen?

    /plugin/alexarc4shng/handle_mfa.html
    data: "Key":"Step6","data":{"command":"login"}}

    Status 500
    Internal Server Error

    VersionHTTP/1.1
    Übertragen 4,31 KB (4,17 KB Größe)
    Referrer Policy: strict-origin-when-cross-origin

    Oops, Error 500:


    The server encountered an unexpected condition which prevented it from fulfilling the request.


    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Zitat von AndreK Beitrag anzeigen
    Die API für Tune-In hat sich geändert, das funktioniert im Moment nicht. Da muss ich mich noch schlau machen.
    Ich hab dazu auch mal ein bisschen gegoogelt und was ich bis jetzt gefunden habe sieht nicht so gut aus. Amazon scheint irgendetwas verändert zu haben. Es funktioniert, zumindest bei mir, nämlich auch nicht mehr von der alexa.amazon.de Seite aus.

    Ich hab gesehen, dass andere einen Text Input Channel nutzen mit dem man Alexa einen Text POSTen kann der wie ein gesprochenes Kommando ausgeführt wird. Also z.B. "Spiele Eldoradio auf Tunein". Vielleicht wäre die Implementierung eines solchen CmdLets eine Lösung ?

    Allerdings weiss ich natürlich nicht, ob das über die von dir genutzte API möglich ist, oder ob man ein Skill dafür braucht u.s.w.

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Hier bitte...

    Du bist dir aber sicher bewusst, dass da noch jeeeeeede Menge Strings in der locale fehlen und im WebIF nicht übersetzt sind :-) ?
    Lass dich dadurch natürlich nicht vom PR gegen develop abhalten, denn ich denke fast alle Nutzer dieses Plugins warten auf die MFA kompatible Version ...

    Code:
    plugin_translations:
    # Translations for the plugin specially for the web interface
    'allowed IP': {'de': 'erlaubte IP', 'en': '=', 'fr': 'Adresses IP aprouvées'}
    'last Session': {'de': 'letzte Sitzung', 'en': '=', 'fr': 'Dernière session'}
    'Stream-Modifiers': {'de': 'Stream-Modikatoren', 'en': '=', 'fr': 'Modificateurs de flux'}
    'last Session duration': {'de': 'letzte Sitzungs- dauer', 'en': '=', 'fr': 'durèe de la dernière session'}
    'Sessions total': {'de': 'Sitzungen gesamt', 'en': '=', 'fr': 'Nombre de sessions'}
    'Settings': {'de': 'Einstellungen', 'en': '=', 'fr': 'Réglages'}
    'Credentials:': {'de': 'Zugangsdaten:', 'en': '=', 'fr': "Données d'accès"}
    'delete Protocol': {'de': 'Protokoll löschen:', 'en': '=', 'fr': 'Supprimer journal'}
    'Real-URL': {'de': 'tatsächliche URL', 'en': '=', 'fr': 'URL réelle'}
    'Commit Changes': {'de': 'Änderungen speichern', 'en': '=', 'fr': 'Sauvegarder modifications'}
    'Store to Config': {'de': 'in Konfiguration speichern', 'en': '=', 'fr': 'Sauvegarder la config'}
    'Settings / Cam-Info': {'de': 'Einstellungen / Kamera-Infos', 'en': '=', 'fr': 'Règlages / Infos caméra'}
    'Communication-Log': {'de': 'Kommunikations-Log', 'en': '=', 'fr': 'Journal de communication'}
    'active Camera Threads': {'de': 'aktive Kamera-Threads', 'en': '=', 'fr': 'Threads de caméra actifs'}
    'SSL Certificate Info': {'de': 'SSL Zertifikas Info', 'en': '=', 'fr': 'Infos sur le certificat SSL'}
    'Proxy-Credentials': {'de': 'Proxy-Zugangsdaten', 'en': '=', 'fr': "Données d'accès du proxy"}
    'Proxy-Authorization': {'de': 'Proxy-Authorisierungs-Typ', 'en': '=', 'fr': "Type d'autentification du proxy"}
    'Video-Buffer-Size :': {'de': 'Video-Puffer-Grösse', 'en': '=', 'fr': 'Taille de la mémoire tampon vidéo'}
    'Authorization :': {'de': 'Authorisierungs-Typ', 'en': '=', 'fr': "Type d'autentification"}
    'Encode, save and login': {'de': 'enkodieren,speichern und einloggen', 'en': '=', 'fr': 'Encoder, sauvegarder et connexion'}
    'encoded Cred.:': {'de': 'enkodierte Zugangsdaten', 'en': '=', 'fr': 'Cred. encodés'}
    'Result :': {'de': 'Ergebnis', 'en': '=', 'fr': 'Résultat'}
    'Value': {'de': 'Wert', 'en': '=', 'fr': 'Valeur'}
    'Property': {'de': 'Eigenschaft', 'en': '=', 'fr': 'Prioriété'}
    'Threads existing ...': {'de': 'existierende Threads', 'en': '=', 'fr': 'Threads existants'}
    'Auto Update ( 2 sec.)': {'de': 'Auto Update ( 2 Sek.)', 'en': '=', 'fr': 'Màj automatique ( 2 sec. )'}
    'last/next Auto-Login' : {'de': 'letztes/nächstes Auto-Login', 'en': '=', 'fr': 'Dernière / prochaine connexion'}
    'selected Device' : {'de': 'gewähltes Gerät', 'en': '=', 'fr': 'Appareil choisi'}
    'No. of Alexa-Devices': {'de': 'Anzahl Alexa-Geräte', 'en': '=', 'fr': "Nombre d'appareils Alexa"}
    'LogOff': {'de': 'Ausloggen', 'en': '=', 'fr': 'Déconnection'}
    'LogIn': {'de': 'Einloggen', 'en': '=', 'fr': 'Connection'}
    'Store Cookie': {'de': 'Cookie speichern', 'en': '=', 'fr': 'Sauvegarder Cookie'}
    'Paste the Cookie-File here': {'de': 'Cookie File hier einfügen', 'en': '=', 'fr': 'Coller le fichier cookie ici'}
    'existing Commands': {'de': 'existierende Kommandos', 'en': '=', 'fr': 'Commandes existantes'}
    'Command-Name': {'de': 'Kommando-Name', 'en': '=', 'fr': 'Nom de la commande'}
    'Step' : {'de': 'Schritt', 'en': '=', 'fr': 'Étape'}
    'Reload Page' : {'de': 'Seite neu laden', 'en': '=', 'fr': 'Recharger page'}
    
    # '': {'de': 'Proxy-Authorisierungs-Typ', 'en': '=', 'fr': ''}

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Wie die Limits für Anfragen sind kann ich nicht beantworten, hab auch nichts dazu gefunden.
    Den 429er hatte ich aber auch noch nicht. Bei welchen Befehlen wurder der 429er, oder so, den zurückgeliefert.

    Die API für Tune-In hat sich geändert, das funktioniert im Moment nicht. Da muss ich mich noch schlau machen.

    Vielleicht kannst Du mir die locale.yaml per PN oder hier im Forum zukommen lassen, dann kann ich diese übernehmen.
    Für einen PR gegen Develop fehlen nur die Ergänzungen in der REAMDE und eventuell in der user_doc.rst.

    Gruss Andre

    Einen Kommentar schreiben:

Lädt...
X