"Alexa-Fhem" auf anderem Server - wie Modul "Alexa" verbinden?

Begonnen von Pati_Alpha, 22 März 2019, 22:34:36

Vorheriges Thema - Nächstes Thema

Pati_Alpha

Hey,

ich baue grade mein FHEM in VMs auf einem NUC neu auf.
Ich verwende, um alles möglichst modular, wartbar und leicht einzeln neuaufsetzbar zu halten, mehrere VMs für z.B. FHEM, CollectorD, HomeBridge... und auch Alexa-FHEM!

Ich kann zwar nun in meiner Alexa-FHEM-VM in der Config-Datei angeben, dass er den FHEM-Server unter der korrekten IP findet, das funktioniert soweit auch (ähnlich wie bei HomeBridge, er findet auch die Geräte des entsprechenden Raums), jedoch habe ich nun das Problem, dass wenn ich das Alexa-Modul definiere ("define alexa alexa"), ich dort als Status nur den Status bekomme "stopped; alexa-fhem not installed. install with 'sudo npm install -g alexa-fhem'.". Scheinbar sucht er nur auf dem lokalen System nach Alexa-FHEM.
Ich benötige dieses Modul für die "klassische" Weise mit eigenem Skill etc. auch eigentlich nicht, allerdings möchte ich im Zuge des Neuaufbaus der Haussteuerung auf den FHEM-Connector umsteigen und dafür wiederum brauche ich das "Alexa"-Modul.

Daher nun meine Frage:
Wie gebe ich dem "Alexa"-Modul die IP und den Port des Rechners mit, auf dem mein Alexa-FHEM läuft, sofern er nicht localhost/127.0.0.1 ist?

Viele Grüße und danke fürs Lesen! :)
Patrick

justme1968

entweder alexaFHEM-host setzen und den autostart verwenden oder disable und ohne autostart arbeiten
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Pati_Alpha

#2
Hey,

danke für deine Hilfe!
Ah, das attribut "alexaFHEM-host" hatte ich in der Doku garnicht gesehen.

Ich hab es nun so gesetzt:
attr alexa alexaFHEM-host 10.0.0.222
Das ist natürlich die IP der VM auf dem alexa-fhem läuft.

Dann hab ich im FHEM Log festgestellt, dass er da mit ssh nicht drauf kam, also habe ich auf der alexa-fhem-vm den User "fhem" noch angelegt und ihm per rsa-keypair ssh-Zugang ohne Passwort ermöglicht.
Nun scheint mir das laut FHEM-Log zu klappen, allerdings kriege ich jetzt das hier:

2019.03.23 11:47:51 2: alexa: starting alexa-fhem: /usr/bin/ssh 10.0.0.222  -c /tmp/alexa-fhem.cfg
2019.03.23 11:47:51 3: alexa: starting
2019.03.23 11:47:51 3: alexa: using logfile: ./log/alexa-2019-03-23.log
2019.03.23 11:47:51 3: alexa: read: end of file reached while sysread
2019.03.23 11:47:51 3: alexa: stopped


Woran kann das liegen?
Legt er die "alexa-fhem.cfg" selbst an? Denn die existiert auf der alexa-fhem-vm tatsächlich. Ich habe dort auch die IP von FHEM angepasst, aber diese Meldung blieb gleich. (EDIT: Ich glaube ja, er legt sie automatisch an. Daher ist der owner des files auch der user "fhem", den ich eben erst angelegt habe.)
Merkwürdig finde ich, dass ich alexa-fhem ja vorher schon konfiguriert habe, aber das mit der /home/alexafhem/.alexa/config.json
(EDIT: Ich habe nun auch mal die Config aus der config.json in die andere Datei kopiert, hat an der Meldung im Log aber nichts geändert.)

Kannst du mir hier nochmal weiterhelfen?   :-\

Patrick

justme1968

ja. er erzeugt lokal ein config file und kopiert das nach remote.

entweder nimmst machst du autostart über das modul und stellst auch das config file unter fhem verwaltung oder du schaltest den autostatt mir disable ab.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Pati_Alpha

Hey,

danke für deine Antwort.

Also das mit dem Config-File habe ich nun gecheckt: Er kopiert es immer erst von der FHEM-Maschine herüber. Dort liegt es per default in
/opt/fhem/alexa-fhem.cfg

Soweit so gut. Da habe ich nun meinen FHEM-Host etc. eingetragen.
Ich habe aber nun festgestellt, dass die ganze SSH-Geschichte nicht zu funktionieren scheint!
Laut Log setzt er folgenden Befehl ab:
2019.03.24 19:05:30 3: alexa: using ssh cmd /usr/bin/ssh fhem@10.0.0.222
2019.03.24 19:05:30 2: alexa: starting alexa-fhem: /usr/bin/ssh fhem@10.0.0.222  -c /tmp/alexa-fhem.cfg
2019.03.24 19:05:30 3: alexa: starting
2019.03.24 19:05:30 3: alexa: using logfile: ./log/alexa-2019-03-24.log
2019.03.24 19:05:30 3: alexa: read: end of file reached while sysread
2019.03.24 19:05:30 3: alexa: stopped


