Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Text to Speech

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

    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

    Kommentar


      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': ''}

      Kommentar


        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.

        Kommentar


          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.


          Kommentar


            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!

            Kommentar


              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

              Kommentar


                Hallo Serge,

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

                Gruß Jürgen

                Kommentar


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

                  Kommentar


                    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

                    Kommentar


                      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

                      Kommentar


                        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


                        Kommentar


                          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

                          Kommentar


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

                            Kommentar


                              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

                              Kommentar


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

                                Kommentar

                                Lädt...
                                X