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

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

Vorheriges Thema - Nächstes Thema

desmoloch

ah und das FHEM.Alexa Start und Stop kommt nicht mit einem @ zurecht:

2019.01.02 22:34:48 1: PERL WARNING: Possible unintended interpolation of @appstore in string at (eval 312694) line 1.
2019.01.02 22:34:48 3: eval: {system ("/volume1/@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 &")}
2019.01.02 22:34:48 1: ERROR evaluating {system ("/volume1/@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 &")}: Global symbol "@appstore" requires explicit package name (did you forget to declare "my @appstore"?) at (eval 312694) line 1.

2019.01.02 22:34:48 2: FHEM.Alexa.DOIF: {system ("/volume1/@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 &")}: Global symbol "@appstore" requires explicit package name (did you forget to declare "my @appstore"?) at (eval 312694) line 1.


Bei Synology landen die Sachen halt immer im dir @appstore :)
Habe alexa-fhem einfach per Hand gestartet.

gvzdus

Perl und das @-Zeichen werden wohl nie Freunde. Könntest Du mal gucken, ob, wenn Du per Hand das FHEM.Alexa.DOIF "patcht", und das "@" durch ein "\@" ersetzt, die Welt besser wird? Dann würde ich das unsägliche Zeichen im Installer escapen...

desmoloch

Zitat von: gvzdus am 02 Januar 2019, 22:42:15
Perl und das @-Zeichen werden wohl nie Freunde. Könntest Du mal gucken, ob, wenn Du per Hand das FHEM.Alexa.DOIF "patcht", und das "@" durch ein "\@" ersetzt, die Welt besser wird? Dann würde ich das unsägliche Zeichen im Installer escapen...

Dann bekomme ich -1 (hat nicht geklappt?!):
2019.01.02 22:44:39 2: FHEM.Alexa.DOIF: {system ("/volume1/\@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 &")}: -1

Ich bekomme momentan alexa-fhem nicht so richtig gestartet. Es gibt auch keinen ssh Prozess... Ich probiere noch.

gvzdus

-1 ist normal.

Spannender wäre /tmp/alexa.stdout.log - ich vermute, da steht was drin.
Der Pfad zu SSH wird aus der config.json unter "~/.alexa/config.json" ausgelesen, das Fehlerlog vom SSH-Start wandert in die normalen Logdateien von Alexa-FHEM.

MarkusN

Zitat von: gvzdus am 02 Januar 2019, 22:14:08
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.

Läuft! Das Problem war dass mein erstes Device durchaus erkannt wurde, aber keine set befehle erkannt wurden:
2019-01-02T21:41:25.687Z info server.js: doif_modus_beleuchtung_keller is light
2019-01-02T21:41:25.688Z info server.js: doif_modus_beleuchtung_keller has


Das liegt daran dass dieses doif als setlist "modus:on,auto,off" hat. Gehe ich richtig in der Annahme dass ich das mit dem Attribut homebridgeMapping "übersetzen" muss? Am Ende soll das ein einfacher Switch sein der entweder auf on oder off schaltet, auto spielt in dem Fall keine Rolle.

RoBra81

Guten Abend,

Ich bin aktuell am überlegen, dies auch einmal auszuprobieren. Gehe ich recht in der Annahme, dass das im Wiki beschriebene install die fhem.cfg ändert? Wenn ja, wie gehe ich vor, wenn ich nicht mit der fhem.cfg, sondern mit ConfigDB arbeite?

Ronny

Gesendet von meinem LYA-L29 mit Tapatalk


desmoloch

#36
Zitat von: gvzdus am 02 Januar 2019, 22:50:19
-1 ist normal.

Spannender wäre /tmp/alexa.stdout.log - ich vermute, da steht was drin.
Der Pfad zu SSH wird aus der config.json unter "~/.alexa/config.json" ausgelesen, das Fehlerlog vom SSH-Start wandert in die normalen Logdateien von Alexa-FHEM.

hm das ist sehr komisch.
Dies passiert beim Start (fhem log):
2019.01.02 22:52:54 2: FHEM.Alexa.DOIF: {system ("/volume1/\@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 &")}: -1

Folgende Prozesse laufen dann (ps -ef | egrep '(alexa|ssh)'):

admin@DiskStation:/tmp$ ps -ef | egrep '(alexa|ssh)'
admin     1297 21018  0 22:53 pts/24   00:00:00 grep -E (alexa|ssh)
root     20923     1  0  2018 ?        00:00:00 /usr/bin/sshd
root     20990 20923  0 22:06 ?        00:00:00 sshd: admin [priv]
root     21017 20990  0 22:06 ?        00:00:00 sshd: admin@pts/24
admin@DiskStation:/tmp$


