Alexa-fhem als Dienst

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

Vorheriges Thema - Nächstes Thema

d.stratmann

Hallo,

ich habe mich an dem Wiki Eintrag langgehangelt, habe aber einen Fehler beim Einrichten bzw. eigentlich beim Starten des Dienstes.

Ich bekomme dort den Fehler: ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS (code=exited, status=1/FAILURE)

Wenn ich das jetzt richtig herausgefunden habe druch Testen mit dem direkten Befehl "/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS" auf der Console wird dann angezeigt, dass er die key file nicht findet.
Gibts hier auch einen Parameter für die key-file?

MadMax-FHEM

Statt zu beschreiben was auf der Console kommt poste doch einfach GENAU was kommt, also copy+paste hier in code-Tags (das # im Menu)...
...am besten noch mit genau dem Befehl den du eingibst und als welcher User du das tust.

Auf welchem System?

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)

d.stratmann

Hallo Joachim,

System ist ein Debian 8 (ist eine VM)
Benutzer bei der Installation und Ausführung war root

sudo systemctl status alexa:
● alexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sa 2017-05-06 20:             55:14 CEST; 2s ago
  Process: 779 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS (code=exited             , status=1/FAILURE)
Main PID: 779 (code=exited, status=1/FAILURE)


/opt/fhem/alexa-fhem/bin/alexa -U /opt/fhem/alexa-fhem/
[2017-05-06 20:57:11] using /opt/fhem/alexa-fhem/config.json
[2017-05-06 20:57:11] ---
[2017-05-06 20:57:11] this is alexa-fhem 0.3.4
fs.js:549
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: ENOENT: no such file or directory, open './key.pem'
    at Error (native)
    at Object.fs.openSync (fs.js:549:18)
    at Object.fs.readFileSync (fs.js:397:15)
    at Server.startServer (/opt/fhem/alexa-fhem/lib/server.js:119:15)
    at Server.run (/opt/fhem/alexa-fhem/lib/server.js:240:8)
    at module.exports (/opt/fhem/alexa-fhem/lib/cli.js:30:10)
    at Object.<anonymous> (/opt/fhem/alexa-fhem/bin/alexa:17:22)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)


Wenn ich das jetzt richtig intepretiert habe, wird der Dienste ja aus dem "Wurzelverzeichnis" gestartet und kann natürlich die key file nicht finden.Ich habe dann zum testen die key und cert direkt ins Wurzelverzeichnis der HDD kopiert und dann funktioniert es, also Dienst startet und Sprachbefehle werden verarbeitet!

Daher die Frage, gibts nicht auch einen Parameter für die Pfadangabe für die key und cert?

amenomade

Ich glaube, ich habe ein ähnliches Problem : https://forum.fhem.de/index.php/topic,60452.msg631255.html#msg631255
Dewegen habe ich folgendes versucht:
WorkingDirectory=/opt/fhem/alexa-fhem # test falls die irgendwas mit relativ Path sucht. Ohne diese Linie funktioniert auch nicht


Leider ohne Erfolg.
Gruß
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

Die Frage ist: was bedeutet ./key.pem?

