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

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

Vorheriges Thema - Nächstes Thema

nesges

Zitat von: killah78 am 03 Februar 2017, 14:40:26
Aber man muss wirklich in die HomeKitTypes.js gucken bezüglich der Namen.

Nicht unbedingt, unter https://forum.fhem.de/index.php/topic,48558.0.html ist das Mapping erklärt. Das auf Alexa zu übertragen ist aber - zugegeben - nicht ganz trivial :-)

rolf

Bin gerade am konfigurieren der Rolladen für Alexa - eventuell hat mir jemand einen Tip...

- angesteuert wird ein HM-LC-BL1-FM - geht auch - aber beim Sprachkommando "mache auf..." schliesst sich der Rolladen - bei "mache zu..." oeffnet er sich - und
ich komm einfach nicht dahinter warum es verdreht ist....

- die restlichen Rollaeden sind bei mir UNIROLLs - die koennen gar kein PCT-Befehl - auch da fuer jeden Tip dankbar....
System 1: Intel NUC (ubuntu 18.04.1 lts) mit diversen Homematic-Komponenten + CUNO mit Uniroll/Hoermann + RFXTRX mit TFA + EnOcean mit Eltako + Alexa + Harmony + per HMCCU gekoppelter PI3-Raspberrymatic mit HM-IP-Komponenten
System 2: PI2-Raspberry (Jessie) + Signalduino mit Somfy/RTS

rolf

Hab das mit dem HM-LC-BL1-FM selber hinbekommen - war falsch gemappt  >:(
System 1: Intel NUC (ubuntu 18.04.1 lts) mit diversen Homematic-Komponenten + CUNO mit Uniroll/Hoermann + RFXTRX mit TFA + EnOcean mit Eltako + Alexa + Harmony + per HMCCU gekoppelter PI3-Raspberrymatic mit HM-IP-Komponenten
System 2: PI2-Raspberry (Jessie) + Signalduino mit Somfy/RTS

Prof. Dr. Peter Henning

So, läuft. Alexa schaltet meine Lichtszenen im Wohnzimmer, klingelt meinen Jüngsten aus dem Bett  ;D, und schaltet meine Harmony-Activities.

Wiki ist einigermaßen auf den Stand gebracht - wenn ich Zeit habe, pflege ich noch eine Anleitung für die Ankopplung an weitere FHEM-Devices ein.

LG

pah

Diggewuff

Wie genau weckt Alexa deinen Jüngsten?
Und hast du deine Lichtscenen über das Lightscene modul konfiguriert?

Prof. Dr. Peter Henning

1. Funkgong
2. Ja - aber auf einer anderen FHEM-Instanz (habe 3 Systeme, die sich gegenseitig steuern). Mit einem DOIF baue ich aus einzelnen An-Aus-Befehlen einen Satz aus Radiobuttons, der jeweils genau eine Lichtszene aktiviert.

LG

pah

jvollmer

Zitat von: kawa0815 am 31 Januar 2017, 04:13:33
In /alexa-fhem/lib/server.js findest du die Zeilen:

          if( device.mappings.BatteryLevel ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ device.fhem.cached(device.mappings.BatteryLevel.informId).replace('.',',');
          } else if( device.mappings.StatusLowBattery ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ (device.fhem.cached(device.mappings.StatusLowBattery.informId)?'niedrig':'in ordnung');
          }


Wenn du hier "niedrig"  und " in ordnung" vertauschst

          } else if( device.mappings.StatusLowBattery ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Batteriestand ist '+ (device.fhem.cached(device.mappings.StatusLowBattery.informId)?'in ordnung':'niedrig');
          }


sagt Alexa nach einem Neustart von ./bin/alexa den richtigen Zustand der Batterie an.
Ja, das ist richtig und funktioniert. Wenn ich jedoch mit "setreading .... battery low" den anderen Status simuliere, dann erkennt Alexa den Batteriespannung immer noch als "in Ordnung".
Ich glaube es fehlt ein richtiges Mapping, ich weiß nur nicht welches und wie.

Diggewuff

Klingt gut. Ich bin noch am überlegen wie ich das mit den Lichtscenen machen soll. Das lightscene Modul schien mir da ziemlich unkomfortabel. Daher war ich auch am überlegen ob ich mir dann einfach entsprechende DOIFs baue.
Nochmal zum Verständnis: Deine Lichtscenen bestehen aus einem Dummy zum schalten und einem DOIF der darauf reagiert und dann die einzelnen Lichter schaltet?

dieda

Könnte man an der Anleitung noch was optimieren? So nicht Linux-User haben div. Probs damit.

