Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Text to Speech

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

    Alexa Text to Speech

    Moin,

    ich würde gerne die Alexa von Sh.py fernsteuern.
    Dafür habe ich folgendes Paket gefunden:
    https://github.com/ewenchou/alexa-agent

    Code:
     alexa.say("Hello World")  
     alexa.ask(["What is today's date", "How is the weather in San Francisco"])
    Damit müsste dann auch "Spiele WDR 5" funktionieren.
    Allerdings brauch alexa-agent das Paket
    https://github.com/ewenchou/alexa-client

    Dabei wirkt die Einrichtung ähnlich kompliziert wie die vom sh.py Plugin.
    Da kommt bei mir die Frage, ob es Synergien zwischen den beiden Anmeldungen gibt? Kann man die Einrichtung abkürzen, wenn man schon das sh.py Plugin installiert hat? Wenn ja, würde es vielleicht sogar Sinn machen, die o.g. Funktionalität im existierenden sh.py Plugin zu integrieren?

    Allerdings funktioniert das dann über den "Audio-Kanal" von Alexa. D.h. Alexa muss erstmal das Kommando von natürlicher Sprache übersetzen. Eigentlich ist das garnicht das, was ich will. Dieses Skript kommt meinem Wunsch viel näher:
    https://blog.loetzimmer.de/2017/10/a...hell-echo.html

    Dieses scheint direkt mit Alexa zu interagieren, indem es echte ("IT") Kommandos an Alexa schickt - statt natürlicher Sprache. Das halte ich für robuster. Ich habe aber bisher keine Implementierung ähnlich dieser in Python gefunden.
    Kennt jemand etwas?

    Usecases wären bei mir Szenen: Morgens Musik oder Wetter ansagen z.B.

    Gruß,
    Hendrik
    Zuletzt geändert von henfri; 07.03.2019, 07:48.

    #2
    Hallo henfri ,

    ich schau mir das mal an, ich denke das könnten wir als Plugin realisieren.
    Ich würde das aber als seperates Plugin sehen. Bei zu vielen Baustellen im Alexa4P3-Plugin wird das
    nie release fähig. (Bin noch mit dem Kamera-Proxy zugange damit man private Cams aus dem LAN streamen kann -
    das wird auch seperates Plugin).

    Wie stellst du dir das vor ?

    Szene "Kochen" wird via Taster aktiviert -> Alexa meldet "Die Szene Kochen wurde aktiviert"
    Das Licht im OG der Garage wird eingeschalten -> Alexa meldet "Oh Mann, jetzt hat schon wieder einer ausversehen das Licht in der Garage oben eingeschalten"
    (Das wäre mein UseCase)

    Gruss Andre

    Kommentar


      #3
      Hallo henfri ,

      ich habe das mal soweit geprüft. Das funktioniert auch aus Python heraus.
      Es werden die Befehle die über die Alexa-App oder ein Webinterface gesendet werden nachgestellt. Echtes TTS funktioniert auch.
      Es wird kein AVS benötigt.

      SSML wird anscheinend ebenfalls unterstützt, wie das genau funktioniert muss noch herausgefunden werden.

      Im Moment verwende ich dafür "pycurl" mit normalen HTTP-Requests hatte es nicht funktioniert. (Werd ich aber nochmal versuchen,
      da ich jetzt verstanden habe wies funktioniert)
      Das einloggen funktioniert aktuell wie bei den anderen mittels des Cookies. Eine andere Möglichkeit habe ich bisher nicht gefunden.
      Es ist von Seiten Amazon anscheinend nicht vorgesehen die API via Dev-Account zugänglich zu machen. (Falls einer eine Möglichkeit kennt gerne melden).

      Ich würde das dann vielleicht doch im Alexa4P3-Plugin einbauen da hier schon viel an Substanz da ist welche ich in einem zusätzlichen Plugin erst herstellen
      müsste. (Überleg ich mir nochmal)

      Falls Du hier gerne selber was machen möchtest stelle ich Dir gerne meine bisherigen Erkenntnisse zur Verfügung.

      Ich würde das in der Item-Konfiguration in etwa so vorsehen (Vorschlag zur Diskussion)

      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: speak:<Dein Text>"
      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: speak:<Dein Text>"

      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: Activate:<Dein Radiosender>"
      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: Deactivate:<Dein Radiosender>"

      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: Inc_Volume:<Step>"
      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: Dec_Volume:<Step>"
      alexa_rc_command : "<alexa-gerate_name>:<on_item_value>: Set_Volume:<Step>"

      Man könnte dann mit einem Taster, der USZU oder was auch immer das Echo mit Events triggern.

      Ist Multi-Room ein Thema ? (ansprechen mehrerer Geräte gleichzeitig) Dann müsste man eine Gruppendefinition vorsehen.

      Ideen was man alles machen kann gibts hier

      Bleibt ein spannendes Thema

      Gruss Andre

      Kommentar


        #4
        Hallo Andre,

        toll, dass du dir das angesehen hast. Danke!
        Beim nutzen der "Web-Browser-Api" habe ich zwei Sorgen:
        1) Funktioniert das, wenn man bei Amazon 2-Faktor-Auth verwendet?
        2) Wenn die Browser-App geändert wird, funktioniert die Schnittstelle nicht mehr.

        Bei der offiziellen API habe ich die zwei Sorgen:
        1) komplizierte Einrichtung (könnte aber die Gleiche sein, wie für das existierende Plugin)
        2) ich habe bisher nur gefunden, dass man ein Kommando in natürlicher Sprache an die Alexa senden kann (siehe Link oben).

        Ist also beides nicht ganz ideal. Was denkst du?

        Gruß,
        Hendrik

        Kommentar


          #5
          Hallo Hendrik,

          aus meiner Sicht ist das wie folgt:

          die Authentifizierung spielt nicht wirklich eine Rolle, es wird die der Web-Session genutzt, das hat nichts mit den Dev-Accounts zu tun.
          (Vielleicht verstehe ich Deine Bedenken an der Stelle auch nicht, was meinst Du mit 2-Faktor-Auth, bzw. an welcher Stelle ?)
          Es wird via HTTPS kommuniziert. Wenn man kein Automatisches update des Cookies will benötigt keiner die Zugangsdaten)
          Ich habe mich mit "angemeldet bleiben" angemeldet und dann den Cookie weggesichert -> Ablaufdatum des Cookies unbegrenzt.


          Hier gibt es nicht Besseres (hab zumindest nichts gefunden)

          Wenn die API für den Browser/die Alexa-App geändert wird, ist das wie immer, der Developer muss nachziehen (siehe Payload V2/V3)
          Die offizielle API gibt das gar nicht her. Ich denke die wollen den Remote-Control der Echo's usw. gar nicht.

          Das mit natürlicher Sprache senden wäre eine Option (offizielle API). Ich glaube aber das wird ziemlich komisch wenn zuerst "vorgelesen" wird "Alexa mach das Licht aus",
          dann macht "Alexa" -> smartHomeNG das Licht aus und dann bestätigt Alexa ihren selbst angeforderte Aufforderung mit "OK".
          Ich stelle mir das ziemlich gruselig vor

          Nachtrag :Ich bin auch gar nicht sicher (habs nich probiert) ob Alexa auf sich selbst hört während Sie spricht !

          Ich denke/glaube wenn das grundsätzlich auf dem Weg von den "Anderen" umgesetzt wird (in my point of view the best/only way) das es in Zukunft Anpassungen geben wird. Diese sollten aber überschaubar sein. (Auch die API entwickelt sich weiter)

          Egal wie, man könnte bei den "Anderen" Etliches abschauen, einen Teil müsste man sicherlich selbst noch erforschen, wenn es API-Änderungen gibt
          sind alle im selben/gleichen Boot. Da die Änderungen dann alle betreffen wird es hier auch schnell Anpassungen geben.

          Fazit : Eine API mit direktem Zugriff wäre mir auch am Liebsten. Gibt es nach Kenntnisstand heute aber nicht, also Pest oder Cholera, dann würde ich die Nutzung
          der Web-API (mit allen Nachteilen - Änderungen - CookieLogin) bevorzugen (großes Boot, viele Mitspieler)


          Gruss Andre


          Zuletzt geändert von AndreK; 10.03.2019, 20:10. Grund: siehe Nachtrag

          Kommentar


            #6
            Hallo Andre,

            das macht Sinn für mich.
            Ich hatte es nicht so interpretiert, dass die Alexa sich selbst das Kommando vorliest. Aber ich habe keinerlei Indizien dafür oder dagegen.
            Zur zweifaktor Authentifizierung (2FA): Amazon unterstützt ja -für den normalen Amazon-Login- 2FA. Vom OpenHab Binding wird diese nicht unterstützt:
            1. Create an 'Amazon Account' thing
            2. Configure your credentials in the account thing (2 factor authentication is not supported!)
            Ich denke, das liegt daran, dass das Openhab Binding kein User-Interface von Amazon zeigen kann/will, in dem man den zweiten Faktor eingibt.
            Aber dir schwebt vor, dass man den Login im Browser macht und den Cookie zu sh.py kopiert? Dann hätte man das Problem ja nicht.

            Gruß,
            Hendrik

            Kommentar


              #7
              Hallo Hendrik,

              authentifizerung über das Cookie, keine Benutzerdaten erforderlich, eventuell erneuern des Cookies nach gewisser Zeit (manuell oder wahlweise
              mit Credentials automatisch) , kann man eventl. im WebInterface (was es noch nicht gibt) anzeigen wie lange noch gültig.

              Die machen das alle indem Sie den Login-WebSite automatisch bedienen. Problem ist hier immer, das eventuell eine Captcha zurückkommt. Dieses
              kann nicht automatisch bestätigt werden (Grafik mit Text zum eingeben) :-(

              Grundsätzlich könnte man sicherlich auch ein User-Interface im Backend anzeigen (... mal so aus der Hüfte geschossen, nicht zu Ende gedacht)

              Wie siehst Du das ?

              Gruss Andre

              Kommentar


                #8
                Hallo,

                die Loginseite anzuzeigen wäre sicher eine gute Lösung - aber kriegt man den Cookie dann auf den Rechner, der sh.py ausführt 'rüber?
                Ich denke, es wäre vorerst auch ok, wenn man den Cookie manuell rüber kopiert.

                Gruß,
                Hendrik

                Kommentar


                  #9
                  Hallo Hendrik,

                  man könnte den Cookie übers Webinterface via Cut&Paste einfügen und dann via CherrPy auf dem SmarthomeNG speichern.
                  Das könnte eine ganz elegante Methode sein, oder ?

                  Wie wollen wir weitermachen ?

                  Gruss Andre

                  Kommentar


                    #10
                    Hatte das vor einiger Zeit mal getestet. allerdings mit nem Gira HS

                    https://knx-user-forum.de/forum/%C3%...tts-mit-dem-hs

                    greetz Benni

                    Kommentar


                      #11
                      Hallo Andre,
                      Zitat von AndreK Beitrag anzeigen
                      Wie wollen wir weitermachen ?
                      Ich habe python-Kenntnisse, aber ich denke nicht, dass es effizient ist, wenn ich das implementiere. Wenn du dazu bereit wärst, wäre es gut, wenn du es implementieren würdest. Ich kann mich um Test, Bug-Fixing und Dokumentation kümmern.

                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        Hallo Hendrik,

                        ich würde das umsetzen. Folgende Ideen :
                        • Webinterface für die Verwaltung des Cookies
                        • für jedes Remote-Commando für Alexa ein kleines File mit dem Namen der "action.cmd"
                          in diesem File steht die URL der Api-Adresse und die Struktur des Payloads + Platzhalter für die Values.
                        • Aufruf der Funktion über einen Item-Eintrag in den *.YAML-Item-Dateien alexa_rc_command : "<alexa-gerate_name>:<on_item_value>:<action.cmd>:value"
                          durch update_item im Plugin
                        • der Payload würde dann mit den entsprechenden Werten gefüllt und versendet
                        • Es könnte jeder neue *.cmd-Files erstellen und das Paket der Funktionen erweitern
                        • Verwaltung der action.cmd-Files über das Web-Interface
                        • Testfunktionen über das Web-Interface könnte man auch realisieren
                        Im Moment habe ich noch keinen anderen Weg wie pycurl gefunden. Eine SSL-Verbindung via socket will mir nicht gelingen. Die request-http Anfragen lassen nur Tuples im Header zu, ist nicht zu gebrauchen da der Cookie einfach so mit muss. cUrl ist hier nicht so empfindlich. (Hier mach ich noch versuche das zu lösen)

                        Was hälst Du von obigen Ideen ?

                        Gruss Andre

                        Kommentar


                          #13
                          Hallo,

                          das klingt gut. Nur bei den action.cmd Dateien bin ich zurückgeschreckt.
                          Warum nicht diese Informationen in die plugin.yaml?
                          Hm... Dann geht wahrscheinlich das editieren im Web-Interface nicht.... Ok, dafür habe ich auch keine bessere Idee.

                          Gruß,
                          Hendrik

                          Kommentar


                            #14
                            Hallo Hendrik,

                            die Idee mit den cmd-Dateien rührt daher, dass jeder neue Kommandos so einbauen und zur Verfügung stellen kann (Upload des *cmd-Files auf GIT)
                            Es würde dann ein "selbstwachsendes" Repository entstehen (so die Hoffnung). Man muss nicht für jedes neue gewünschte Kommando den Quelltext anfassen.

                            Ich versuch mal über's WE einen Prototypen zu bauen

                            Gruss Andre

                            Kommentar


                              #15
                              Hallo Andre,

                              auch wenn die Konfiguration in einer (item).yaml enthalten wäre - vielleicht mit Hilfe von Structs (http://smarthomeng.de/dev/user/konfi..._struct.html)- es möglich, dass jeder Nutzer neue Kommandos einbauen kann.
                              Vorteil wäre, dass keine weitere Konfigurationsdatei (-art) nötig wäre.

                              Gruß,
                              Hendrik

                              Kommentar

                              Lädt...
                              X