. = Homedir vom User in alexa.service?
. = Homedir vom User, der alexa startet (im Fall von systemd vermutlich /root - ich habe aber auch veruscht, die *.pem in /root zu kopieren, ohne Erfolg
. = /etc/default ?
. = ???

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

d.stratmann

@amenomade

Kopier die key mal eine Ebene höher, dann sollte es gehen, halte ich aber persönlich für keine tolle Option, daher die Frage nach einem Parameter zur Angabe des Pfades.

amenomade

Welche Ebene? Konkret in welchem Verzeichnis?

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

d.stratmann

Direkt unter sda
Bzw. für Windows direkt unter C:

MadMax-FHEM

#8
Hallo,

ich habe ja noch nicht viel mit systemd gearbeitet, bei mir läuft es noch mit dem Startscript unter /etc/init.d/

Aber dort wird explizit angegeben von wo gestartet werden soll...
...also das ./key.pem etc. bezieht sich halt immer darauf "wo" der User gerade "steht"...
Bei euch wohl unter '/' also "root"...

Evtl. geht es wenn ihr folgendes in das "Startscript" einfügt:

ExecStartPre=cd /opt/fhem/alexa-fhem/
(bzw. halt den Pfad anpassen)


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

[Service]
Type=simple
User=alexa #oder ein anderer Benutzer wie fhem
EnvironmentFile=/etc/default/alexa
# oder wo auch immer eure alexa-fhem liegt
ExecStartPre=cd /opt/fhem/alexa-fhem/
ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target



Dann "steht" der User evtl./hoffentlich bereits dort wo die Dateien mittels ./key.pem etc. gefunden werden...

Vielleicht auch (da es heißt immer vollen Pfad zum "Programm/Befehl") mal 'which cd' eingeben und dann den vollen Pfad von 'cd' statt nur 'cd'...

Ob es bei den Aufrufen eine Möglichkeit der Pfadangabe gibt weiß ich leider nicht...

EDIT: oder den "Parameter" WorkingDirectory=/opt/fhem/alexa-fhem/ siehe auch hier: https://wiki.ubuntuusers.de/systemd/Service_Units/

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)

amenomade

#9
Wie oben schon gesagt: WorkingDirectory geht nicht. Ich prüfe mit ExecStartPre.

Gruß

EDIT: Ne, ExecStartPre hilft nicht:
pi@raspberrypi:/etc/systemd/system $ sudo leafpad alexa.service
pi@raspberrypi:/etc/systemd/system $ sudo systemctl stop alexa
Warning: Unit file of alexa.service changed on disk, 'systemctl daemon-reload' recommended.
pi@raspberrypi:/etc/systemd/system $ sudo systemctl daemon-reload
pi@raspberrypi:/etc/systemd/system $ sudo systemctl start alexa
pi@raspberrypi:/etc/systemd/system $ sudo systemctl status alexa
● alexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since dim. 2017-05-07 00:46:30 CEST; 5s ago
  Process: 20058 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -D -U /home/pi/.alexa (code=exited, status=217/USER)
Main PID: 20058 (code=exited, status=217/USER)


Jetzt versuche ich mit *.pem in /
EDIT: mit key.pem, cert.pem und config.json in /, geht auch nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

vbs

Weiß nicht obs hilft, aber so sieht das Script bei mir aus (funktionierend):
[Unit]
Description=Alexa FHEM Bridge
Documentation=

[Service]
Type=simple
User=alexa
Restart=on-failure
PermissionsStartOnly=true
PIDFile=/var/run/alexa-fhem.pid
WorkingDirectory=/opt/minion/etc/alexa-fhem
ExecStart=/opt/alexa-fhem/bin/alexa -U /opt/minion/etc/alexa-fhem -D


In "/opt/alexa-fhem" liegt alexa-fhem und in "/opt/minion/etc/alexa-fhem" liegt:
-rw-r--r--  1 alexa vbs  1391 Feb  3 20:32 cert.pem
-rw-r--r--  1 alexa vbs   520 Feb 19 19:17 config.json
-rw-r--r--  1 alexa vbs   573 Feb 19 15:59 config-sample.json
-rw-r--r--  1 alexa vbs  1675 Feb  3 20:32 key.pem

MadMax-FHEM

Dem Link bist du gefolgt und hast gelesen wie man die Datei bearbeiten muss!?

Wie gesagt ich mache nicht viel mit systemd aber auch bei anderen Config-Dateien unter Linux reicht es oft nicht einfach nur die Datei (Inhalt) zu ändern...

Wenn das beachtet wurde und auch nicht hilft, dann kann ich leider nicht mehr helfen...

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)

amenomade

#12
Hab's geschaft mit
[Service]
Type=simple
User=pi
WorkingDirectory=/opt/fhem/alexa-fhem
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/pi/.alexa


