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

  • deRainer
    antwortet
    Hallo Jonofe,
    Danke für die Antwort und den hilfreichen Hinweis das die Geräte in der Alexa App nochmal gesucht werden müssen. Das erklärt warum sich manchmal nach einer Änderung was geändert hat und manchmal nicht. Wahrscheinlich habe ich aus Zufall manchmal neue Geräte gesucht und dann hat sich was geändert...

    Leider funktioniert es aber immer noch nicht.
    - Habe die augenscheinlich richtigen Eintragung im lbs (Open=0 und Close=100),
    - LBS erneut in Edomi geladen
    - Projekt aktiviert
    - Gerät in Alexa gelöscht
    - neue Geräte gesucht

    Trotzdem funktioniert öffnen/schließen richtig und rauf/runter ist verkehrt rum.

    "Alexa, schließe Jalousien Arbeitszimmer" liefert an E1 des Smarthome Device:

    PHP-Code:
    {"directive":{"header":{"namespace":"Alexa.RangeController","name":"SetRangeValue","payloadVersion":"3","instance":"Blind.Lift","messageId":"e4123ad6-9871-473f-94f2-XXXXX"},"endpointId":"IP_1XX_1XX_1XX_XX-ID_1308","cookie":[]},"payload":{"rangeValue":100}},"type":"smarthome","queue":41603445
    Am A24 des SmartHome Device kommt dann eine 100, somit fährt der Rolladen runter:
    Die Response an A31 sieht so aus:

    PHP-Code:
    {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Lift","name":"rangeValue","value":100,"timeOfSample":"2021-01-09T19:45:15Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"e48c3f91-5a4d-47b3-b28d-XXXX"},"endpointId":"IP_1XX_1XX_1XX_XX-ID_1308"},"payload":{}}} 

    "Alexa, fahre Jalousien Arbeitszimmer runter" liefert an E1 des SmartHome Device

    PHP-Code:
    {"directive":{"header":{"namespace":"Alexa.RangeController","name":"AdjustRangeValue","payloadVersion":"3","instance":"Blind.Lift","messageId":"fe870421-472d-4567-a67e-XXXXX"},"endpointId":"IP_192_1XX_1XX_XX-ID_1308","cookie":[]},"payload":{"rangeValueDelta":1,"rangeValueDeltaDefault":false}},"type":"smarthome","queue":693458410
    Am A24 des SmartHome Device kommt dann eine 0, somit fährt der Rolladen hoch:
    Die Response an A31 sieht so aus:

    PHP-Code:
    {"context":{"properties":[{"namespace":"Alexa.RangeController","instance":"Blind.Lift","name":"rangeValue","value":0,"timeOfSample":"2021-01-09T19:36:07Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"8ffa6be7-d814-4d9f-81f4-..XXXXXX"},"endpointId":"IP_192_XXX_XXX_XXX-ID_1308"},"payload":{}}} 

    Es sieht also so aus, das der Fall "runter" nicht im LBS in den "SetRangeValue" läuft, sondern in den "AdjustRangeValue"... Ist das richtig?
    Aber wenn nein, wie ändere ich das???

    Hab auch nochmal ein Bild der Logik angehängt. Vielleicht habe ich ja nur irgendwo einen falschen Eintrag...
    Rollade Arbeitszimmer.JPG
    Vielen Dank für eure Bemühungen!

    Rainer

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Bei Open muss 0 stehen und bei Close 100.

    Nach Änderung der Werte im LBS Code musst du die LBS neu einlesen und das Projekt neu aktivieren.
    Zur Laufzeit kannst/solltest du keine Änderungen vornehmen. Wenn es Daemon LBS sind, werden sie ohnehin bei Aktivierung des Projekts gestartet und die Änderung bringt nichts und auch sonst würde eine Änderung im live Verzeichnis von EDOMI bei der nächsten Aktivierung wieder überschrieben werden.
    Wenn du die Werte wie oben geändert hast, dann sind auch keine Änderungen mehr notwendig, denn so ist es richtig.

    Außerdem musst du die Devices neu discovern: "Alexa, finde meine smarten Geräte", denn du hast ja im Code der "Discovery Response" Einstellungen geändert.
    Danach sollte es dann auch korrekt funktionieren. Ggf. musst du die relevanten Devices vorher in der Alexa App löschen, ich weiss gerade nicht aus dem Kopf, ob er diese Änderungen automatisch updated. Die Wahrscheinlichkeit ist aber hoch, dass eine einfach Devicesuche ausreicht.

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Ja natürlich.
    Habe ich nicht mit aufgeschrieben, mache ich aber immer.

    Könnte ich die Werte eigentlich auch "online" im LBS unter /usr/local/edomi/www/admin/lbs über z.B. WinSCP ändern?
    Werden die LBS beim Durchlauf der Logik immer neu aufgerufen, oder werden die bei EDOMI Start eingelesen und Änderungen hier bringen im laufenden Betrieb nichts?

    Wenn man die online ändern konnte, könnte ich da in meinem Fall "schneller mal die Werte ändern".

    Einen Kommentar schreiben:


  • woda
    antwortet
    LBS neu einlesen + Projekt neu aktivieren

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Ich bräuchte doch auch nochmal Hilfe von euch Experten...
    Soweit habe ich die Einbindung gut hin bekommen, allerdings funktionieren die Befehle rauf/runter öffnen/schließen für die Rolläden immer noch nicht so wie sie sollen.
    Habe schon die Änderungen aus Beitrag #839 probiert aber das ändert irgendwie nichts.

    Bei mir funktioniert öffnen/schließen richtig, rauf/runter ist aber verdreht ("Alexa, fahre Rolladen Arbeitszimmer runter" -> Rolladen fährt rauf)
    Bei mir ist aber auch 100% (oder 255) = unten.
    Alexa schickt bei "runter" aber eine 0, also fährt die Rollade nach oben...

    Wenn ich die Werte im lbs lt. Beitrag #839 ändere, muss ich doch nur den lbs erneut in Edomi einlesen, oder?
    Die Datei "edomi-smarthome-skill-PLv3.php" hat doch damit nichts zu tun, oder?

    Habe schon alle Kombinationen im lbs 19001200 unter Range.Controller durch. Aktuell steht folgendes drin.

    PHP-Code:
    } elseif ($interface == 'Alexa.RangeController') {
    if (
    $capability['RangeControllerType'] == 'blind') {
    $json['instance'] = 'Blind.Lift';
    $json['properties'] = array();
    $json['properties']['supported'] = array();
    $json['properties']['proactivelyReported'] = ($device['proactive'] ? true false);
    $json['properties']['retrievable'] = ($device['retrievable'] ? true false);
    foreach (
    $capability['properties'] as $property)
    $json['properties']['supported'][] = array(
    'name' => $property
    );
    $json['capabilityResources'] = [];
    $json['capabilityResources']['friendlyNames'] = array(
    array(
    '@type' => 'asset',
    'value' => array(
    'assetId' => 'Alexa.Setting.Opening'
    )
    )
    );
    $json['configuration'] = array(
    'supportedRange' => array(
    'minimumValue' => 0,
    'maximumValue' => 100,
    'precision' => 1
    ),
    'unitOfMeasure' => 'Alexa.Unit.Percent'
    );
    $json['semantics'] = array(
    'actionMappings' => array(
    array(
    '@type' => 'ActionsToDirective',
    'actions' => array(
    'Alexa.Actions.Open'
    ),
    'directive' => array(
    'name' => 'SetRangeValue',
    'payload' => array(
    'rangeValue' => 0
    )
    )
    ),
    array(
    '@type' => 'ActionsToDirective',
    'actions' => array(
    'Alexa.Actions.Close'
    ),
    'directive' => array(
    'name' => 'SetRangeValue',
    'payload' => array(
    'rangeValue' => 100
    )
    )
    ),
    array(
    '@type' => 'ActionsToDirective',
    'actions' => array(
    'Alexa.Actions.Raise'
    ),
    'directive' => array(
    'name' => 'AdjustRangeValue',
    'payload' => array(
    'rangeValueDelta' => - 1,
    'rangeValueDeltaDefault' => false
    )
    )
    ),
    array(
    '@type' => 'ActionsToDirective',
    'actions' => array(
    'Alexa.Actions.Lower'
    ),
    'directive' => array(
    'name' => 'AdjustRangeValue',
    'payload' => array(
    'rangeValueDelta' => 1,
    'rangeValueDeltaDefault' => false
    )
    )
    )
    ),
    'stateMappings' => array(
    array(
    '@type' => 'StatesToValue',
    'states' => array(
    'Alexa.States.Closed'
    ),
    'value' => 100
    ),
    array(
    '@type' => 'StatesToRange',
    'states' => array(
    'Alexa.States.Open'
    ),
    'range' => array(
    'minimumValue' => 0,
    'maximumValue' => 99
    )
    )
    )
    );
    logging($id'RangeController-JSON:'json_encode($json));
    }
    } else { 


    Habe ich was übersehen???

    Ändern diese Werte im Range.Controller denn beide Befehle? Für öffnen/schließen und rauf/runter?

    Gibt es noch eine andere Schraube an der ich drehen kann/muss?

    Dank und Gruß

    Rainer

    Einen Kommentar schreiben:


  • andreas84
    antwortet
    Hallo Rainer,

    ich denke ich habe zumindest das Problem gefunden. Scheinbar habe ich vom Provider keine öffentliche ip sondern eine private IP (100.xxx.xxx.xxx) in der Fritzbox, die dann abgelehnt wird. Aber schonmal vielen Dank für deine Hilfe. Vieleicht finde ich ja noch etwas raus.

    Andreas

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Hallo Andreas,
    ich bin da jetzt nicht so der Experte...
    Nur zum Verständnis. Wenn du http://<Deine DynDNS> von EXTERN aufrufst, landest du auf der NGINX Startseite vom Raspberry?
    Wenn ja, sollte die DynDNS Konfiguration, die Portweiterleitung in der Fritzbox und der NGINX Server richtig laufen. Da liegt der Fehler woanders und wir müssen nochmal überlegen.
    Wenn du nicht den NGINX Server erreichst, würde ich mal die Kette DynDNS Konfiguration -> Fritzbox Portweiterleitung -> NGINX Server, Schritt für Schritt durchgehen.

    Evtl. hat einer der Experten hier noch einen Tip...

    Rainer



    Einen Kommentar schreiben:


  • andreas84
    antwortet
    Hallo Rainer,

    habe es gestern nochmal neu aufgesetzt. Habe einen raspberry mit der letzten buster lite version.

    Dort habe ich alle Punkte entsprechend der pdf Anleitung vorgenommen.

    letsencrypt habe ich nicht installiert, da certbot-auto nicht funktionierte. Ich hatte alternativ certbot installiert entsprechend der certbot seite.

    Wenn ich sudo certbot --nginx mache kommt entsprechend immer der Fehler, dass die http-01 challange nicht funktionierte. Die Seite https://letsdebug.net/ bringt bei http-01 auch einen Fehler. Bei DNS-01 klappt es. Ich weiß aber nicht ob man das ggf. bei certbot ändern kann.

    In der Fritzbox habe ich die Portweiterleitung TCP für 443 und 80 freigegeben. --> ich komme auch auf die Trotzdem kommt der Fehler. Gibt es hier ggf. noch etwas bei der Fritzbox zu beachten?

    Vieleicht habt ihr ja noch eine Idee? Ich würde mich in jedem Fall freuen.

    Viele Grüße

    Andreas

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Hallo andreas84,

    installierst du Certbot mit der automatischen Serveranpassung?
    sudo certbot --nginx

    Habe in meiner Anleitung stehen, dass man kurzfristig den http Port (80) für den Pi öffnen muss, damit die Zertifikatserstellung funktioniert.
    Gruß

    Rainer

    Einen Kommentar schreiben:


  • andreas84
    antwortet
    Hallo, ich habe es mit dig probiert, hier bekomme ich eine Antwort und sehe auch meine korrekte IP, die beiden Ports habe ich freigegeben und habe es auch mit http und https probiert. Leider bisher ohne erfolg.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Funktioniert denn der DNS Service auf deinem Reverse Proxy? (nslookup xx.goip.de)
    Hast du Port 80 und 443 in deinem Router auf den ReverseProxy weitergeleitet?

    Einen Kommentar schreiben:


  • andreas84
    antwortet
    Hallo, leider scheitere ich im Moment am reverseproxy. Certbot gibt mir als Fehler zurück "No valid IP addresses found for xx.goip.de"; per Broweser kann ich die Website des nginx Server jedoch erreichen. Hatte von euch auch jemand bereits diesen Fehler? Für einen Anschubbser in die richtige Richtung wäre ich sehr dankbar.

    Vielen Dank und viele Grüße Andreas

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Ich schwör ich habe es schon vorher versucht, aber anscheinend hat ein erneutes eingeben von

    curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/cacert.pem

    Mein Problem gelöst...
    Jetzt konnte ich den Skill aktivieren und mein erstes Testdevice schalten!
    Danke nochmal für die gute Anleitung!

    Ich habe übrigens die Vorgehensweise für den Raspberry mit Raspberry PI OS lite und Certbot für mich dokumentiert. Wenn das jemand haben möchte, oder es gar jemand in die offizielle Anleitung mit aufnehmen möchte, würde ich mich geehrt fühlen, dies beizusteuern!

    Dank und Gruß

    Rainer

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    Trotzdem ich mich die letzten 4 Tage intensiv mit dem Thema beschäftigt habe, kriege ich es nicht hin
    Glaube ich bräuchte doch nochmal die Hilfe von den Experten hier...
    Mein Aktueller Stand:
    - Habe inzwischen den EDOMI Rechner (Fujitsu S900) auf CentOS7 upgedatet, EDOMI läuft weiterhin mit Version 2.02. Die aktuellsten LBS aus dem Downloadbereich sind in EDOMI eingebunden und verknüpft.
    - RaspberryPi als Reverse Proxy mit Apache2 läuft und Portweiterleitung ist aktiv. Ein Aufruf von extern auf https://<meine DynDNS>/edomi/phpinfo.php kommt an und zeigt mir die PHP Seite.
    Alexa Security Profil, Smarthome Skill und Lambda Funktion sind angelegt (alle nochmal komplett neu, nach aktuellster Beschreibung aus dem aktuellsten LBS).

    Leider bekomme ich immer noch nicht den Skill in der Alexa App aktiviert (auch nicht über den Browser).

    Das edomi-smarthome-skill-PLv3.log zeigt mir beim Versuch der Skill Aktivierung folgendes:

    PHP-Code:
    ##########################################
    ############ START OF COMMAND ############
    ##########################################

    Received (JSONEvent from alexa@amazon
    =========================================
    Array
    (
    [
    directive] => Array
    (
    [
    header] => Array
    (
    [namespace] => 
    Alexa.Authorization
    [name] => AcceptGrant
    [messageId] => 3c485a91-ee78-43f3-a493-84f8009d4765
    [payloadVersion] => 3
    )

    [
    payload] => Array
    (
    [
    grant] => Array
    (
    [
    type] => OAuth2.AuthorizationCode
    [code] => RHxlpKsXSIDSXyntiTqF
    )

    [
    grantee] => Array
    (
    [
    type] => BearerToken
    [token] => Atza|IwEBILmpYSjEJa2B-CDu1N4WfPx_HMB7UrW1W2HdN_q_ygHLyKqop6OMbuAMSNqMhsI MKzqLLcMwUWlNBzUBF11Ayjkv43k6uBabgmFmf2UfL7DB-ilaSD5VTJYr4C_fiDtOe6F29hkL1IbnsnF8ofJEUC2E3tjaq46 nijQZ7VdhvB_VOlAr5-r2XspEBT1eTvQqTFIGfWoELDwtNILSGXd-nbgZcq1WKOyZXNAoEp6vvTvMKhh_8JomLEK-26nKLlJepWfDZkXhSfjdW-B613C663pV7rMrS8E7yDVbyBike8n5ETm4RM2oIHhAE4sIsBWA nTVlg98O0JJmy9aYw7xR-dKTtdoReKwJkJJLbJWK6AhlzxIBhbd2bCX1H5Fc7A-uhL8
    )

    )

    )

    )

    Validation URLhttps://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IwEBILmpYSjEJa2B-CDu1N4WfPx_HMB7UrW1W2HdN_q_ygHLyKqop6OMbuAMSNqMhsI MKzqLLcMwUWlNBzUBF11Ayjkv43k6uBabgmFmf2UfL7DB-ilaSD5VTJYr4C_fiDtOe6F29hkL1IbnsnF8ofJEUC2E3tjaq46 nijQZ7VdhvB_VOlAr5-r2XspEBT1eTvQqTFIGfWoELDwtNILSGXd-nbgZcq1WKOyZXNAoEp6vvTvMKhh_8JomLEK-26nKLlJepWfDZkXhSfjdW-...H5Fc7A-uhL8
    JSON Validation Response:
    OAUTH Validattion Response:

    Source FAIL
    OAUTH Access Token invalid 
    Also irgendwie funktioniert der Token nicht...

    Ich habe schon Versucht die Lambda Funktion auf Python 3.6 umzustellen und die Änderungen aus Beitrag #552 in die PHP.ini einzubinden. Leider ändert das nichts an der Skill Aktivierung.

    Die Anpassung aus Beitrag #63 sind in meiner lbs Version auch bereits implementiert.


    Die $targets in der alexa-config-PLv3.php (IP und Port) habe ich nochmal kontrolliert mit den IPs und LBS. Die passen.

    Ein Hinweis noch:
    Als ich den Raspberry aufgesetzt habe, habe ich im Netz die Info gelesen, das Raspbian Lite nicht mehr supported wird und jetzt in Raspberry Pi OS Lite aufgegangen ist. Dieses habe ich auch installiert. Der nächste Haken ist Letsencrypt. Das funktioniert nicht mehr unter Raspberry PI OS.
    Das ganze funktioniert aber ganz gut mit Certbot und benutzt auch das letsencrypt Zertifikat. Die Pfadangaben für das Zertifikat und das Key file sind identisch zu denen in der Anleitung.
    Da externe Aufrufe über https://<meine DynDNS>/edomi/phpinfo.php ja auch ankommen würde ich das erstmal nicht als Problem ansehen... Da ich aber echt nicht der Experte bin, überlasse ich diese Beurteilung gerne den Experten hier.

    Hat jemand einen Tip für mich?
    Was kann ich noch kontrollieren
    Bin für jeden Hinweis dankbar!

    Gruß

    Rainer
    Zuletzt geändert von deRainer; 06.01.2021, 18:28.

    Einen Kommentar schreiben:


  • deRainer
    antwortet
    So, habe in den unendlichen Weiten meiner Speicherkapazitäten noch einen alten Download mit einer 0.7er Version des 19001200 gefunden. Den kann ich in Edomi importieren.
    Muss ich dann eigentlich auch die "alexa-config-PLv3.php" und die "edomi-smarthome-skill-PLv3.php" aus der entsprechenden Version 0.7 in den .../alexa Ordner auf Edomi laden, oder würden auch die Dateien aus der 0.8 Version funktionieren, oder gar besser sein, da neuer?

    Leider bekomme ich im Moment noch nicht den EDOMI Skill in Alexa aktiviert...
    Alexa aktivierung.JPG
    Damit muss ich mich morgen wohl weiter mit beschäftigen...

    Einen Kommentar schreiben:

Lädt...
X