Einladung zum Beta-Test: "FHEMlazy" zur einfacheren Alexa-Integration

Begonnen von gvzdus, 23 Dezember 2018, 15:30:36

Vorheriges Thema - Nächstes Thema

mark79

Ui jetzt funktioniert es, danke dir! :) Ich musste mich noch mal neu registrieren.

Ich muss jetzt erstmal schauen und lernen, was damit Möglich ist.

Ich habe parallel noch ha-bridge laufen, damit ist man etwas beschränkt und die Einrichtung der Geräte ist auch um einiges umständlicher.
Bei dem FHEMlazy Lösung hier, brauchte ich bisher nur das Gerät in den Raum schieben und den Dienst neustarten und ich konnte es direkt steuern.
Das mit dem "filter": "alexaName=...*" schaue ich mir auch an, danke für den Tipp. :) Ich arbeite ja lieber mit MSwitch, damit kann man auch verschiedene Geräte zusammenfügen die auch unterschiedliche on/off commands besitzen und diese noch Zeitversetzt schalten.

Bei einem MSwitch Device funktioniert es nicht. Das Fhem MSwitch Device heißt "Wohnzimmer", es kann sein, weil eine Alexa schon Wohnzimmer heißt oder sich im Raum "Wohnzimmer" befindet, als Fehlermeldung kommt: Wohnzimmer unterstützt das nicht.

Es geht jetzt. Das lag vermutlich daran, das ich ha-bridge nebenbei laufen hatte. Ich habe ha-bridge beendet, alle Geräte in https://alexa.amazon.de/spa/index.html#appliances gelöscht und neu suchen lassen und dann klappte das schalten:

[2019-1-1 19:56:13] [FHEM] Wohnzimmer_MSwitch: executing set cmd for On with value 1
[2019-1-1 19:56:13] [FHEM]   executing: http://192.168.2.40:8083/fhem?cmd=set%20Wohnzimmer_MSwitch%20on&XHR=1
response :{"context":{"properties":[{"namespace":"Alexa.PowerController","name":"powerState","value":"ON","timeOfSample":"2019-01-01T18:56:13.453Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"name":"Response","payloadVersion":3,"namespace":"Alexa","messageId":"geheim","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"geheim"},"endpointId":"Wohnzimmer_MSwitch"},"payload":{}}}


Danke noch mal für deine/eure Mühe! :)

Um die Tunnel Verbindung aufrecht zu erhalten habe ich beim Tunnel User eine  ~/.ssh/config angelegt, mit folgendem Inhalt:
Host *
     ServerAliveInterval 30
     ServerAliveCountMax 4


Damit bleibt die Verbindung bestehen.


Viele Grüße
Mark
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

gvzdus

Hi Mark, danke für das Erfolgsfeedback! Freut mich! Die nächste Version kümmert sich auch um den (in Sachen Keep-Alive richtig parametrisierten, automatischen SSH-Start).
ha-bridge habe ich auch lange und gerne genutzt, aber Amazon mag LAN nicht - ich habe die Sorge, dass sie es streichen, und Hue nur noch über die Cloud supporten. Und: reale Hue-Bridge und habridge gleichzeitig zickt.

mark79

Hi gvzdus,

gerne und ich freue mich auch das es so schnell funktioniert hat. :)

Ich habe beide Dienste erstmal mit screen gestartet, so bleiben sie bis ein reboot aktiv.

Hue verwende ich hier nicht, daher hatte ich damit keine Probleme.
Aber wenn sie das einstellen, wäre das schon doof, die sollten die Steuerung lieber allgemein vereinfachen, als alles zu verkomplizieren und zuzurammeln. Genau das immer noch kein TTS von extern geht, außer mit dem Modul von Michael Winkler nervt schon ein wenig.

Ich habe jetzt noch mehr Geräte hinzugefügt und das klappt alles prima und auch flott. :) Abfragen gehen damit auch, wie Temperatur abfragen und ein HM Thermostat habe ich auch eingebunden und kann es steuern.

Ich werde morgen mal weiter machen. :)


Viele Grüße
Mark
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

gvzdus

Mit der ersten Runde hatte ich ja erfahrene Nutzer gesucht, die bereit sind, ihre laufende Installation auf's Spiel zu setzen und für die gute Sache zu testen.

Ich weiß zwar noch vieles, was zu verbessern ist, aber dem einen oder anderen läuft die Ferienzeit vermutlich dem Ende entgegen.