Im Schritt "Alexa-FHEM installieren"
Vermisse ich den Hinweis wo man das Paket hin entpacken soll.
Dann ist auf einmal ein Verzeichnis Alexa da und man soll dahin eine Config-Datei aus einer config-sample.json reinkopieren.


Im Schritt "Alexa-Fhem konfigurieren"
Sind die Hinweise leider auch nicht präzise und kaum nachzuvollziehen.

Ich möchte zwar kein Silbertablet, aber an den Stellen komme ich def. nicht weiter.
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs


dl6kbg

Ein kleiner Erfolg. Ich habe meine Selbstbau-Wetterstation bestehend aus BMP180 und DHT22 so eingebunden:


{
  "Arg":"Aussensensor",
  "Results": [
  {
    "Name":"Aussensensor",
    "PossibleSets":" ",
    "PossibleAttrs":"alias comment:textField-long eventMap group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 readingList setList useSetExtensions disable disabledForIntervals event-on-change-reading event-on-update-reading event-aggregator event-min-interval stateFormat:textField-long timestamp-on-change-reading alexaName alexaRoom cmdIcon devStateIcon devStateStyle genericDeviceType:switch,outlet,light,blind,speaker,thermostat homebridgeMapping:textField-long icon sortby webCmd widgetOverride userattr",
    "Internals": {
      "NAME": "Aussensensor",
      "NR": "412",
      "STATE": "???",
      "TYPE": "dummy"
    },
    "Readings": {
      "humidity": { "Value":"99.9", "Time":"2017-02-03 22:43:02" },
      "pressure": { "Value":"1006.38", "Time":"2017-02-03 22:43:03" },
      "temperature": { "Value":"3.0", "Time":"2017-02-03 22:43:02" }
    },
    "Attributes": {
      "alexaName": "wetterstation",
      "alexaRoom": "dach",
      "event-on-change-reading": ".*",
      "genericDeviceType": "thermometer",
      "homebridgeMapping": "E863F10F-079E-48FF-8F27-9C2605A29F52=pressure,name=AirPressure,format=UINT8",
      "room": "Haus,alexa"
    }
  }  ],
  "totalResultsReturned":1
}


und in lib/server.js:


if( device.mappings['E863F10F-079E-48FF-8F27-9C2605A29F52'] ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'der Luftdruck beträgt '+ device.fhem.cached(device.mappings['E863F10F-079E-48FF-8F27-9C2605A29F52'].informId).replace('.',',') +' Hectopascal';
          }
          if( device.mappings.CurrentRelativeHumidity ) {
            if( state ) { state.replace( ' und ', ', ' ); state += ' und ' };
            state += 'die Luftfeuchtigkeit beträgt '+ device.fhem.cached(device.mappings.CurrentRelativeHumidity.informId).replace('.',',') +' Prozent';


worauf Alexa antwortet:


"wetterstation misst 3,0 Grad und der Luftdruck beträgt 1006,55 Hectopascal und die Luftfeuchtigkeit beträgt 99,9 Prozent"


mir fehlt jetzt nur noch mein Windmesser. Hat da jemand ein Homebridge-mapping für?

Grüße, Oliver

dl6kbg

ach, noch etwas, auf der Konsole wird das folgende ausgegeben:


[2017-02-03 22:47:50] [FHEM] homebridgeMapping: E863F10F-079E-48FF-8F27-9C2605A29F52=pressure,name=AirPressure,format=UINT8
[2017-02-03 22:47:50] [FHEM] Aussensensor is thermometer
[2017-02-03 22:47:50] [FHEM] Aussensensor has
[2017-02-03 22:47:50] [FHEM]   CurrentTemperature [temperature]
[2017-02-03 22:47:50] [FHEM]   CurrentRelativeHumidity [humidity]
[2017-02-03 22:47:50] [FHEM]   Custom AirPressure [pressure]
  2017-02-03 22:47:50 caching: Aussensensor-temperature: 3.1
  2017-02-03 22:47:50 caching: Aussensensor-humidity: 99.9
  2017-02-03 22:47:50 caching: Aussensensor-pressure: 1006.52
[2017-02-03 22:47:50] [FHEM]     caching: Custom AirPressure: 1007 (as number; from '1006.52')


ausgesprochen wird aber:

"....beträgt 1006,56 Hectopascal"

, was jetzt nicht schlimm ist. Fortlaufend aktualisiert wird auf der Konsole mit:


Aussensensor-pressure: 1006.52


Grüße, Oliver

Prof. Dr. Peter Henning

@dieda: Das ist eine Anleitung für Alexa-Fhem, nicht für Linux.
ZitatIm Schritt "Alexa-Fhem konfigurieren"
Sind die Hinweise leider auch nicht präzise und kaum nachzuvollziehen.
Nur abgesehen davon, dass der Text nicht von mir stammt, ist er durchaus präzise. Verbesserungsfähig - das hat aber im Moment keine Pritorität.

LG

pah

vbs

Stichwort "webname", erstmal sorry falls das schon besprochen wurde, aber ich konnte im Thread und im Wiki nix dazu finden:
Kann es sein, dass momentan der default-webname "fhem" fest kodiert ist?
Wenn ich alexa-fhem starte kommt:
vbs@minion:~/alexa-fhem$ ./bin/alexa
[2/4/2017, 11:49:49 AM] using /home/vbs/.alexa/config.json
[2/4/2017, 11:49:49 AM] ---
[2/4/2017, 11:49:49 AM] this alexa-fhem 0.1.3
[2/4/2017, 11:49:49 AM] Fetching FHEM devices...
[2/4/2017, 11:49:49 AM] [FHEM] Checking devices and attributes...
[2/4/2017, 11:49:49 AM] [FHEM]   executing: http://minion:8084/fhem?cmd=%7BAttrVal(%22global%22,%22userattr%22,%22%22)%7D&XHR=1
[2/4/2017, 11:49:49 AM] [FHEM]   executing: http://minion:8084/fhem?cmd=jsonlist2%20TYPE=alexa&XHR=1
[2/4/2017, 11:49:49 AM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486205389658
[2/4/2017, 11:49:49 AM] [FHEM] Fetching FHEM devices...
[2/4/2017, 11:49:49 AM] [FHEM] fetching: http://minion:8084/fhem?cmd=jsonlist2%20room=alexa&XHR=1

Da ich aber nicht "fhem" als webname nutze sondern "home", ist mMn die URL falsch "http://minion:8084/fhem?cmd". Ich hab mal in der Funktion "FHEM_execute" und "FHEM.prototype.connect" händisch "home" eingetragen und dann siehts besser aus: er findet das alexa-Device und mein eines Test-Gerät "birne":
vbs@minion:~/alexa-fhem$ ./bin/alexa
[2/4/2017, 12:01:14 PM] using /home/vbs/.alexa/config.json
[2/4/2017, 12:01:14 PM] ---
[2/4/2017, 12:01:14 PM] this alexa-fhem 0.1.3
[2/4/2017, 12:01:14 PM] Fetching FHEM devices...
[2/4/2017, 12:01:14 PM] [FHEM] Checking devices and attributes...
[2/4/2017, 12:01:14 PM] [FHEM]   executing: http://minion:8084/home?cmd=%7BAttrVal(%22global%22,%22userattr%22,%22%22)%7D&XHR=1
[2/4/2017, 12:01:14 PM] [FHEM]   executing: http://minion:8084/home?cmd=jsonlist2%20TYPE=alexa&XHR=1
[2/4/2017, 12:01:14 PM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206074823
[2/4/2017, 12:01:14 PM] [FHEM] Fetching FHEM devices...
[2/4/2017, 12:01:14 PM] [FHEM] fetching: http://minion:8084/home?cmd=jsonlist2%20room=alexa&XHR=1
[2/4/2017, 12:01:14 PM] Server listening on: https://:::3000
[2/4/2017, 12:01:14 PM] [FHEM] alexa device is env_alexa
[2/4/2017, 12:01:14 PM] [FHEM]   executing: http://minion:8084/home?cmd=%7B$defs%7Benv_alexa%7D-%3E%7B%22alexa-fhem%20version%22%7D%20=%20%220.1.3%22%7D&XHR=1
[2/4/2017, 12:01:14 PM] [FHEM] got: 1 results
[2/4/2017, 12:01:14 PM] [FHEM] birne is switch
[2/4/2017, 12:01:14 PM] [FHEM] birne has
[2/4/2017, 12:01:14 PM] [FHEM]   On [undefined;on,off]
[2/4/2017, 12:01:14 PM] [FHEM] longpoll ended, reconnect in: 200msec
[2/4/2017, 12:01:15 PM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206075106
[2/4/2017, 12:01:15 PM] [FHEM] longpoll ended, reconnect in: 200msec
[2/4/2017, 12:01:15 PM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206075322
[2/4/2017, 12:01:15 PM] [FHEM] longpoll ended, reconnect in: 200msec
[2/4/2017, 12:01:15 PM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206075534
[2/4/2017, 12:01:15 PM] [FHEM] longpoll ended, reconnect in: 200msec
[2/4/2017, 12:01:15 PM] [FHEM] starting longpoll: http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206075749
[2/4/2017, 12:01:15 PM] [FHEM] longpoll ended, reconnect in: 200msec


Aber der Longpoll-Aufruf auf "http://minion:8084/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206075106" bricht ständig ab. Der müsste vermutlich länger halten, oder? Mich macht da stutzig, dass da in der URL direkt "fhem.pl" auf Root-Ebene (ohne "/fhem/" oder "/home/") aufgerufen wird. Ist das richtig so?

Wenn ich nun auf der Alexa-Website auf "Geräte suchen" klicke, kommt sehr schnell die Meldung "Gerätesuche konnte nicht abgeschlossen werden. Alle Ihre Alexa devices sind offline.". In alexa-fhem sieht die Anfrage so aus (sieht nicht sooo verkehrt aus, finde ich):
[2/4/2017, 12:05:10 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesRequest","payloadVersion":"2","messageId":"bfb31290-6b1c-4531-84ba-49b29dbce2f7"},"payload":{"accessToken":"<geheim>"}}
response :{"header":{"name":"DiscoverAppliancesResponse","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Discovery","messageId":"b23cfea2-f0fd-40f9-88ff-0d367c423ad8"},"payload":{"discoveredAppliances":[{"applianceId":"birne","manufacturerName":"FHEMdummy","modelName":"FHEM<unknown>","version":"<unknown>","friendlyName":"birne","friendlyDescription":"name: birne, alias: birne, room: alexa","isReachable":true,"actions":["turnOn","turnOff"],"additionalApplianceDetails":{"device":"birne"}}]}}


Hätte da jemand einen Tip bitte? Danke!

vbs

Hab jetzt einfach mal in "FHEM_startLongpoll" noch "/home/" in die URL eingefügt, sieht dann besser aus und alexa-fhem bekommt Schaltvorgänge an "birne" mit:
vbs@minion:~/alexa-fhem$ ./bin/alexa
[2/4/2017, 12:14:43 PM] using /home/vbs/.alexa/config.json
[2/4/2017, 12:14:43 PM] ---
[2/4/2017, 12:14:43 PM] this alexa-fhem 0.1.3
[2/4/2017, 12:14:43 PM] Fetching FHEM devices...
[2/4/2017, 12:14:43 PM] [FHEM] Checking devices and attributes...
[2/4/2017, 12:14:43 PM] [FHEM]   executing: http://minion:8084/home?cmd=%7BAttrVal(%22global%22,%22userattr%22,%22%22)%7D&XHR=1
[2/4/2017, 12:14:43 PM] [FHEM]   executing: http://minion:8084/home?cmd=jsonlist2%20TYPE=alexa&XHR=1
[2/4/2017, 12:14:43 PM] [FHEM] starting longpoll: http://minion:8084/home/fhem.pl?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1486206883902
[2/4/2017, 12:14:43 PM] [FHEM] Fetching FHEM devices...
[2/4/2017, 12:14:43 PM] [FHEM] fetching: http://minion:8084/home?cmd=jsonlist2%20room=alexa&XHR=1
[2/4/2017, 12:14:43 PM] Server listening on: https://:::3000
[2/4/2017, 12:14:43 PM] [FHEM] alexa device is env_alexa
[2/4/2017, 12:14:43 PM] [FHEM]   executing: http://minion:8084/home?cmd=%7B$defs%7Benv_alexa%7D-%3E%7B%22alexa-fhem%20version%22%7D%20=%20%220.1.3%22%7D&XHR=1
[2/4/2017, 12:14:43 PM] [FHEM] got: 1 results
[2/4/2017, 12:14:43 PM] [FHEM] birne is switch
[2/4/2017, 12:14:43 PM] [FHEM] birne has
[2/4/2017, 12:14:43 PM] [FHEM]   On [undefined;on,off]
[2/4/2017, 12:14:51 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesRequest","payloadVersion":"2","messageId":"e45b9733-a115-4428-a227-a31df86fd212"},"payload":{"accessToken":"<geheim>"}}
response :{"header":{"name":"DiscoverAppliancesResponse","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Discovery","messageId":"b8ca67bd-dab2-45d7-9e9e-f48a3c03dd00"},"payload":{"discoveredAppliances":[{"applianceId":"birne","manufacturerName":"FHEMdummy","modelName":"FHEM<unknown>","version":"<unknown>","friendlyName":"birne","friendlyDescription":"name: birne, alias: birne, room: alexa","isReachable":true,"actions":["turnOn","turnOff"],"additionalApplianceDetails":{"device":"birne"}}]}}
  2017-02-04 12:15:04 caching: birne-state: off
  2017-02-04 12:15:06 caching: birne-state: on
  2017-02-04 12:15:08 caching: birne-state: off


Jedoch besteht noch das Problem, dass die Alexa-Webseite sofort einen Fehler wirft, wenn ich "Geräte suchen" aufrufe :(