Alexa-fhem als Dienst

Begonnen von d.stratmann, 06 Mai 2017, 19:46:15

Vorheriges Thema - Nächstes Thema

amenomade

#15
EDIT 05.08: Link gelöscht, da das Bild falsch war. Korrektur ein bisschen weiter in diesem Thread
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

juemuc

Hallo,

habe alle Rechte, wie im Schaubild beschrieben, gesetzt. Leider ohne Erfolg. Ich befürchte,  das Problem beginnt schon vorher, da ich alle Befehle aus dem Wiki (z.B. npm install) nur als root-User (also mit sudo) ausführen kann. Damit haben wahrscheinlich viele Dateien die falschen Rechte.

Hat bei dir die Installation von nodejs ohne Root-Rechte funktioniert?

VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

amenomade

ZitatHat bei dir die Installation von nodejs ohne Root-Rechte funktioniert?
Nein. Wie im Wiki beschrieben, sprich mit "sudo".
Aber alexa-fhem ja ohne root (npm).

Was hast Du im config.json (ohne deine Credentials)?
Was hast Du in alexa.service?
Mach mal ein "ls -la" von den entspr. Verzeichnisse.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

juemuc

Hallo,

hier die gewünschte Info
pi@raspberrypi:~/.alexa $ ls -la
insgesamt 20
drwxr-xr-x 2 root root 4096 Aug  4 22:08 .
drwxr-xr-x 4 pi   pi   4096 Aug  4 21:49 ..
-rw-r--r-- 1 pi   pi   1367 Aug  4 21:47 cert.pem
-rw-r--r-- 1 pi   pi    674 Aug  4 21:52 config.json
-rw-r--r-- 1 pi   pi   1675 Aug  4 21:48 key.pem


pi@raspberrypi:/opt/fhem/alexa-fhem $ ls -la
insgesamt 48
drwxr-xr-x  5 pi   pi   4096 Aug  4 22:08 .
drwxr-xr-x 12 root root 4096 Aug  4 21:44 ..
drwxr-xr-x  2 pi   pi   4096 Aug  4 21:41 bin
-rw-r--r--  1 pi   pi    573 Feb 19 19:24 config-sample.json
-rwxrwxr-x  1 pi   pi    150 Nov  5  2016 createKey.sh
-rw-rw-r--  1 pi   pi   1183 Dez 23  2016 lambda.js
drwxr-xr-x  2 pi   pi   4096 Aug  4 21:41 lib
drwxr-xr-x 70 pi   pi   4096 Aug  4 21:46 node_modules
-rw-rw-r--  1 pi   pi     33 Nov  5  2016 .npmignore
-rw-rw-r--  1 pi   pi    373 Apr 26 08:39 package.json
-rw-rw-r--  1 pi   pi   2830 Nov  8  2016 README.md
-rw-rw-r--  1 pi   pi   1597 Mär 13 08:38 TODO


alexa.service
[Unit]
Description=Node.js Alexa Server
After=syslog.target network-online.target

[Service]
Type=simple
User=pi #oder ein anderer Benutzer wie fhem
# oder wo auch immer eure alexa-fhem liegt
WorkingDirectory=/opt/fhem/alexa-fhem
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/pi/.alexa
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


config.json
{
    "alexa": {
        "port": 3000,
        "name": "Alexa FHEM",
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",
        "nat-pmp": "",
        "nat-upnp": false,
        "applicationId": "amzn1.ask.skill.xxxxxx",
        "oauthClientID": "amzn1.application-oa2-client.xxxxxxxx"
    },

    "connections": [
        {
            "name": "FHEM",
            "server": "127.0.0.1",
            "port": "8083",
            "webname": "fhem",
            "auth": {
             "user": "user",
             "pass": "password"
             },
            "filter": "room=Alexa"
        }
    ]
}



Ich bin ratlos.

VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

amenomade

#19
sudo chown pi:pi /home/pi/.alexa