Wie man hier sieht, versucht er mit
/usr/bin/ssh fhem@10.0.0.222  -c /tmp/alexa-fhem.cfg
etwas auf der Alexa-FHEM-VM zu bewirken. Nun kriegt er aber laut alexaFHEM-log das folgende zurück:
Unknown cipher type '/tmp/alexa-fhem.cfg'
und das ist auch genau das, was ich bekomme wenn ich den obigen ssh-Befehl selbst ausführe.

Der Fehler macht meiner Meinung nach aber auch Sinn, denn ssh -c erwartet als Option einen Cipher-type, kriegt hier aber "/tmp/alexa-fhem.cfg.
Irgendwie scheint hier in dem SSH-Modus noch ein ärgeres Problem zu sein? :/
Müsste da nicht sowas stehen wie:
/usr/bin/ssh fhem@10.0.0.222  /opt/fhem/alexa-fhem/bin/alexa -U /tmp/alexa-fhem.cfg
damit er über SSH alexa-fhem auf dem remote-Rechner mit der entsprechenden Config startet?

Meine Device-Config sieht bis auf die hier nicht relevanten Dinge wie Icon etc. so aus:
define alexa alexa
attr alexa alexaFHEM-host 10.0.0.222
attr alexa alexaFHEM-sshUser fhem
attr alexa alexaFHEM-config ./alexa-fhem.cfg
attr alexa alexaFHEM-log ./log/alexa-%Y-%m-%d.log



Sorry, dass ich hier so verloren bin, aber ich glaube er kommt aktuell garnicht dazu das config-file zu verwenden.


Patrick

Pati_Alpha

Nachtrag:
Kann es sein, dass im Code:
  if( my $config = AttrVal($name, 'alexaFHEM-config', undef ) ) {
501     if( $ssh_cmd ) {
502       qx( $ssh_cmd "cat > /tmp/alexa-fhem.cfg" < $config );
503       $cmd .= " -c /tmp/alexa-fhem.cfg";
504     } else {
505       $cmd .= " -c $config";
506     }


das -c mit einem -U ersetzt werden muss und dann nur den Pfad angeben sollte "/tmp"?
Denn mit -U gibt man bei "alexa" an, welchen User-Pfad es verwenden soll und wo entsprechend die Config liegt.
"-c" kennt der Dienst garnicht.

Dann wäre es:
  if( my $config = AttrVal($name, 'alexaFHEM-config', undef ) ) {
501     if( $ssh_cmd ) {
502       qx( $ssh_cmd "cat > /tmp/alexa-fhem.cfg" < $config );
503       $cmd .= " -U /tmp/";
504     } else {
505       $cmd .= " -U $config";
506     }

justme1968

-c ist der parameter um alexa-fhem ein config file anzugeben.


nein. es macht eigentlich keinen sinn. alle parameter nach dem kommando sollte ssh an das kommando sollte ssh an das kommando weiter geben und nicht selber auswerten. alles andere wäre ja auch blöd weil man dann keine einzige option remote verwenden kann die es für ssh ebenfalls gibt.

was ist das für system und was für eine ssh version?

mal abgesehen davon: was versprichst du dir von einer extra vm?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Pati_Alpha

Das Problem ist ja, dass er garkeinen Befehl angibt!
Der gesamte Befehl, den SSH an die andere Maschine weitergibt ist "-c /tmp/alexa-fhem.cfg".

Und wenn ich alexa --help mache, kennt er in der Version 0.4.4 laut der Ausgabe "-c" nicht, nur "-U". So wird auch im Systemd-Service das alternative Verzeichnis in dem die Config liegt angegeben.


Danke dir!
Patrick

justme1968

ups. du hast recht. hab ich übersehen.

0.4.4 ist uralt. aktuell ist 0.5.26.

das executable heisst seit langem alexa-fhem. nicht mehr alexa.

falls alexa-fhem immer noch nicht automatisch gefunden wird musst du das kommando über alexaFHEM-cmd angeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Pati_Alpha

Passt du das im Repo dann an, sodass man das übers FHEM-Update neu ziehen kann?

Ach krass, da musste ich erstmal nachforschen, wie ich denn bei 0.4.4 hängen geblieben bin, wo ich ja neulich erst neu aufgesetzt habe!
Im Wiki-Artikel zu Alexa-Fhem steht der Post hier verlinkt und dort ist noch die 0.4.4 hinterlegt:
https://forum.fhem.de/index.php/topic,81324.msg733986.html#msg733986

Ich werde das dringend updaten und wenn dein Fix da ist nochmal hier zwecks Vollständigkeit berichten.


Danke dir schon mal!! :)

justme1968

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

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

Pati_Alpha

Ahja, alles klar!
Habs installiert. Ich warte bis die Anpassung am ssh-Befehl drin ist, teste es und melde mich dann wieder.

Danke dir! :)

justme1968

wenn alles aktuell ist braucht es keine anpassung. es sollte alles gehen wie es ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Pati_Alpha

Ich dachte es müsste erst noch gefixt werden, dass per SSH auch wirklich ein Befehl abgesetzt wird und nicht nur "-c ..." übergeben wird?

justme1968

das modul sucht per ssh auf dem ziel host nach alexa-fhem als executable und started dieses. da es bei dir kein alexa-fhem gab wird nichts gefunden und nichts übergeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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