alexa-fhem: amazon alexa smart home skill für fhem

Begonnen von justme1968, 05 November 2016, 23:21:32

Vorheriges Thema - Nächstes Thema

justme1968

achtung: für probleme bei der node installation oder beim port forwarding gibt es diesen thread: https://forum.fhem.de/index.php/topic,60452.0.html. hier geht es um alles andere.


wie im anderen thread angekündigt hier eine erst version eines alexa smart home skill für fhem.

die anleitung ist noch sehr stichpunkthaft und ich hoffe ich habe nichts vergessen. aber es schaut wirklich schlimmer aus als es am ende ist.

es wäre schön wenn jemand gleich eine wiki seite dafür auf macht und es vielleicht etwas ausführlicher beschreibt:

im wiki gibt es inzwischen eine bebilderte anleitung: https://wiki.fhem.de/wiki/Alexa-Fhem


0. voraussetzungen
  amazon echo oder echo dot :)
  node.js (vermutlich ab 0.12, getestet mi 4.2.6)
  die möglichkeit port 3000 auf dem rechner auf dem alexa-fhem läuft von aussen erreichbar zu machen

1. alexa-fhem installieren
  alexa-fhem-0.0.0.tgz auspacken
  package in alexa-fhem umbenennen
  cd alexa-fhem
  npm install
  ssl zertifikat mit ./createKey.sh erzeugen.
    -> password mindestens 4 stellen, alle fregen beantworten
  <home>/.alexa/config.json anpassen (siehe config-sample.json)
    filter funktioniert wie bei homebridge-fhem. siehe thread dort und wiki
  bin/alexa starten

2. port 3000 von aussen erreichbar machen

3. alexa smart home skill anlegen
  amazon developer account anlegen
  bei developer.amazon.com anmelden
  3.1 apps&services
    security profiles
      create a new security profile
      [save]
    login with amazon
      profil von eben auswählen
      consent url -> https://www.amazon.com/gp/help/customer/display.html?nodeId=468496
    security profiles
      web settings
        allowed return urls -> https://layla.amazon.co.uk/api/skill/link/<xxx>
                               https://pitangui.amazon.com/api/skill/link/<xxx>
                               https://layla.amazon.com/api/skill/link/<xxx>
          <xxx> aus 3.2 configuration -> account linking -> redirect urls


  3.2 alexa
    alexa skills kit get started
    add a new skill
      skill information
        type -> smart home skill api
        language -> german
        [next]
        [next]
      configuration
        europe -> arn:aws:lambda... (aus 4.)
        authorization url -> https://www.amazon.com/ap/oa
        client id -> (aus 3.1)
        scope -> profile:user_id
        access token uri -> https://api.amazon.com/auth/o2/token
        client secret -> (aus 3.1)
        privacy policy url -> https://www.amazon.com/gp/help/customer/display.html?nodeId=468496
        [next]
      test
        show this skill in the alexa app -> yes
        [save]

4. aws lambda funktion anlegen
  aws.amazon.com account anlegen
  an der aws konsole anmelden
  lambda auswählen
  rechts oben -> eu (ireland)
  create lambda function
    select blueprint
      filter -> alexa -> 'alexa-smart-home-skill-adapter'
    configure triggers
      aplication id -> amzn1.ask.skil... (aus 3.2 Skill Information)
      enable trigger -> ja
      [next]
    configure function
      name -> FHEM
      runtime -> Node.js 4.3
      edit code inline -> lambda.js einfügen, hostname (mein.host.name) anpassen -> save
      role -> Existing role
      existing role-> service-role/myRoleName
      [next]
      [create function]

5. http://alexa.amazon.de
   -> skils -> meine skils (rechts oben) -> fhem skill hinzufügen -> mit eigenem amazon konto anmelden

   "alexa, finde meine smarten geräte"
     oder
   -> smart home -> geräte suchen

   optional: gruppen (räume) anlegen

6. "alexa, schalte <gerät> ein"
   "alexa, schalte <gerät> aus"
   "alexa, stelle <gerät> auf <wert> prozent"
   "alexa, stelle <gerät/raum> auf <anzahl> grad"


TODO: increment/decrement percentage kommandos
           increment/decrement temperature kommandos
           zusätzlicher frei konfigurierbaren custom skill

edit: 2016-11-06: 3.1 vervollständigt
                           diverse kleine ergänzungen

edit: 2016-11-06: version 0.0.1: diverse fehler abgefangen
                                                 abhängigkeiten vervollständigt
                                                 upnp port mapping (vielleicht)

edit: 2016-11-06: version 0.0.2: added missing functions