Und wenn das nicht reicht, dann:
cp /home/pi/.alexa/*.pem /opt/fhem/alexa-fhem/(Ich bin jetzt nicht mehr sicher, ob die Zertifikate im home Verzeichnis des Benutzers, oder in WorkingDirectory sein müssen. Ich sehe gerade bei mir, dass die in beiden sind. Sag bitte Bescheid nach welcher Massnahme, es gelöst wird.

EDIT: hab ein paar Tests gemacht. Tatsächlich müssen die Zertifikate in /opt/fhem/alexa-fhem
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#20
Korrigiertes Bild und Erklärungen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

juemuc

Danke.

Nun funktioniert es  ;D

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

steffen83

Hallo,

nach mehr als 5 Stunden probieren und lesen komme ich nicht weiter und hoffe auf eure Hilfe!

/home/alexa/.alexa/config.json
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",


/home/alexa/.alexa $ ls -l
insgesamt 20
-rw-r--r-- 1 alexa alexa 1354 Jan  1 22:50 cert.pem
-rw-r--r-- 1 alexa alexa  666 Dez 30 00:10 config.backup
-rw-r--r-- 1 alexa alexa  590 Jan  1 23:05 config.json
-rw-r--r-- 1 alexa alexa  573 Dez 29 21:36 config-sample.json
-rw-r--r-- 1 alexa alexa 1679 Jan  1 22:50 key.pem


/opt/fhem/alexa-fhem $ ls -l
insgesamt 44
drwxr-xr-x  2 alexa alexa 4096 Jan  1 22:51 bin
-rw-r--r--  1 alexa alexa 1354 Jan  1 22:53 cert.pem
-rw-r--r--  1 alexa alexa  573 Dez 29 21:20 config-sample.json
-rwxr-xr-x  1 alexa alexa  150 Dez 29 21:20 createKey.sh
-rw-r--r--  1 alexa alexa 1679 Jan  1 22:53 key.pem
-rw-r--r--  1 alexa alexa 1183 Dez 29 21:20 lambda.js
drwxr-xr-x  2 alexa alexa 4096 Dez 29 22:24 lib
drwxr-xr-x 71 alexa alexa 4096 Dez 29 21:15 node_modules
-rw-r--r--  1 alexa alexa  373 Dez 29 21:20 package.json
-rw-r--r--  1 alexa alexa 2830 Dez 29 21:20 README.md
-rw-r--r--  1 alexa alexa 1597 Dez 29 21:20 TODO


/etc/systemd/system/alexa service

[Unit]
Description=Node.js Alexa Server
After=syslog.target network-online.target

[Service]
Type=simple
User=alexa
WorkingDirectory=/opt/alexa/alexa-fhem
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


Mit
/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa
Bekannte Fehlermeldung:
Error: ENOENT: no such file or directory, open './key.pem'


Ohne -U /home.... startet er zwar, aber das Autostart Script läuft nicht.
Ich hoffe ihr seht den Fehler  :'(
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

Tuxi70

FHEM und Alexa-FHEM werden bei mir mit systemctl gestartet.

Alexa-FHEM:
[Unit]
Description=Node.js Alexa Server
After=syslog.target network-online.target

[Service]
Type=simple
User=fhem
Group=dialout
WorkingDirectory=/srv/usb-hdd/raspberry/fhem/alexa-fhem
ExecStart=/srv/usb-hdd/raspberry/fhem/alexa-fhem/bin/alexa -U /srv/usb-hdd/raspberry/fhem/alexa-fhem/.alexa
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


und FHEM:
[Unit]
Description=FHEM Home Automation

[Service]
Type=forking
#WorkingDirectory=/opt/fhem
WorkingDirectory=/srv/usb-hdd/raspberry/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
Restart=always
RestartSec=5
User=fhem
Group=dialout

[Install]
WantedBy=multi-user.target


Da ich die Vermutung habe, dass die SD-Karte eine Macke hat, habe ich FHEM & Co. auf eine externe Platte gepackt.
FRITZ!Box: Fon WLAN 7560, FW: 7.0
James: Raspberry Pi 3 Alexa-Fhem 0.4.4 & FHEM 5.8 Latest Revision: 16799 & SVG-DBLog MySQL 3.10.8
Netz : VDSL 1&1 50.000 3x FRITZ!Powerline 530E FW: 1.4.0-00
Smarthome: 4x Comet DECT Thermostat Firmware: 3.68 8x FritzDECT200 Firmware: 4.08
Steuerung: Alexa

amenomade

@Steffen83: das ist m.A. falsch:WorkingDirectory=/opt/alexa/alexa-fhem

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

PingPong

Hallo zusammen,

ich hänge mich hier mal an und hoffe, dass mich hier jemand an die Hand nehmen kann. Komme aufgrund fehlender Linux Kenntnisse einfach nicht weiter.
Folgende Herausforderung:
Grundsätzlich läuft bei mir alexa-fhem. Ich kann den Dienst manuell via ./bin/alexa im Verzeichnis /opt/fhem/alexa-fhem stehend starten.
Allerdings schaffe ich es nicht, diesen Dienst per initd automatisiert starten zu lassen.

#!/bin/sh
### BEGIN INIT INFO
# Provides: alexa
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for alexa
# Description: Enable service provided by daemon.
### END INIT INFO
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
PID=`pidof alexa`
export ALEXAPATH="/opt/fhem/alexa-fhem"
export LOGPATH="/opt/fhem/log"
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
        echo "Alexa is already running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Alexa.Status info Alexa is already running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa.Status on"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa off"
else
        su - "pi" -c "cd $ALEXAPATH;./bin/alexa > $LOGPATH/alexa-`date +%Y-%m`.log 2>&1 &"
        echo "Alexa starting"
        sleep 2
$0 status
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
        echo "Alexa is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Alexa.Status info Alexa is not running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa off"
else
        kill $PID
        echo "Alexa closed"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Alexa.Status info Alexa closed"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa off"
fi
;;
restart)
if ! ps -p $PID > /dev/null 2>&1; then
        $0 start
else
        $0 stop
        $0 start
fi
;;
status)
if ps -p $PID > /dev/null 2>&1; then
        echo "Alexa is running PID $PID"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Alexa.Status info Alexa running as PID $PID"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa.Status on"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa off"
else
        echo "Alexa is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Alexa.Status info Alexa is not running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Alexa off"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
echo "script done"
exit 0



Wenn ich das richtig interpretiere liegt es (auch) an fehlenden Rechten
-su: /opt/fhem/log/alexa-2018-02.log: Permission denied

Könnte hier mal jemand mit mir bei 0 einsteigen?

steffen83

Hallo Ping Pong,

schau dir mal meinen Code oben an und korrigiere nur noch das WorkingDirectory=/opt/alexa/alexa-fhem

Dann hättest du ein Beispiel wo es funktioniert

Gruß
Steffen
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

MadMax-FHEM

Zitat von: steffen83 am 23 Februar 2018, 08:46:54
Hallo Ping Pong,

schau dir mal meinen Code oben an und korrigiere nur noch das WorkingDirectory=/opt/alexa/alexa-fhem

Dann hättest du ein Beispiel wo es funktioniert

Gruß
Steffen

PingPong nutzt initd nicht systemd!

@PingPong:

ja Rechteproblem.

User pi hat keine Schreibrechte in /opt/fhem/log

Entweder dem User pi dort berechtigen (aufnehmen in die Gruppe[n] die auch fhem hat / Rechte des Verzeichnisses anpassen / ...) oder die Logdatei an einen anderen Ort legen, also wo pi schreiben darf (/home/pi/...) oder mit dem User fhem starten...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

PingPong

Hallo,

vielen Dank für Eure schnellen Antworten.

jaja die Rechte :-) Hmm... Hast du vielleicht noch nen Tipp für mich, wie ich die Rechte anpassen muss?
so: sudo chown -R pi:pi /opt/fhem/alexa-fhem/  ??

LG
Marc

MadMax-FHEM

#29
Das Verzeichnis das du genannt hast ist NICHT das Problem!

EDIT1: und den geposteten Befehl KEINESFALLS ausführen!!!! Sonst wird (vermutlich) fhem nicht mehr laufen!!!!!

Es geht um /opt/fhem/log

Was du wahrscheinlich tun kannst: den LOGPATH nach /opt/fhem/alexa-fhem/log verlagern. Nicht vergessen: /opt/fhem/alexa-fhem/log anlegen! ;)

Oder wie geschrieben den User pi in die Gruppe(n) des Users fhem aufnehmen...

Oder die Rechte des Pfades /opt/fhem/log anpassen ABER: das nur der Vollständigkeithalber genannnt. NICHT TUN!! Denn sonst stimmt es evtl./wahrschinlich nicht mehr für fhem!!!

EDIT2: oder eben mit dem User 'fhem' statt 'pi' starten...

EDIT3: und ich werde dir sicher hier keinen Befehl posten! Ich werde dir nicht raten wie du dein System "verbiegen" sollst damit es (evtl.) läuft! Bitte die Möglichkeiten versuchen zu verstehen. Nachlesen was wie geht und was was (genau) macht. Und dann selbst die gewählte Variante umsetzen. Sorry.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)