Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Routine mit einer Frage - Antwort - Tätigkeit

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

    Alexa Routine mit einer Frage - Antwort - Tätigkeit

    Ich habe das Problem das ich oft vergesse das Gartenlicht das ich mit Alex einschalte auch wieder auszuschalten.
    Ich wollte jetzt eine Routine in der Alexa App bauen die das Licht einschaltet aber mich beim anschalten auch fragt ob das Licht automatisch nach einigen Zeit wieder ausgeschalten werden soll und bei der Antwort "JA" dann das Licht wieder ausschaltet.
    Ich habe aber nichts gefunden ob und wie das gehen könnte. Habt ihr so was realisiert? Wenn ja wie? Edomi?

    #2
    Hi
    generell geht sowas - Stichwort "actionable notifications". Ist aber recht kompliziert und derzeit nur für Homeassistant umgesetzt...
    Ich hab sowas umgesetzt für "Die Garage ist seit xx Minuten offen - soll ich sie schließen?".
    Für Edomi hab ich sowas noch nicht hingekriegt.

    Für dein Licht würde ich einen Normalen Treppenhausautomat an das Gartenlicht=EIN-Rücmeldungs KO/iKO klemmen...

    Gruß
    Thorsten

    Kommentar


      #3
      Zitat von ThorstenGehrig Beitrag anzeigen
      Für dein Licht würde ich einen Normalen Treppenhausautomat an das Gartenlicht=EIN-Rücmeldungs KO/iKO klemmen...
      Wenn es eine fixe Nachlaufzeit sein soll, würde ich das auch so machen.

      Alternativ kann man auch einen weiteren Sprachbefehl absetzen:

      Alexa, schalte das Gartenlicht in 2 Stunden aus.

      Kommentar


        #4
        Ich habe in der Routine einen Timer (Warte 5 Minuten) eingebaut und danach wird das Licht ausgemacht. Allerdings kann ich jetzt die Routine nur sehr eingeschränkt nutzen wenn ich nicht nach 5 Minuten im Dunklen stehen will. Hab noch keinen Homeassistant im Einsatz, dachte es reicht Edomi, MQTT, Node Red und Alexa und dann noch Influx und Grafana. Wird echt ein ganz schöner Zoo
        Zuletzt geändert von Sargon; 13.11.2022, 19:22.

        Kommentar


          #5
          Zitat von ThorstenGehrig Beitrag anzeigen
          "actionable notifications"
          Zitat von ThorstenGehrig Beitrag anzeigen
          Ist aber recht kompliziert
          Das stimmt.

          Zitat von ThorstenGehrig Beitrag anzeigen
          und derzeit nur für Homeassistant umgesetzt...
          Das allerdings nicht (mehr)
          Für EDOMI ist es inzwischen auch umgesetzt

          Kommentar


            #6
            das.... macht neugierig :-)

            Kommentar


              #7
              Zitat von ThorstenGehrig Beitrag anzeigen
              das.... macht neugierig :-)
              Man kann quasi die Alexa-Seite (den Custom Skill) von Home Assistant weiterverwenden, muss die beiden URLs anpassen.
              In EDOMI muss man dann OAuth2-Server integrieren und der Alexa Control LBS hat zwei neue Eingängen. Einen Eingang, an dem man die Skill-ID des Custom Skills angibt der getriggert wird und einen Trigger Eingang, den man mit ID|Text triggert. Die ID wird verwendet, um später die Antwort zuzuordnen und der Text ist das, was Alexa sagt, wenn der Skill getriggert wird.
              Für die Antwort legt man ein iKO an, welches dann als Remote iKO freigegeben wird und dann bei Empfang der Antwort vom Skill beschrieben wird. Das kann man dann in der EDOMI Logik auswerten und darauf reagieren.

              Beispiel:
              Wenn die Garage länger als 10 Minuten offen steht, dann am Alexa Control LBS der neue Triggereingang mit folgendem String getriggert:

              garage_offen|Die Garage ist länger als 10 Minuten offen. Soll ich sie schließen?

              Dies triggert den Custom-Skill, dieser holt sich den Text und die ID.
              Dann stellt Alexa die Frage.
              Der Nutzer antwortet mit "Ja"
              Der Skill sendet: {"event_id": "garage_offen", "event_response": "ResponseYes", "event_response_type": "ResponseYes"} an ein PHP Skript auf dem EDOMI Server, welche dieses JSON dann per HTTP-Get in das Remote iKO schreibt.

              Das Remote-iKO wird dann mit dem JSON Extractor ausgewertet und triggert schließlich das Schließen der Garage.

              Ich denke Home-Assistant macht dies exakt genauso, außer dass dort die HA-API verwendet wird. Man könnte den Custom Skill natürlich auch anpassen, so dass der Skill direkt die EDOMI Remote API verwendet, aber durch das Wrapper PHP Skript ist es aus meiner Sicht sicherer, da man nur dieses eine Skript und die OAuth2 API nach extern bereitstellen muss.

              Macht das Sinn?

              Falls allgemeines Interesse besteht, dann kann ich das mal dokumentieren. Für die Alexa Seite (Custom Skill) gibt es ein gutes YT Video, da würde ich dann nur die Änderungen beschreiben.


              Kommentar


                #8
                Hier mal eine erste Plain Text Doku zu dem Thema. Wichtig ist, dass als erstes der Reverse Proxy korrekt funktioniert (Schritt 1). Die Einrichtung eines RevProxy habe ich nicht mehr detailliert dokumentiert, da dies ja bereits mehrfach hier im Forum gemacht wurde und auch in manchen LBS Dokus enthalten ist. z.B. im 19001201.
                Wer es erfolgreich bis einschließlich Schritt 4 geschafft, kann mir gerne hier im Thread eine Rückmeldung geben, denn das im Schritt 5 notwendige Archiv ist noch nicht fertig und auch der Alexa Control LBS v3.0 ist noch nicht im DL Portal verfügbar.

                Fragen, Kommentare und Korrekturen natürlich auch gerne hier im Thread.

                Code:
                #
                # Voraussetzungen:
                # ================
                #     * Amazon Account mit Alexa Echo Device
                #    * EDOMI mit funktionsfähigem Alexa-Control-LBS
                #    * Erreichbarkeit des EDOMI-Servers aus dem Internet via Reverse Proxy (EDOMI selbst muss nicht erreichbar sein, sondern der apache Webserver)
                #
                # 1. Reverse-Proxy
                #        https://<EDOMI-DNS-Name>/alexa muss aus dem Internet erreichbar sein (gültiges SSL Zertifikat ist notwendig, z.B. letsencrypt)
                #         Diese URL muss intern auf /usr/local/edomi/www/admin/include/php/alexa-actions auf dem EDOMI Server verlinkt sein.
                #       Zusätzlich muss https://<EDOMI-DNS-Name>/auth auf /usr/local/edomi/www/admin/include/php/alexa-actions/oauth2 verlinkt sein.
                #         Dies erreicht man über einen Reverse-Proxy (apache oder nginx) => Detaillierte Anleitungen sind im EDOMI Forum zu finden (z.B. in der Doku zum LBS 19001201)
                #
                #        Wenn man schon einen funktionsfähigen Rreverse Proxy vor EDOMI hat, dann reichen vermutlich folgende Ergänzungen im RevProxy Konfigurationsfile
                #        (gilt nur für apache; bei nginx sieht das anders aber ähnlich aus):
                #
                #        ProxyPass /auth http://edomi-test.feld.home/admin/include/php/alexa-actions/oauth2
                #        ProxyPassReverse /auth http://edomi-test.feld.home/admin/include/php/alexa-actions/oauth2
                #        ProxyPass /alexa http://edomi-test.feld.home/admin/include/php/alexa-actions
                #        ProxyPassReverse /alexa http://edomi-test.feld.home/admin/include/php/alexa-actions
                #
                #         Funktion testen:
                #        Zuerst legt man auf dem EDOMI Server die notwendigen Verzeichnisse an:
                #
                mkdir -p /usr/local/edomi/www/admin/include/php/alexa-actions/oauth2
                #
                #        Dann legt man eine Datei mit dem Namen phpinfo.php im Verzeichnis /usr/local/edomi/www/admin/include/php/alexa-actions an und fügt folgende Zeile ein:
                #            <?php phpinfo(); ?>
                #        Diese Datei kopiert man auch ins oauth2 Unterverzeichnis.
                #          Wenn der Reverse Proxy korrekt konfiguriert ist, sollte man aus dem Internet folgende Seiten aufrufen können
                #            https://<EDOMI-DNS-Name>/alexa/phpinfo.php
                #            https://<EDOMI-DNS-Name>/auth/phpinfo.php
                #        Wenn beides funktioniert, dann läuft der Reverse Proxy korrekt.
                #        Erst dann mit Schritt 2 weitermachen!!!
                #
                # 2. Alexa Custom Skill gemäß https://www.youtube.com/watch?v=uoifhNyEErE anlegen
                #
                # 3. Spezifische Anpassungen im Alexa Custom Skill für EDOMI:
                #         - Name des Skills ist grundsätzlich beliebig. Ich habe ihn "EDOMI Actionable Notification" genannt
                #        - Im Build-Tab des Skills sind im Vergelich zum Video folgende Änderungen zu machen:
                #            Tools => Account Linking
                #                Your Web Authorization URI: https://<EDOMI-DNS-Name>/auth/authorize.php
                #                Access Token URI: https://<EDOMI-DNS-Name>/auth/token.php
                #                Your Secret: <beliebiges Passwort> (wird auch später bei der OAUTH2 Konfiguration verwendet
                #        - Im Code-Tab des Skills sind im Vergelich zum Video folgende Änderungen zu machen:
                #            lambda_function.py
                #                Zeile 5:    HOME_ASSISTANT_URL = 'https://<EDOMI-DNS-Name>'
                #                Zeile 44:     INPUT_TEXT_ENTITY = "input_text.alexa_actionable_notification.php"
                #                Zeile 123:  f'{HOME_ASSISTANT_URL}/alexa/{INPUT_TEXT_ENTITY}',
                #                Zeile 185:    f'{HOME_ASSISTANT_URL}/alexa/alexa_actionable_notification.php',
                #                Man kann optional jedes Vorkommen von "home assistant" in strings ersetzen durch EDOMI. (ändert nichts an der Funktion, bietet aber neues Risiko etwas kaputt zu machen. :))
                #            language_strings.json (optional)
                #                Wer mag, kann hier an allen Stellen den String "home assistant" durch EDOMI ersetzen.
                #            Alle anderen Dateien können unverändert gemäß YT Video übernommen werden.
                #            Nach Änderungen im Code-Tab müssen diese immer mit "Save" und "Deploy" angewendet werden.
                #
                # 4. Jetzt sollte der Skill und die Reverse-Proxy Konfiguration fertig sein.                    
                #     Der Skill sollte in der Alexa App unter Mehr=>Skills und Spiele=>Ihre Skills=>(nach rechts scrollen)Entwickler
                #     Es wird allerdings noch "Kontoverknüpfung erforderlich" angezeigt. Diese Verknüpfung kann erst dann gemacht werden, wenn die nun folgenden Installationen/Konfigurationen auf dem EDOMI Server erfolgt sind.
                #
                # 5. Neue Version 3.0 des Alexa-Control-LBS 19000809 installieren und die im ZIP File enthaltene Datei alexa-actions-for-edomi.tar.gz nach /tmp auf dem EDOMI Server kopieren
                #
                # 6. Folgende Befehle auf dem EDOMI Server ausführen:
                #
                mkdir -p /tmp/alexa-actions
                cd /tmp/
                tar xvfz alexa-actions-for-edomi.tar.gz​ -C alexa-actions​
                cd /tmp/alexa-actions
                mkdir -p /usr/local/edomi/www/admin/include/php/alexa-actions/oauth2
                cd /usr/local/edomi/www/admin/include/php/alexa-actions/
                cp -a /tmp/alexa-actions/* .
                cd oauth2
                git clone https://github.com/bshaffer/oauth2-server-php.git -b master
                mysql -u root -e "CREATE DATABASE oauth2"
                mysql -u root -p oauth2 < oauth.sql
                mysql -u root -e "insert into oauth2.oauth_scopes (scope) values ('smart_home');"
                # Im folgenden mysql-Befehl müssen die Werte in <> durch die Werte aus der Account Linking Seite des Skills in der Alexa Developer Console ersetzt werden.
                # Als Alexa Redirect URL sollte die URL verwendet werden, welche mit dem String der Client-ID beginnt.
                # Das Client Secret ist nur bei der Ersteingabe sichtbar und sollte daher bei der Eingabe (s.o) notiert werden, damit es im folgenden Befehl eingegeben werden kann.
                # Ist das Client Secret nicht mehr bekannt, dann muss es neu gesetzt werden.
                #
                mysql -u root -e "insert into oauth2.oauth_clients (client_id, client_secret, redirect_uri) values ('<CLIENT-ID>','<CLIENT-SECRET>','<ALEXA_REDIRECT_URL')"
                #
                ​# 7. Response iKO anlegen
                #     In EDOMI  eine neues iKO z.B. mit dem Namen "AlexaActionResponse" anlegen und dieses iKO für den Fernzugriff freigeben (EDOMI Admin=>Konfiguration=>Fernzugriff).
                #     Die ID dieses iKO notieren.
                #
                # 8. Datei alexa_actionable_notification.php anpassen:
                #
                nano /usr/local/edomi/www/admin/include/php/alexa-actions/alexa_actionable_notification.php
                #    Zeile 2: hier die lokale Edomi-URL eintragen. Eigentlich sollte hier 'http://localhost' ausreichen
                #   Zeile 3-5: Den EDOMI Remote User, Remote Passwort und die iKO-ID aus Schritt 7 eintragen
                #
                # 9. Skill ID im Alexa Control LBS eintragen
                #     Alexa developer console aufrufen und auf der Übersichtsseite aller Skill, beim neue angelegten Skill auf "Skill-ID kopieren" klicken. (Auch im Video beschrieben)
                #     Diese ID kann dann an E56 des LBS eingetragen werden.
                #     Auf der Seite des Alexa Control LBS fügt  man am besten noch eine Klemme ein, an der man dann an E1 das AlexaActionResponse iKO (s.o.) verknüpft.
                #     Damit kann man beim Testen (Schritt 12) direkt sehen, ob eine Antwort angekommen ist.
                #
                # 10. EDOMI Projekt aktivieren
                #
                # 11. Kontoverknüpfung in der ALexa App
                #       Alexa App auf dem telefon starten => Mehr => Skills und Spiele => Meine/Ihre Skills => (nach rechts wischen) => Entwickler
                #      Auf den neuen Skill "EDOMI Actionable Notification" klicken.
                #       "Zur Verwendung aktivieren" klicken
                #      Es erscheint eine Seite, ob man den Skill autorisieren will. Dort auf YES klicken.
                #      Danach sollte die Bestätigung kommen, dass die Verknüpfung mit dem Konto erfolgreich verlaufen ist.
                #
                # 12. Damit sollte die Installation beendet sein und man kann über den Eingang E55 einen ersten Test machen.
                #      Dazu an E55 in der Liveansicht z.B. folgenden String eingeben:
                #
                #        LichtID|Soll ich das Licht ausmachen?
                #
                #      Wenn alles korrekt installiert wurde, dann sollte der Echo, für den der Alexa Control LBS konfiguriert ist, die Frage stellen.
                #      Man kann nun mit Ja, Nein oder gar nicht antworten (timeout).
                #       Danach sollte das Ergebnis (d.h. die gegebene Antwort) im AlexaActionResponse iKO stehen, welches durch drücken des Buttons "Liveansicht 1" an der oben eingefügten Klemme sichtbar sein sollte.
                #
                # 13. Logfiles für die Fehlersuche:
                #
                #        Alexa Developer Console: => Skill => Code => CloudWatch Logs (richtige Zone wählen! Die Zone in der der Skill deployed wurde)
                #        RevProxy: Logs des Webservers, Apache: /var/log/apache2/access.log und /var/log/apache2/error.log
                #        EDOMI Webserver: /var/log/https/access.log und /var/log/https/error.log
                #        EDOMI LBS: CUSTOMLOG_Alexa_Actions.log und CUSTOMLOG_Alexa_Control-LBS19000809-<ID>.<log|htm>
                #​​
                Zuletzt geändert von jonofe; 22.11.2022, 10:28.

                Kommentar


                  #9
                  Sehr schöne Sache jonofe, wie immer!
                  Ich bin soweit problemlos bis Schritt 4 gekommen.
                  Allerdings zeigt mir die Developer Console nach dem einfügen des "interaction models" im JSON Editor einen "Utterance Conflict".
                  Hast Du hier den Inhalt von locale_en_us.json oder locale_de_de.json​ genommen?

                  Edit: Sehe gerade erst, dass der Inhalt beider Dateien gleich ist, dann sollte das ja nicht durch einen evtl. Unterschied zustande kommen...
                  Hast Du den Fehler denn auch?
                  Zuletzt geändert von Glotzkowski; 17.11.2022, 19:09.

                  Kommentar


                    #10
                    Zitat von Glotzkowski Beitrag anzeigen
                    Sehr schöne Sache jonofe, wie immer!
                    Ich bin soweit problemlos bis Schritt 4 gekommen.
                    die typischen Verdächtigen wieder ...

                    Okay, super, dann werd ich morgen die Dateien zusammenpacken und dir nen DL-Link senden.​

                    Zitat von Glotzkowski Beitrag anzeigen
                    Allerdings zeigt mir die Developer Console nach dem einfügen des "interaction models" im JSON Editor einen "Utterance Conflict".
                    Ja den hab ich auch und einfach ignoriert.

                    Kommentar


                      #11
                      Zitat von jonofe Beitrag anzeigen
                      Okay, super, dann werd ich morgen die Dateien zusammenpacken und dir nen DL-Link senden.​
                      Die Daten würden mich auch interessieren...

                      Danke für deine Mühen und ein schönes WE.

                      Kommentar


                        #12
                        Zitat von madmaxx Beitrag anzeigen
                        Die Daten würden mich auch interessieren...
                        Hast du denn das vierte Türchen schon aufgemacht?

                        Kommentar


                          #13
                          Toll!!
                          Ich denke ich muss am Wochenende mal Advenskalender-Türchen aufmachen :-)

                          Kommentar


                            #14
                            Zitat von jonofe Beitrag anzeigen
                            Hast du denn das vierte Türchen schon aufgemacht?
                            Sperrangelweit... 😉
                            War selbst für mich als Unkundigen nicht sonderlich schwer, da super dokumentiert. Wer den 19001200 zum laufen bekommt, schafft auch den...zumindest bis zu Schritt 4. Mit der Anleitung unter https://github.com/keatontaylor/alex...ki/CustomSkill kommt man mE schneller zum Ziel als mit dem Video.

                            Falls noch Zweifel bestehen 😎

                            Screenshot_20221119_010106_Amazon_Alexa[1].jpg
                            Zuletzt geändert von madmaxx; 19.11.2022, 01:17.

                            Kommentar


                              #15
                              Ich würde hier nur ne Kleinigkeit in der Anleitung ändern, da in Schritt 5 nach /tmp kopiert wird und im Ordner /tmp/alexa-actions kein .tar.gz vorhanden ist
                              Zitat von jonofe Beitrag anzeigen
                              # 6. Folgende Befehle auf dem EDOMI Server ausführen:
                              #
                              mkdir -p /tmp/alexa-actions
                              cd /tmp/alexa-actions
                              tar xfvz alexa-actions-for-edomi.tar.gz
                              cd /tmp/
                              tar -xvf alexa-actions-for-edomi.tar.gz​ -C alexa-actions

                              In Schritt 11 bekomme ich ne Anmeldeseite von EDOMI und muss die Daten vom EDOMI-Admin eingeben, was dann auch funktioniert.

                              Irgendwo hab ich aber noch nen Fehler, da beim Setzen von E55 des neuen LBS mit "561|Soll ich das Licht ausmachen?"
                              auf dem nginx-Reverseproxy folgendes auftaucht aber der Echo Dot sagt, dass bei der Antwort des angeforderten Skill ein Problem aufgetreten ist.

                              Code:
                              54.240.197.106 - - [19/Nov/2022:09:08:37 +0000] "POST /edomi/auth/token.php HTTP/1.1" 200 111 "-" "Apache-HttpClient/UNAVAILABLE (Java/1.8.0_312)"
                              Ich suche noch nach der Ursache, hast Du hier einen heißen Tip?

                              Edit:

                              CloudWatch Meldung
                              Code:
                              [ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'prompts'
                              Traceback (most recent call last):
                              Hast Du diese Fehler auch oder wird dies evtl. das Problem sein?
                              Zuletzt geändert von Glotzkowski; 19.11.2022, 10:45.

                              Kommentar

                              Lädt...
                              X