edit: 2016-11-06: version 0.0.3: genericDeviceType wird automatisch hinzugefügt

edit: 2016-11-06: version 0.0.4: change . to _ in applianceId, use alias as friendlyName

edit: 2016-11-06: version 0.0.5: also change all other not allowed characters in applianceId to _

edit: 2016-11-07: version 0.0.6: alias fix
                           konfigurierbares key und cert file im alexa knoten:
        "keyFile": "./key.pem",
        "certFile": "./cert.pem"


edit: 2016-11-08: version 0.1.0: "Alexa, erhöhe Gerätename um Anzahl Prozent"
                                                "Alexa, reduziere Gerätename um Anzahl Prozent"
                                                "Alexa, erhöhe Gerätename um Anzahl Grad"
                                                "Alexa, reduziere Gerätename um Anzahl Grad"
                                                volume sollte erkannt werden
                                                oauth token wird ausgewertet
                                                wenn "oauthClientID": im config file gesetzt ist werden nur kommandos von dieser akzeptiert
                                               
edit: 2016-11-08: version 0.1.1: node version inkompatibilität repariert

edit: 2016-11-19: version 0.1.2: neue config optionen nat-pmp und nat-upnp
                                                fhem alexa modul und support für alexaName
                                                weitere vorbereitungen für den custom skill

edit: 2016-11-23: version 0.1.3: ist wieder kompatibel mit node 0.12.7
                                                unterstützt das reload kommando des alex fhem moduls
                                                aller erste version des custom skill. anleitung fehlt noch.

edit 2016-11-25: erste beschreibung des custom skill hier: https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230

edit 2016-12-14: eine erste beschreibung der custom skill konfigurierbarkeit hier: https://forum.fhem.de/index.php/topic,60244.msg532513.html#msg532513 und die erste version des konfigurierbaren custom skills hier: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117

edit: 2016-12-16: update mit ein paar kleineren bug fixes und der möglichkeit auch mehrere rolläden auf ein mal zu steuern: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Chaos

Hi

meine dots kommen nächste woche und dann kann ich hier loslegen \o/

Freu mich schon das zu testen.  :)
Kurze Frage hierzu:
Zitat von: justme1968 am 05 November 2016, 23:21:32

  die möglichkeit port 3000 auf dem rechner auf dem alexa-fhem läuft von aussen erreichbar zu machen


Kannst du mir evtl. sagen ob das auch via IPV6 geht seitens Amazon? 
Portforwarding geht bei IPV4 hier nicht...

MfG
Manuel

justme1968

die verbindung vom was lambda code zum alexa-fhem server bei dir ist komplett in unserer hand. wenn du in lambda.js der host auf eine ipv6 adresse änderst und dafür sorgst das der alexa-fhem server global unter dieser adresse erreichbar ist sollte einfach alles gehen.

jedenfalls wenn was lambda ipv6 verbindungen nach aussen aufbauen kann. das müsste aber der fall sein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

scottieac

Hi,

mein Echo ist gestern gekommen und da dachte ich mir, direkt mal FHEM ausprobieren.....

Wenn ich bei Punkt 1 Alexa starte kommt folgende Fehlermeldung:


[11/6/2016, 11:12:40 AM] Fetching FHEM devices...
/opt/alexa-fhem/lib/server.js:71
    for( connection of this._config.connections ) {
                                 ^

TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
    at Server.run (/opt/alexa-fhem/lib/server.js:71:34)
    at module.exports (/opt/alexa-fhem/lib/cli.js:31:10)
    at Object.<anonymous> (/opt/alexa-fhem/bin/alexa:17:22)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)



Die node Version ist v.6.3.0.


Außerdem will Amazon bei Punkt 3.2 noch ne "Privacy Policy URL" haben, sonst geht es nicht weiter.

Gruß
Daniel
Pi4 4GB / FHEM / CUL / JeeLink / Zigbee / ESP8266 / EBUSD / HomeMatic / Xiaomi / Z-Wave / TabletUI / Homekit

justme1968

#4
nimm einfach die gleiche url wie bei 3.1. ich hab es im readme ergänzt.

der fehler kommt weil du das config file noch nicht angelegt hast. wird inzwischen abgefangen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

prodigy7

#5
Hi justme1968,

vielen vielen Dank! Ich bin dein How-To schon soweit komplett durchgegangen und habe jetzt alle Schritte mal in Screenshots festgehalten und werde das im Wiki dann einfügen, sobald ich heraus bekomme ich ich mich in dem Wiki registrieren kann. Es war bei mir auch so am Ende, dass das Skill bei mir nicht funktionieren wollte, Amazon zeigte mir beim Skill aktivieren eine Fehlermeldung. Hab so 2 - 3 Stellen wo ich mir denke, dass das How-To ggf. noch nicht vollständig ist, am sinnvollsten ist es aber wenn ich dein How-To im Wiki habe und du sehen kannst, wo es noch hängen könnte.