kein Alexa und kein ssh. In der  alexa.stdout.log steht nichts drin. Die Datei ist leer.
Ein ausführen von /volume1/\@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa > /tmp/alexa.stdout.log 2>&1 & bringt mir auf der Konsole die pid 2729 zurück.
Nun läuft auch was alexa-fhem und der ssh:
admin@DiskStation:/tmp$ ps -ef | egrep '(alexa|ssh)'                            admin     2729 21018  2 22:56 pts/24   00:00:01 alexa
admin     2967  2729  0 22:56 pts/24   00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:3000 -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de
admin     3438 21018  0 22:57 pts/24   00:00:00 grep -E (alexa|ssh)
root     20923     1  0  2018 ?        00:00:00 /usr/bin/sshd
root     20990 20923  0 22:06 ?        00:00:00 sshd: admin [priv]
root     21017 20990  0 22:06 ?        00:00:00 sshd: admin@pts/24


In der log Datei ist nun logischweise auch etwas drin :) (normaler alexa-fhem Kram).
Versuche ich nun ein stop über FHEM:
2019.01.02 23:00:02 2: FHEM.Alexa.DOIF: {system ("/volume1/\@appstore/fhem/fhem-5.6/alexa-fhem/bin/alexa -k > /dev/null 2>&1 &")}: -1
Allerdings bleiben die Prozesse bestehen und im log tut sich nichts.

Mir ist eben noch aufgefallen das mein fhem mit root läuft und alexa-fhem und der ssh mit admin:
admin     2967  2729  0 22:56 pts/24   00:00:00 /usr/bin/ssh -R 1234:127.0.0.1:3000 -oServerAliveInterval=90 -p 58824 fhem-va.fhem.de
admin     6670 21018  0 23:02 pts/24   00:00:00 grep --color=auto fhem
root     15091     1  1  2018 ?        02:21:16 perl /volume1/@appstore/fhem/fhem-5.6/fhem.pl /volume1/@appstore/fhem/fhem-5.6/fhem.cfg
root     15119 15091  0  2018 ?        00:00:07 perl /volume1/@appstore/fhem/fhem-5.6/fhem.pl /volume1/@appstore/fhem/fhem-5.6/fhem.cfg


Ist das ein Problem?

//edit:
starte ich mit sudo kommt folgendes im stdout log
2019-01-02T22:19:26.343Z error undefined: ENOENT: no such file or directory, open '/root/.alexa/alexa.pid'
Wenn ich ohne sudo als admin starte dann geht es.



gvzdus

@MarkusN:
Das liegt daran dass dieses doif als setlist "modus:on,auto,off" hat. Gehe ich richtig in der Annahme dass ich das mit dem Attribut homebridgeMapping "übersetzen" muss? Am Ende soll das ein einfacher Switch sein der entweder auf on oder off schaltet, auto spielt in dem Fall keine Rolle.

Ich hatte das Glück, dass bei mir sehr viel von Beginn an lief. "FHEMlazy" ist ja eher eine Connectivity-Lösung, die Logik für die Geräte ist immer noch fast durchgängig Andres Version 0.4.4 von vor 1 Jahr. Wie das, was von FHEM gelesen wird, auf die Welt von Alexa gemappt wird, wird im Kern in der fhem.js ab Zeile 1620 entschieden. Im Prinzip willst Du, dass das Gerät im Alexa-Sinne als "PowerController" (an/aus) klassifiziert wird. Ein Stupser in die richtige Richtung könnte "genericDeviceType=blind" als Attribut sein, das hilft manchmal.

gvzdus

@RoBra81: Alle Konfigurationsänderungen erfolgen über FHEM-Kommandos, nicht direkt in irgendwelche Dateien. Daher sollte egal sein, ob FHEM in eine Datei oder DB schreibt. Außerdem: Es werden nur die im Wiki genannten 4 Devices angefasst bzw. angelegt. Sofern Du kein bestehendes, laufendes System mit Alexa hast, solltest Du danach nicht unglücklicher als vorher sein. "Manuelles" Aufräumen wäre die 4 Devices aus dem Wiki wieder zu löschen.

desmoloch

#39
Kleiner Hinweis zu eurem DOIF: Wenn man etwas verändert hat und beim Dummy "Reload" drückt (und er stand vorher schon auf reload) passiert... NICHTS :)
Warum? Es stand schon vorher im Dummy "Reload" (meinetwegen ein paar Stunden alt) und somit wird das DOIF nicht ausgelöst (es steht schon auf cmd 3). Ich bin jetzt kein DOIF Experte, aber ich denke ein do always sollte helfen :)

punker

Hi,