Deswegen möchte ich nun die "Alexa-Fhem für Dummies"-Version von FHEMlazy vorstellen, die auf die Leute abzielt, die bisher noch nicht so weit gekommen sind, und perfekterweise von Null auf ihre ansonsten laufende FHEM-Installation mit Alexa anreichern wollen.

Gegenüber der ersten Version:

  • Ist nunmehr "meine" Version von Alexa-FHEM nötig, die neben diversen Anpassungen einen Installer mitbringt. Diese wird im Laufe der Installation geladen
  • Liegt die Kommunikation nun auf einer VM vom FHEM-Verein, die Rudi König zur Verfügung gestellt hat
  • Hat sich nach der Anregung von Andre (justme1968) das Sicherheitskonzept grundsätzlich geändert: Wie im Original von Andre wird jetzt das Bearer-Token wieder in der lokalen NodeJS-Software validiert. Der Installer generiert es und sichert es in FHEM-Konfiguration.
  • Der Installer kümmert sich von der SSH-Keygenerierung über den Start des SSH-Clients bis hin zum Autostart von alexa-fhem beim Start von FHEM so ziemlich um alles.

Mein Ziel ist, dass der ganze Installationsspaß unter 10 Minuten von Null aus braucht.

Insofern möchte ich zum Besuch der Wikiseite:
https://wiki.fhem.de/wiki/Alexa-FHEM-lazy

einladen, hier stehen alle Schritte drin.

Badflex

Hallo würde das ganze ja auch gerne mal testen.

Habe Alexa schon laufen und im Moment über DSL lite mit Portmapper den 3000 Port öffnen müssen.
Sollte ich Alex vorher komplett löschen mit autostart etc. oder einfach die Portfreigabe beenden und die Installation drüber bügeln.
Was ist der bessere Weg?
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

gvzdus

Moin, ich würde "alexa-fhem" zur Seite schieben, und die FHEM-Config vorher einmal unter eigenem Namen sichern.

Der Installer erzeugt auch eine ~/.alexa/config.json, die kannst Du auch wegmoven, wenn bei Dir alles Standard ist. Ansonsten ist wichtig in dieser Datei:

{
  "alexa": {
    "port": 3000,
    "name": "Alexa",
    "bind-ip": "127.0.0.1",
    "ssl": false,
    "publicSkill": true,
    "ssh": "/usr/bin/ssh"
  },


das "ssh" und "publicSkill" gesetzt sind, ssl aus ist und "bind-ip" auf localhost empfiehlt sich auch. Neben den 4 im Wiki genannten Devices wird an der Config von FHEM nichts geändert.

sTaN

Klasse gvzdus!!! und vielen Dank!

Kommt mir gerade noch recht. Werde versuchen heute Abend oder morgen die Installation an zu schubsen! Die Anleitung liest sich sehr gut, habe ich bereits durchgelesen.

Am Anfang schreibst du, dass aktuell der Amazon Standard Smarthome Skill verwendet wird?! [emoji848]
Das verwirrt mich allerdings etwas.

Ist FHEMlazy nicht ein Alexa Custom Skill, der es eben auch ermöglicht zusätzliche Geräte über das attribute alexaName zu steuern? (natürlich auch die das Paket für die vereinfachte Einrichtung ohne Amazon Developer Account)

Also quasi das bessere Standard Smarthome Skill von Amazon mit den Vorteilen den Skillnamen nicht sagen zu müssen aber dennoch alle Fhem Devices einzubinden oder gibt es in der aktuellen Version noch die Einschränkung auf bestimmte Aktionen und Geräte?
Werden Max! Thermostate, Philips HUE FS20 etc. unterstützt, sobald sie das Attribut alexaName bekommen? Fällt die Zuordnung in einen Raum Alexa dadurch auch weg?

Viele Grüße und ich werde berichten wie es gelaufen ist!

sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

gvzdus

> Am Anfang schreibst du, dass aktuell der Amazon Standard Smarthome Skill verwendet wird?!

Es gibt keinen "Amazon Standard Smarthome Skill". Es gibt viele SmartHome-Skills wie Hue, Shelly, und sie werfen alle ihre Geräte in den Amazon-Pott, aus dem Alexa auswählt und mal den Hue, mal den FHEMlazy-Skill aktiviert.

Ich fand das mit dem Alexa-Room immer so kompliziert, dass ich bei FHEMlazy jetzt auch in der config.json das Filter so gewählt habe, dass die Zuweisung eines alexaName-Attributes reicht.

> gibt es in der aktuellen Version noch die Einschränkung auf bestimmte Aktionen und Geräte? Werden Max! Thermostate, Philips HUE FS20 etc. unterstützt, sobald sie das Attribut alexaName bekommen?

Ich denke, ja. Irgendwas hatte ich noch bei Thermostaten verbessert, aber ansonsten ist die Geräteunterstützung identisch mit justme1968s Originalversion 0.4.4. Wer noch Patches für besseren Support hat, kann sie mir ja gerne schicken, oder perfekterweise als Github-Pull-Request schicken.

> Fällt die Zuordnung in einen Raum Alexa dadurch auch weg?

Ja, siehe oben. Wer's klassisch haben will, kann die config.json ja wieder auf den "alexaRoom"-Filter umstellen.

MarkusN

Zitat von: gvzdus am 02 Januar 2019, 15:43:54
Mit der ersten Runde hatte ich ja erfahrene Nutzer gesucht, die bereit sind, ihre laufende Installation auf's Spiel zu setzen und für die gute Sache zu testen.

Ich weiß zwar noch vieles, was zu verbessern ist, aber dem einen oder anderen läuft die Ferienzeit vermutlich dem Ende entgegen.

Deswegen möchte ich nun die "Alexa-Fhem für Dummies"-Version von FHEMlazy vorstellen, die auf die Leute abzielt, die bisher noch nicht so weit gekommen sind, und perfekterweise von Null auf ihre ansonsten laufende FHEM-Installation mit Alexa anreichern wollen.

Gegenüber der ersten Version:

  • Ist nunmehr "meine" Version von Alexa-FHEM nötig, die neben diversen Anpassungen einen Installer mitbringt. Diese wird im Laufe der Installation geladen
  • Liegt die Kommunikation nun auf einer VM vom FHEM-Verein, die Rudi König zur Verfügung gestellt hat
  • Hat sich nach der Anregung von Andre (justme1968) das Sicherheitskonzept grundsätzlich geändert: Wie im Original von Andre wird jetzt das Bearer-Token wieder in der lokalen NodeJS-Software validiert. Der Installer generiert es und sichert es in FHEM-Konfiguration.
  • Der Installer kümmert sich von der SSH-Keygenerierung über den Start des SSH-Clients bis hin zum Autostart von alexa-fhem beim Start von FHEM so ziemlich um alles.

Mein Ziel ist, dass der ganze Installationsspaß unter 10 Minuten von Null aus braucht.

Insofern möchte ich zum Besuch der Wikiseite:
https://wiki.fhem.de/wiki/Alexa-FHEM-lazy

einladen, hier stehen alle Schritte drin.

Habe die Schritte aus dem Wiki mal nachvollzogen, bisher ohne Erfolg. Das sind meine Erkenntnisse:

npm install (gemäß wiki ausgeführt als fhem user) schlägt mit folgender Fehlermeldung fehl:
npm ERR! path /root/.npm/_logs
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall scandir
npm ERR! Error: EACCES: permission denied, scandir '/root/.npm/_logs'
npm ERR!  { Error: EACCES: permission denied, scandir '/root/.npm/_logs'
npm ERR!   stack: 'Error: EACCES: permission denied, scandir \'/root/.npm/_logs\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'scandir',
npm ERR!   path: '/root/.npm/_logs' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).
glob error { Error: EACCES: permission denied, scandir '/root/.npm/_logs'
  stack: 'Error: EACCES: permission denied, scandir \'/root/.npm/_logs\'',
  errno: -13,
  code: 'EACCES',
  syscall: 'scandir',
  path: '/root/.npm/_logs' }
npm ERR! path /root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall open
npm ERR! Error: EACCES: permission denied, open '/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304'
npm ERR!  { Error: EACCES: permission denied, open '/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304'
npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, open '/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304'
npm ERR!      errno: -13,
npm ERR!      code: 'EACCES',
npm ERR!      syscall: 'open',
npm ERR!      path: '/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304' },
npm ERR!   isOperational: true,
npm ERR!   stack: 'Error: EACCES: permission denied, open \'/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'open',
npm ERR!   path: '/root/.npm/_cacache/index-v5/b5/54/aa8983e85e659dca40242d9b62bf74f435ea8b2223e1622754298361f304',
npm ERR!   parent: 'alexa-fhem' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).


Ausgeführt als root funktioniert dieser Befehl natürlich.

Ein späteres "bin/alexa-fhem -A" schlägt ebenfalls fehl:

fhem@fhem:/opt/fhem/alexa-fhem$ bin/alexa -A
Creating directory /root/.alexa
(node:19697) UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, mkdir '/root/.alexa'
    at Object.fs.mkdirSync (fs.js:885:18)
    at runAutoconfig (/opt/fhem/alexa-fhem/lib/user.js:79:8)
    at /opt/fhem/alexa-fhem/lib/user.js:61:15
    at /opt/fhem/alexa-fhem/lib/user.js:62:7
    at new Promise (<anonymous>)
    at Function.User.autoConfig (/opt/fhem/alexa-fhem/lib/user.js:56:10)
    at /opt/fhem/alexa-fhem/lib/cli.js:27:42
    at Command.<anonymous> (/opt/fhem/alexa-fhem/node_modules/commander/index.js:395:35)
    at emitNone (events.js:106:13)
    at Command.emit (events.js:208:7)
(node:19697) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
(node:19697) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
fhem@fhem:/opt/fhem/alexa-fhem$


Ich frage mich zumindest beim letzten Befehl warum die Dateien im root profil angelegt werden sollen.

Grüße,

Markus

gvzdus

Versuch bitte mal, unmittelbar nach dem "sudo -u fhem bash" erstens
set
und
env
auszuführen, ob hier irgendwo z.B. HOME auf "root" steht.

Falls HOME gar nicht gesetzt ist, vielleicht mal explizit:
export HOME=/opt/fhem

Und meine dritte Idee:
npm install -g



mark79

Zitat von: MarkusN am 02 Januar 2019, 20:43:22
Ich frage mich zumindest beim letzten Befehl warum die Dateien im root profil angelegt werden sollen.

Hast du npm install evtl. mit sudo vorne dran ausgeführt? Dann wird es mit root rechten ausgeführt und landet im /root/ Verzeichnis.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

MarkusN

Danke für die Hilfe. Habe die Befehle ohne sudo ausgeführt. Es stellte sich heraus dass das homedir von fhem in der Tat /root ist, obwohl in der /etc/passwd definitiv /opt/fhem als home konfiguriert ist. Vielleicht liegt das daran dass FHEM in einem privileged lxc container läuft? Bin mir da gerade nicht sicher. Ein "export HOME=/opt/fhem" läuft für die aktuelle user session.

Konnte soweit alles erfolgreich konfigurieren. Beim Verbinden des Alexa Skills war alles grün, ich sehe auch mehrere alexa prozesse als fhem user. Eine Suche zeigt jedoch leider keine neuen Geräte (habe das AlexaName Attribut gesetzt und hinterher ein reload/stop-start gemacht). Habe aktuell keine Idee und werde morgen mal weiter testen!

gvzdus

Hört sich nicht schlecht an!
Sicherlich stand auf der "check"-Seite beim Skill-Verknüpfen auch "0 Geräte"?

Zur Zeit ist das Logging unterirdisch. Einerseits über "winston" - aber hier wird z.B. nichts geschrieben, wenn der Prozess hart abstürzt. Andererseits immer noch eben für diesen Fall nach /tmp/alexa.stdout.log.

Hier wird u.a. jeder Request geloggt. Wenn Du nach "cmd=" suchst, findest Du die Kommunikation mit FHEM. Der eigentliche Befehl, um die Devices zu listen, sieht z.B. so aus:

2019-01-02T16:08:20.576Z info server.js: fetching: http://127.0.0.1:8083/fhem?cmd=jsonlist2%20alexaName=...*&fwcsrf=csrf_394589785944464&XHR=1
2019-01-02T16:08:20.828Z info server.js: got: 23 results


Variante 1: Dein Alexa-Prozess (eigentlich sollte da nur einer laufen) hat ebenfalls kein Homedir. Unter ~/.alexa/config.json liegt die Konfigurationsdatei, die die Filteranweisung beinhaltet. Wenn hier zwar "alexaName=...*" steht, aber im cmd etwas anderes, könnte es ein weiteres HomeDir-Problem sein.

Variante 2: Irgendwelche Typos. Sofern cmd und config.json sich auf alexaName beziehen, sollte im FHEM-Webfrontend ein
list alexaName=...*
eine Liste der Geräte ausspucken, oder da ist doch was falsch mit den Namen, die Du vergeben hast.

desmoloch

also die Wiki Seite ist soweit gut gemacht.
Allerdings heißt die bin Datei ja alex und nicht alexa-fhem. Das ist im Wiki noch falsch :)

gvzdus