Zum Thema Port 3000: Dank uPNP an Routern ist das Thema Port öffnen ja auch nicht mehr so das Problem. Hier scheint es z.B. schon eine NodeJS Bibliothek zu geben, mit der man das bequem machen kann: https://www.npmjs.com/package/nat-upnp
Vielleicht eine Option, das zu implementieren um es etwas einfacher zu machen (die ganzen anderen Schritte sind ja schon recht komplex)

Edit: Habe übrigens den gleichen Fehler wie scottieac

prodigy7

justme1968

vielleicht kannst du schon mal posten wo du probleme hast.

upnp  kann ich einbauen, aber nicht selber testen da es in meinem netz nicht geht.

aber eigentlich ist es im normalfall nicht wirklich kompliziert den einen port zu forwarden. und wenn es kompliziert wird geht vermutlich auch upnp nicht mehr.

der fehler kommt wenn das config file nicht da ist. kurz vorher kommt eine meldung wo es liegen muss.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FlorianZ

Hallo,

Ich bin auch gerade dabei Alexa-Fhem zu installieren.
Wenn ich Alexa starten möchte, bekomme ich folgende Meldung:

module.js:471
    throw err;
    ^

Error: Cannot find module 'commander'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/florian/alexa-fhem/lib/cli.js:1:77)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)



nodejs habe ich installiert.
Die Datei config.json.sample habe ich editiert und in config.json umbenannt.

Gruß Florian

justme1968

Zitatcd alexa-fhem
  npm install

d.h. im alex-fhem verzeichnis ein mal npm install aufrufen.

das config file muss nach ~/.alexa.config.json

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

ich habe upnp mal eingebaut. kann das jemand testen ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

visionsurfer

Moin,

also ich beneide echt die Menschen, die sowas programmieren können. Wahnsinn.
Danke @justme1968 für diese Arbeit. Bin gespannt wo damit die Reise noch hingeht.

Ich hab leider bisher noch wenig Ahnung von Linux. Ich bin komplett in der Windows Welt zu Hause. Daher würde ich mich riesig freuen, wenn jemand in der Wiki vielleicht auch die ganzen Befehle mit zeigen könnte. Bei mir hört es schon fast auf, wenn es heißt, die Datei muss in das Verzeichnis. Keine Ahnung wie ich das machen muss. Ich nutze eine Raspberry mit Jessie drauf. Vielleicht würde einer sich die Mühe machen können ?

@justme1968
Noch eine Frage. Meinst du das es möglich ist, das du in Alexa auf die Weckzeit zugreifen kannst ? Ich sage meiner Alexa jeden Abend wann ich am nächsten Morgen geweckt werden möchte. Richtig geil wäre es, wenn FHEM diese Weckzeit mitbekommen würde. Damit dann Dinge möglich sind wie: Starte 15 Minuten nach Weckzeit die Morgenroutine (Türschloss entriegeln, Bad Musik an usw. usw.).

Meinst du, du kannst das abfangen ?

Grüße,
Visionsurfer

stera

Hallo,

@visionsurfer, du sagst es.

Ich finde das auch toll, dass es Leute wie justme hier gibt. Momentan blicke ich auch noch nicht so ganz durch, wie und was bei Amazon alles zusammenhängt.

Seit gestern habe ich einen Echo Dot und schon seit längerem Fhem in der Hausautomation im Einsatz. Ich bin gespannt, was Alexa uns für Möglichkeiten bietet  :D

Besten Dank an alle...

PS: Kann man sich ohne bedenken bei AWS Lambda anmelden, ohne das Kosten entstehen usw.?

Gruß,
SteRa


stera

Hallo nochmal

ich benutze Fhem auf einem Raspberry. Ich muss dort node.js installieren oder?

Verstehen das mit der Version noch nicht so ganz

node.js (vermutlich ab 0.12, getestet mi 4.2.6). -> Installiere gerade node Version 0.12.7, hoffe das ist die richtige ?

Beste Grüße

Tommy82

#13
Edit, hatte noch einen Fehler drin

Danke

@stera
das sollte funktionieren, unter debian jessie musste ich aber neben node.js noch node installieren bis es klappte
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

justme1968

wenn alles gut gegangen ist taucht der neue skill unter http://alexa.amazon.de -> skils -> meine skils auf.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968