Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Smarthome Skill (Payload Version 3)

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

    Zitat von jonofe Beitrag anzeigen
    Damit wir alle wieder von den gleichen Voraussetzungen ausgehen, habe ich mal alle aktuellen Files in der Version 0.5.1 hochgeladen.
    Auf Seiten Amazon hat sich nichts geändert, d.h. es reicht, die
    • alexa-config-PLv3.php zu checken und ggf. anzupassen
    • 19001200_lbs.php neu in EDOMI zu importieren
    • edomi-smarthome-skill-PLv3.php auf dem EDOMI Server zu ersetzen

    Danach habt ihr auf jeden Fall dieselbe Version wie ich, bei der die Skillaktivierung auch bei eingeschaltetem EventGateway funktioniert.

    Alles Aktualisiert, Aktivieren mit EventGateway geht jedoch nicht. Ich denke dass Liegt daran dass der Token immer ungültig ist.
    Ich habe die Daten in der Config nochmals geprüft, die stimmen alle.

    Werden die Daten als Cookies noch irgendwo gespeichert?


    Code:
    Received (JSON) Event from alexa@amazon
    =========================================
    Array
    (
        [directive] => Array
            (
                [header] => Array
                    (
                        [payloadVersion] => 3
                        [namespace] => Alexa.Discovery
                        [name] => Discover
                        [messageId] => 30050088-5384-4bfb-85f0-e492c03a2411
                    )
    
                [payload] => Array
                    (
                        [scope] => Array
                            (
                                [token] => (DELETED-Millo)
                                [type] => BearerToken
                            )
    
                    )
    
            )
    
    )
    
    Validation URL: (DELETED-Millo)
    RAW Message:
    JSON Validation Response: 
    OAUTH Validattion Response:
    
    
    Source    : FAIL
    OAUTH Access Token invalid

    Kommentar


      Das Log zeigt einen Alexa.Discovery Befehl, d.h. du hast nach neuen Geräten suchen lassen.
      Bei der Aktivierung sollte aber zuerst ein Alexa.Authorization kommen.

      Grundsätzlich geht es bei deinem Fehler um die Funktion:

      PHP-Code:

      function validate_token($token)
      {
          global 
      $user_id$client_id;
          
      $url "https://api.amazon.com/auth/O2/tokeninfo?access_token=" urlencode($token);
          
      logging("Validation URL: $url");
          
      //
          // validate token via CURL
          //
          
      $ch curl_init();
          
      $timeout 1;
          
      curl_setopt($chCURLOPT_URL$url);
          
      curl_setopt($chCURLOPT_RETURNTRANSFER1);
          
      curl_setopt($chCURLOPT_CONNECTTIMEOUT$timeout);
          
      curl_setopt($chCURLOPT_VERBOSE1);
          
      curl_setopt($chCURLOPT_HEADER1);
          
      $r curl_exec($ch);
          
      logging("RAW Message:" print_r($rtrue));
          
      $header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
          
      $header substr($r0$header_size);
          
      $json substr($r$header_size);
          
      curl_close($ch);
          
      logging("JSON Validation Response: $json"); 
      Diese wird mit dem Token aus deinem o.g. Log aufgerufen.
      Offensichtlich liefert die HTTPS Abfrage von

      Code:
      https://api.amazon.com/auth/O2/tokeninfo?access_token=" . urlencode($token)
      gar nichts zurück, was extrem seltsam ist. Zur Sicheheit mal folgendes machen:

      Code:
      yum update nss
      Das löst mögliche Probleme mit curl und https.

      Und dann in der o.g. Funktion mal das Timeout erhöhen:

      Code:
      $timeout = 3;
      Außerdem wäre das Log der Alexa.Authorization Commands interessant. Dieses wird bei Aktivierung des Skills gesendet, wenn die EventGateway Option aktiv ist. Kommt das überhaupt im Log an?

      Kommentar


        Hi Jonofe,
        danke - hab mal alle files aktualisiert.
        Etwas verwirrt hast du mich aber schon mit der eventgatewayregion: das ist jetzt in der alexa-config-PLv3.php - ich musste es aber in die eventGatewayConfig.php eintragen damit es funktioniert. Deine Aussagen dazu waren nicht ganz klar.
        Verstehe ich das richtig das es in der alexa-config-PLv3.php drin sein muss um dann bei der skill-aktivierung automatisch in die eventGatewayConfig.php übernommen zu werden?
        Gruß
        Thorsten

        Kommentar


          Zitat von ThorstenGehrig Beitrag anzeigen
          Verstehe ich das richtig das es in der alexa-config-PLv3.php drin sein muss um dann bei der skill-aktivierung automatisch in die eventGatewayConfig.php übernommen zu werden?
          Ja genau so ist das. Es gibt nur eine Config, in der man entwas ändern muss, das ist die alexa-config-PLv3.php.
          Wenn es da drin steht, dann sollte bei der Aktivierung des Skill die Datei eventGatewayConfig.php erzeugt werden und den Eintrag enthalten.
          Am besten du verschiebst die eventGatewayConfig.php vor der Aktivierung einfach mal woanders hin, dann siehst du auch, ob diese Datei neu erzeugt wird.

          Funktioniert denn bei dir die Aktivierung des Skills bei aktivierter EventGateway Option im Skill?

          Kommentar


            Hi
            getestet: jetzt funktioniert auch das aktivieren des Skills bei aktivierter EventGateway option im Skill.
            Wenn das EventGateway aktiviert ist und ich den skill aktiviere - wird auch die eventGatewayConfig.php erzeugt (mit eventGatewayRegion variable).
            SAUBER :-) Danke

            Gruß
            Thorsten

            Kommentar


              Zitat von ThorstenGehrig Beitrag anzeigen
              SAUBER :-) Danke
              Na also, super! Ich hatte schon Befürchtung irgendetwas vergessen zu haben.

              ThorstenGehrig Hast du eigentlich auch den "Alexa Last Active Echo Device LBS" im Einsatz? Bislang gabe es kaum Feedback, obwohl ich finde, dass dies ein echtes Killerfeature ist, beim Einsatz mehrerer Echo Devices.

              Kommentar


                Zitat von jonofe Beitrag anzeigen
                Das Log zeigt einen Alexa.Discovery Befehl, d.h. du hast nach neuen Geräten suchen lassen.
                Bei der Aktivierung sollte aber zuerst ein Alexa.Authorization kommen.

                Grundsätzlich geht es bei deinem Fehler um die Funktion:

                PHP-Code:

                function validate_token($token)
                {
                global 
                $user_id$client_id;
                $url "https://api.amazon.com/auth/O2/tokeninfo?access_token=" urlencode($token);
                logging("Validation URL: $url");
                //
                // validate token via CURL
                //
                $ch curl_init();
                $timeout 1;
                curl_setopt($chCURLOPT_URL$url);
                curl_setopt($chCURLOPT_RETURNTRANSFER1);
                curl_setopt($chCURLOPT_CONNECTTIMEOUT$timeout);
                curl_setopt($chCURLOPT_VERBOSE1);
                curl_setopt($chCURLOPT_HEADER1);
                $r curl_exec($ch);
                logging("RAW Message:" print_r($rtrue));
                $header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
                $header substr($r0$header_size);
                $json substr($r$header_size);
                curl_close($ch);
                logging("JSON Validation Response: $json"); 
                Diese wird mit dem Token aus deinem o.g. Log aufgerufen.
                Offensichtlich liefert die HTTPS Abfrage von

                Code:
                https://api.amazon.com/auth/O2/tokeninfo?access_token=" . urlencode($token)
                gar nichts zurück, was extrem seltsam ist. Zur Sicheheit mal folgendes machen:

                Code:
                yum update nss
                Das löst mögliche Probleme mit curl und https.

                Und dann in der o.g. Funktion mal das Timeout erhöhen:

                Code:
                $timeout = 3;
                Außerdem wäre das Log der Alexa.Authorization Commands interessant. Dieses wird bei Aktivierung des Skills gesendet, wenn die EventGateway Option aktiv ist. Kommt das überhaupt im Log an?
                Nss war aktuell, Timeout habe ich erhöht.
                Wenn ich den Token Link selbst aufrufe bekomme ich Werte zurück.
                Hier nochmal die Meldung aus der Log:


                Code:
                Received (JSON) Event from alexa@amazon
                =========================================
                Array
                (
                    [directive] => Array
                        (
                            [header] => Array
                                (
                                    [payloadVersion] => 3
                                    [namespace] => Alexa.Authorization
                                    [name] => AcceptGrant
                                    [messageId] => e548c7fc-419f-4735-aed5-217205299120
                                )
                
                            [payload] => Array
                                (
                                    [grantee] => Array
                                        (
                                            [token] => (DELEDED)
                                            [type] => BearerToken
                                        )
                
                                    [grant] => Array
                                        (
                                            [!code] => RHwQIimQzZhRXTxbPCFH
                                            [type] => OAuth2.AuthorizationCode
                                        )
                
                                )
                
                        )
                
                )
                
                Validation URL: (DELETED)
                RAW Message:
                JSON Validation Response:
                OAUTH Validattion Response:
                
                
                Source    : FAIL
                OAUTH Access Token invalid

                Musste das [!code] anpassen damit die Formatierung im Beitrag stimmt.

                Kommentar


                  Dann gehen mir so langsam die Ideen aus. Hast du den manuellen Aufruf der URL mal auf dem EDOMI Server gemacht?Ich kann mir nicht erklären warum da gar nichts zurück kommt.

                  Kommentar


                    Hi,
                    Zitat von jonofe Beitrag anzeigen
                    ThorstenGehrig Hast du eigentlich auch den "Alexa Last Active Echo Device LBS" im Einsatz? Bislang gabe es kaum Feedback, obwohl ich finde, dass dies ein echtes Killerfeature ist, beim Einsatz mehrerer Echo Devices.
                    Yeah! Natürlich ist er im Einsatz - und die Familie hat sich schlagartig daran gewöhnt den Raum nicht mehr zu nennen.
                    Funktioniert super - wobei wir nur ein/aus oder "direkte angabe des Zielwerts" verwenden - also nicht heller/dunkler ö.ä. (da würde es auch schwer werden).

                    In der Tat- ein Killerfeature (die google home devices haben sich jetzt in der dunklen Ecke versteckt...)

                    Einiziger Problemfall: ich habe 2 Kinder - kann aber nur 1 weiteres meinem Alexa-Haushalt hinzufügen.
                    Also habe ich einfach beim 2. Kind den Skill mit meinem Konto verknüpft. Ergebniss ist: alle dedizierten Alexa-Funktionen funktionieren - aber der "Last Active Echo" baustein liefert einen falschen Echo zurück... wohl weil der angesprochene Echo nicht Teil des offiziellen Haushalts ist.
                    Das ist Vertretbar... irgendwann schaue ich mir die Kommunikation aber nochmal an um zu sehen ob man nicht "ungültig" anstatt des falschen Echos zurückmelden kann...

                    Gruß
                    Thorsten

                    PS: Danke Prime day sind 3 weitere Echos sind gerade auf dem Weg zu mir: 2x Echo Show (einmal für die "elterliche gegenstelle") - und einen Show 5... der ist gerade so billig da musste noch einer zum Spielen mit in die Box :-)

                    Kommentar


                      Zitat von ThorstenGehrig Beitrag anzeigen
                      Yeah! Natürlich ist er im Einsatz - und die Familie hat sich schlagartig daran gewöhnt den Raum nicht mehr zu nennen.
                      Okay, gut zu hören.

                      Zitat von ThorstenGehrig Beitrag anzeigen
                      und einen Show 5
                      Zu mir sind auch zwei Echo Show 5 unterwegs. Der Preis ist wirklich gut. Insbesondere im Vergleich zum Echo Spot, den ich tendenziell wohl eher wieder verkaufen werde, da der Formfaktor für mich nicht wirklich nutzbar ist (zu klein und ein rundes Display ist insbesondere für Videos nicht wirklich hilfreich)

                      Zitat von ThorstenGehrig Beitrag anzeigen
                      Also habe ich einfach beim 2. Kind den Skill mit meinem Konto verknüpft.
                      Das wollte ich mir auch mal anschauen, insbesondere, weil mir meine Söhne meine Spotify Playlists damit ziemlich durcheinander bringen.
                      In dem Zuge schaue ich auch mal, was man da evtl. verbessern kann.

                      Kommentar


                        Hi
                        den Spot nutze ich als Radiowecker - dafür gefällt er mit... für mehr taugt er eher nicht.
                        Und Spotify ist genau der Grund warum meine Kinder eigene Alexa-Konten haben
                        Gruß
                        Thorsten

                        Kommentar


                          Da EDOMI 2.0 inzwischen auch unter CentOS7 mit PHP 7.2 läuft, habe ich dies zum Anlass genommen auch die Lambda Funktion auf Python 3.6 zu updaten.

                          Dazu muss in der Lambda Console bei AWS die Version der Lambda Funktion von Python 2.7 auf 3.6 umgestellt werden und danach das angehängte Deployment-ZIP hochgeladen werden. (Gerade gemerkt: Die Datei ist leider zu groß und kann nicht hier im Forum angehängt werden. Ich werde kurzfristig ein Update im DL Portal hochladen.)
                          Danach ist in der damit neu hochgeladenen Lambda Funktion die Konfiguration wieder herzustellen (hier in rot). Hier ist derselbe Eintrag zu verwenden, der auch vorher by Python 2.7 verwendet wurde. Also am besten vorher rauskopieren.

                          Code:
                          #
                          # Lambda function for EDOMI SmartHome Skill with PayLoad v3
                          # v.0.3 
                          #
                          import requests
                          import json
                          from pprint import pprint
                          
                          def lambda_handler(event, context):
                              print ('#### Starte EDOMI SmartHome Skill Handler ####')
                              print ('Event :')
                              pprint(event)
                          
                              #
                              # ONLY CHANGE URL IN NEXT LINE, NOTHING ELSE !!!
                              #
                              [COLOR=#FF0000][B]url = 'https://<SERVER.YOUR-DOMAIN.TLD>/<YOUR-PATH>/edomi-smarthome-skill-PLv3.php'[/B][/COLOR]
                              
                              headers = {"content-type": "application/json"}
                              data = json.dumps(event)
                              response = requests.post(url, headers=headers, data=data, verify=True, timeout=7)
                              
                              print ('Response:')
                              pprint (response.text)
                              return json.loads(response.text)
                          Danach sollte eigentlich alles wieder wie bisher funktionieren. Die Lambda Funktion sollte jetzt die Version 0.3 im Header haben.

                          Damit die SSL Certificate Validation weiterhin unter CentOS7 funktioniert müssen folgende Anpassungen in der /etc/php.ini gemacht werden:

                          Code:
                          curl.cainfo = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                          
                          openssl.cafile = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                          Ggf. ist noch ein

                          Code:
                          sudo yum update ca-certificates
                          notwendig.

                          Feedback natürlich wie immer gerne hier im Thread.

                          Kommentar


                            Hallo

                            Was muss ich alles ändern bzw. doppelt machen um ein weiteres Amazon Account zum bestehenden Setup hinzuzufügen? Muss ich den gesamten Setup parallel machen oder kann ich einen Teil übernehmen?


                            Gruss
                            Patrick

                            Kommentar


                              Eigentlich musst du so gut wie alles nochmal machen, aber darauf achten, dass du den Netzwerkpfad trennst:
                              - unterschiedlicher URLs in den Lambda functions aufrufen
                              - unterschiedliche Skill Skripts
                              - unterschiedliche Ports zwischen Skill-Skript und LBS verwenden
                              Ob das dann wirklich funktioniert kann ich nicht sagen, da ich es weder dafür ausgelegt noch jemals sowas getestet habe.

                              Kommentar


                                Hallo zusammen,

                                ich möchte nun gerne auf Payload 3 umsteigen und habe eine Verständnis Frage(n):
                                • muss ich den aktuellen Security Profile bei Amazon (Ich nutze noch den alten Edomi Smarthome Skill) vorher löschen oder komplett neu anlegen?
                                • selbe gilt für den aktuellen Alexa Skill und Lambda, soll ich komplett löschen und neu anlegen oder anpassen
                                Vielen Dank!

                                Kommentar

                                Lädt...
                                X