Ankündigung

Einklappen

Sammelbestellung ETS6 Vollversionen aktiv!

Sammelbestellung für ETS6 Vollversionen (Prof., Home, Lite) mit 40% Rabatt aktiv! Infos im Forum!
Mehr anzeigen
Weniger anzeigen

Alexa Smarthome Skill (Payload Version 3)

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

  • jonofe
    antwortet
    Zitat von momax Beitrag anzeigen
    Hast du vielleicht eine Ahnung was das sein könnte?
    Bist du auf CentOS7?
    Ich habe den LBS noch nicht auf PHP7.x migriert. Da könnte noch die ein oder andere Inkompatibilität drin sein.

    Einen Kommentar schreiben:


  • momax
    antwortet
    jonofe Hi Andre, sorry wenn ich wieder nerve aber bei jeden Alexa Befehl, bekomme ich ca 12 Fehlermeldungen und nach eine Weile bringt das LBS 19001201 Edomi zu kompletten Abstürz.
    Hast du vielleicht eine Ahnung was das sein könnte?
    Bei Bedarf kann ich mehr Infos nachliefern.

    Vielen Dank!

    Code:
     [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
     	 		[TR]
     			[TD]2019-10-04 18:11:43[/TD]
     			[TD]746174[/TD]
     			[TD]?[/TD]
     			[TD]19891[/TD]
     			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19001201.php | Fehlercode: 1 | Zeile: 227 | Cannot use string offset as an array[/TD]
     			[TD]FATALERROR[/TD]
     		[/TR]
     		[TR]
     			[TD]2019-10-04 18:11:44[/TD]
     			[TD]145844[/TD]
     			[TD]MAIN[/TD]
     			[TD]19700[/TD]
     			[TD]Prozess LOGIC läuft nicht mehr![/TD]
     			[TD]FATALERROR[/TD]
     		[/TR]
     		[TR]
     			[TD]2019-10-04 18:11:56[/TD]
     			[TD]220027[/TD]
     			[TD]MAIN[/TD]
     			[TD]23609[/TD]
     			[TD]ACHTUNG: EDOMI wurde unerwartet beendet![/TD]
     			[TD]ERROR[/TD]
     		[/TR]
     		[TR]
     			[TD]2019-10-04 18:12:01[/TD]
     			[TD]220846[/TD]
     			[TD]MAIN[/TD]
     			[TD]23609[/TD]
     			[TD]ACHTUNG: EDOMI wurde unerwartet beendet: FATALERROR in LBS 19001201 | EDOMI wird pausiert[/TD]
     			[TD]ERROR[/TD]
     		[/TR]
     		[TR]
     			[TD]2019-10-04 18:15:58[/TD]
     			[TD]503988[/TD]
     			[TD]?[/TD]
     			[TD]23760[/TD]
     			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19001201.php | Fehlercode: 8 | Zeile: 227 | Undefined index: directive[/TD]
     			[TD]ERROR[/TD]
     		[/TR]
     		[TR]
     			[TD]2019-10-04 18:15:58[/TD]
     			[TD]512171[/TD]
     			[TD]?[/TD]
     			[TD]23760[/TD]
     			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19001201.php | Fehlercode: 8 | Zeile: 227 | Undefined index: directive[/TD]
     			[TD]ERROR[/TD]
     		[/TR]
     	 [/TABLE]

    Einen Kommentar schreiben:


  • lordofchaos
    antwortet
    jonofe kannst du mir vielleicht nochmal helfen oder gerne auch wer anders. Ich bekomme es einfach nicht mit meinem Zertifikat hin. Jedesmal habe ich ein anderes Problem.
    Jetzt scheint die Erneuerung zu funktionieren aber das Datum zum ablaufen ändert sich nicht. Hatte dies vor 10 Tagen schonmal versucht und da hatte ich soviele Versuche gemacht bis ich nicht mehr konnte für den Tag. Nun ist das Zertifikat abgelaufen und ich habe es nochmal versucht. Hier das Protokoll

    Code:
    ./letsencrypt-auto certonly --standalone --rsa-key-size 4096 -d xxx.xxx
    Requesting to rerun ./letsencrypt-auto with root privileges...
    Upgrading certbot-auto 0.38.0 to 0.39.0...
    Replacing certbot-auto...
    Creating virtual environment...
    Installing Python packages...
    Installation succeeded.
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator standalone, Installer None
    Cert is due for renewal, auto-renewing...
    Renewing an existing certificate
    Running deploy-hook command: /etc/letsencrypt/renewal-hooks/deploy/01-reload-nginx
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/lxxx.xxx/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/xxx.xxx/privkey.pem
       Your cert will expire on 2019-10-02. To obtain a new or tweaked
       version of this certificate in the future, simply run
       letsencrypt-auto again. To non-interactively renew *all* of your
       certificates, run "letsencrypt-auto renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    Wieso soll mein Zertifikat noch immer am 02.10.2019 ablaufen. Sonst ist doch kein Fehler vorhanden? Ich verstehe das nicht.
    Vor 10 Tagen hatte ich diesen Befehl verwendet
    Code:
    sudo letsencrypt renew >> /var/log/letsencrypt-renew.log && /etc/init.d/nginx reload > /dev/null 2>&1

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Sollte keine Probleme geben. Musst halt nur aufpassen, dass du nicht dieselben Ports verwendest, um Skillskript und LBS zu verbinden. Und die Callback URL in der Lambda Function muss anders sein, aber das ist sie ja durch den Namen des Skillskripts ohnehin schon.

    Einen Kommentar schreiben:


  • momax
    antwortet
    Gibt es dann keine Konflikte wenn ich die PLv3 Skill Name "EDOMI_P3" nenne oder muss was beachten?
    PLv2 belegt bereits den Skill Namen EDOMI
    Danke wie immer für die schnelle Hilfe :-)

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Ich würde alles komplett neu anlegen.
    Hat auch den Vorteil, dass dir deine aktuelle funktionierende PLv2 Installation erstmal erhalten bleibt.

    Einen Kommentar schreiben:


  • momax
    antwortet
    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!

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


  • PaWi
    antwortet
    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

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    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

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    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 :-)

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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.

    Einen Kommentar schreiben:


  • millo
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X