wollte heute auch die alexa-fhem installieren.
Es funktionieren auch alle Schritte aus dem Wiki bis auf "bin/alexa -A"
Hier kommt folgendes:
fhem@fhembanana:~/alexa-fhem$ bin/alexa -A
config.json not existing, creating from the scratch
/opt/fhem/alexa-fhem/lib/user.js:359
          Object.keys(response.headers).forEach((key) => {
                               ^

TypeError: Cannot read property 'headers' of undefined
    at Request.request [as _callback] (/opt/fhem/alexa-fhem/lib/user.js:359:32)
    at self.callback (/opt/fhem/alexa-fhem/node_modules/request/request.js:185:22)
    at Request.emit (events.js:188:13)
    at Request.onRequestError (/opt/fhem/alexa-fhem/node_modules/request/request.js:881:8)
    at ClientRequest.emit (events.js:188:13)
    at Socket.socketErrorListener (_http_client.js:399:9)
    at Socket.emit (events.js:188:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process.internalTickCallback (internal/process/next_tick.js:72:19)

Woran scheitert es?
Hab mal folgende config.json händisch eingefügt:
{
  "alexa": {
    "port": 3000,
    "name": "Alexa",
    "bind-ip": "127.0.0.1",
    "ssl": false,
    "publicSkill": true,
    "ssh": "/usr/bin/ssh"
  },


Fehler kommt aber trotzdem!
LG

Dieter

The truth is out there!

gvzdus

Mein Code ist grottig ... Wird heute Abend gefixt.
Konkret läuft Dein FHEM nicht auf 127.0.0.1:8083 ohne Authentifizierung. Wenn Du noch die andere Hälfte der config.json hinzufügst:

{
  "alexa": {
    "port": 3000,
    "name": "Alexa",
    "bind-ip": "127.0.0.1",
    "ssl": false,
    "publicSkill": true,
    "ssh": "/usr/bin/ssh"
  },
  "connections": [
    {
      "server": "127.0.0.1",
      "port": 8083,
      "name": "FHEM",
      "filter": "alexaName=...*",
      "ssl": false,
      "base_url": "http://127.0.0.1:8083/fhem",
      "auth": {"user": "FIXME", "password": "FIXME"}
    }
  ]
}


und connnection an Deine lokalen FHEM-Gegenheiten anpasst, sollte "bin/alexa -A" durchlaufen.

[P.S.] Soeben den JSON-Block noch gefixt, da war ein Semikolon drin.

punker

Also ich hab jetzt mal folgendes in die config.json eingetragen:
{
  "alexa": {
    "port": 3000,
    "name": "Alexa",
    "bind-ip": "192.168.2.22",
    "ssl": false,
    "publicSkill": true,
    "ssh": "/usr/bin/ssh"
  },
  "connections": [
    {
      "server": "192.168.2.22",
      "port": 8083,
      "name": "FHEM",
      "filter": "alexaName=...*",
      "ssl": false,
      "base_url": "http://192.168.2.22:8083/fhem",
      "auth": {"user": "xxxxxx", "password": "xxxxxxxx"};
    }
  ]
}


funzt aber trotzdem nicht!
Hab auch mal ssl: true und https probiert - leider ohne Erfolg!
LG

Dieter

The truth is out there!

RoBra81

Hallo,

ich habe es nun auch mal probieren wollen, aber leider läuft der Installer nicht durch. Hier mal die relevanten Zeilen der Konsole:


fhem@homeserver:~/alexa-fhem$ cat ../.alexa/config.json
{
  "alexa": {
    "port": 3000,
    "name": "Alexa",
    "bind-ip": "127.0.0.1",
    "ssl": false,
    "publicSkill": true,
    "ssh": "/usr/bin/ssh"
  },
  "connections": [
    {
      "server": "127.0.0.1",
      "port": 8083,
      "name": "FHEM",
      "filter": "alexaName=...*",
      "ssl": false,
      "base_url": "http://127.0.0.1:8083/fhem",
      "auth": {
        "user": "xxxx",
        "password": "xxxx"
      }
    }
  ]
}
fhem@homeserver:~/alexa-fhem$ bin/alexa -A
FHEM-Connectivity fine, CSRF-Token: undefined
Random hash: xxxx
Your SSH key needs to get registered. Please read the privacy instructions here:
  https://va.fhem.de/privacy/
... and the press Enter to register your key.
Okay to register your public SSH-Key at fhem-va.fhem.de? [Hit Enter for okay, 'n' else]
2019-01-03T13:23:40.922Z info undefined:   executing: http://127.0.0.1:8083/fhem?cmd=jsonlist2%20TYPE%3Dalexa&XHR=1
/opt/fhem/alexa-fhem/lib/user.js:386
            log('There was a problem connecting to FHEM (' + url + ').');
            ^

TypeError: log is not a function
    at Request._callback (/opt/fhem/alexa-fhem/lib/user.js:386:13)
    at Request.self.callback (/opt/fhem/alexa-fhem/node_modules/request/request.js:185:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (/opt/fhem/alexa-fhem/node_modules/request/request.js:1161:10)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> (/opt/fhem/alexa-fhem/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)


Woran kann das liegen?

Vielen Dank
Ronny

Lucky2k12

Genau so wie bei Ronny sieht es auch bei mir aus.
FHEM user und PW sind eingetragen.
Wenn ich heimkomme prüfe ich mal auf Semikolons in config.json...
HP T610, HM, Jeelink, LGW, mapleCUL868+434