Jetzt läuft es unter User pi und nicht alexa. Aber ich bin schon mal weiter, danke! Jetzt glaube ich, dass mein Problem ist, dass der User alexa kein Zugriff u.a. auf /home/pi hat.

Zur Info, ExecStartPre=cd <verzeichnis> kann nicht funktionieren, da dieses Parameter nur absolute Path nimmt, und cd "nur" ein Teil des Shells ist.

Gruß

EDIT:
Jepp das war es
. Danke an euch beide. @vbs: dein ls auf /opt/minion/etc/alexa-fhem hat mir den Hinweis gegeben!

Jetzt läuft es mit:

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

[Service]
Type=simple
User=alexa
WorkingDirectory=/opt/fhem/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


/home/alexa/.alexa:
-rw-r--r-- 1 alexa alexa 1216 mai    7 02:14 cert.pem
-rw-r--r-- 1 alexa alexa  652 mai    7 02:14 config.json
-r-------- 1 alexa alexa 1679 mai    7 02:14 key.pem


Mensch... zwei Tage verloren mit diesem Anfängerfehler!
Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

d.stratmann

Danke,

der Eintrag WorkingDirectory führte zum gewünschten Ergebniss!

juemuc

#14
Hallo,

leider bekomme ich auch diese Fehlermeldung:
Zitatalexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since So 2017-07-30 21:57:29 CEST; 405ms ago
  Process: 2059 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)
Main PID: 2059 (code=exited, status=217/USER)

Jul 30 21:57:29 raspberrypi systemd[1]: Unit alexa.service entered failed state.

Ich habe schon alle Tipps, die hier gegeben wurden, ausprobiert, aber leider keinen Erfolg gehabt. Manuell kann ich alexa-fhem über ./bin/alexa starten.

Die Datei config.json liegt im Homeverzeichnis des Users pi. Alles andere im Verzeichnis /opt/fhem/alexa-fhem/ bzw in den im Wiki angegebenen Verzeichnissen. Wer hat eine Idee?

Vielleicht hilft noch folgende Info. Im Gegensatz zur Beschreibung im Wiki musste ich alle Schritte mit "sudo" durchführen, da sonst die Installation nicht möglich war (keine Rechte).

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).

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)

PingPong

Hallo Joachim,

äh ja... das Verzeichnis und damit der Befehl waren deppert... Klar, es geht um das Log-Verzeichnis. Hatte ich ja auch geschrieben :o
Den Versuch, das Ganze mit dem User fhem zu starten, habe ich auch schon gemacht - jedoch hier die gleiche Fehlermeldung erhalten.

Habe jetzt den Logpfad angepasst, da mir persönlich das jetzt am einfachsten erschien. Funktioniert jetzt - ich danke Dir.

Gruß
Marc

MadMax-FHEM

Na dann viel Spaß weiterhin!

Und sorry, dass ich hier keine Linux-Befehle poste...
Oder nur "ungefährliche" um system-Dinge "abzufragen"...

Ja ist wohl die einfachste und auch "ungefährlichste" Lösung...

Wenn dann mal die Linux-Kenntnisse mehr geworden sind (sollte das Ziel sein), dann kann man ja noch mal "optimieren"...

Je nach System (Stretch) kann auch (irgendwann mal) auf systemd umgestellt werden.
Dann evtl. noch das fhem-Modul zum Steuern von Diensten: https://forum.fhem.de/index.php?topic=79952.0

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

Ja danke.... Den habe ich - zumindest solange es halbwegs klappt :-)
Alles gut, Dein Hinweis hat ja letztendlich zum Erfolg geführt. Ja, habe ich auch als einfachste und riskoärmste Variante eingeschätzt.
Via systemd hatte ich es auch kurz versucht - aber wie gesagt bzgl. Linux bin ich echt noch völlig unbedarft.
Bin jetzt froh, dass es läuft und werde jetzt erstmal ein paar Geräte hinzufügen und mich anschließend Tablet UI widmen.
Linux steht in meiner "Muss-ich-noch-lernen" Liste weiter hinten :-)

Ganz lieben Dank nochmal und viele Grüße
Marc