Hoi Ihr,
inspiriert von Brause und Peter habe ich bei mir folgendes eingerichtet:
"Kleines" HowTo für Autostart Beta-Version
1.) sudoers Datei angepasst: Alias erstellen und User fhem berechtigen
Info: Alias benötigt man nur, wenn man plant den Benutzer fhem noch mehrere Befehle ausführen lassen zu können.
vi /etc/sudoers
# Cmnd alias specification
Cmnd_Alias FHEMEXEC = /opt/fhem/bin/send,/usr/bin/java,/usr/bin/screen
fhem ALL = NOPASSWD: FHEMEXEC
2.) hemmungslos Brauses init.d-Skript kopieren:
Achtung: Brause geht davon aus, dass ein aufgerufenen Bash-Skript hier liegt: /opt/java-Tradfri.sh
Wem das nicht passt, entsprechend unten ändern.
ich habe es folgendermassen erledigt, um etwaige Berechtigungen gleich richtig zu setzen:
cp -p /etc/init.d/fhem /etc/init.d/tradfri
vi /etc/init.d/tradfri
Brauses Skript kopieren und einfügen:
Ergänzung 01.08.2017:
Inhalt des kopierten fhem-files löschen via vi: "10000dd", löscht 10.000 Zeilen
Danach via copy&past Inhalte im "i" für insert-mode einfügen.
#!/bin/sh
### BEGIN INIT INFO
# Provides: tradfri
# Required-Start: $local_fs $remote_fs networking
# Required-Stop: $local_fs $remote_fs networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: FHEM - Tradfri-JAVA
# Description: Start / Stop / Status or Restart the FHEM - Tradfri-JAVA
### END INIT INFO
case "$1" in
'start')
echo "Starting FHEM - Tradfri-JAVA"
screen -dmS Tradfri /opt/java-Tradfri.sh
RETVAL=$?
;;
'stop')
pkill -USR1 -U fhem java
echo " ... done. FHEM - Tradfri-JAVA Stopped."
RETVAL=$?
;;
'restart')
pkill -USR1 -U fhem java
echo " Closed Process, Restarting"
screen -dmS Tradfri /opt/java-Tradfri.sh
echo " ... done. FHEM - Tradfri-JAVA Restarted"
RETVAL=$?
;;
'status')
cnt=`ps -ef | grep "java -jar" | grep -v grep | wc -l`
if [ "$cnt" -eq "0" ] ; then
echo "FHEM - Tradfri-JAVA is not running"
else
echo "FHEM - Tradfri-JAVA is running"
fi
;;
*)
echo "Usage: $0 { start | stop | status | restart }"
RETVAL=1
;;
esac
exit $RETVAL
Ich benutze Raspian (Jessie lite), so sehen bei mir die Berechtigungen aus:
-rwxr-xr-x 1 root root 1553 Jul 26 16:11 tradfri
Danach:
update-rc.d tradfri defaults
kurze Kontrolle für run-level 3:
ls -l /etc/rc3.d/
Ausgabe bei mir:
lrwxrwxrwx 1 root root 17 Jul 26 16:17 S01tradfri -> ../init.d/tradfri
3.) Eigentliches Start-Skript erstellen: /opt/java-Tradfri.sh
Vorbereitung:
#! /bin/bash
su -c "java -jar /DEINPFADzuCOAPvonPETER/kCoAPSocket-latest.jar -s DEINTRADFRICODE-g DEINETRADFRIGWIP >> /DEINLOGPFAD/tradfri_java.log" -s /bin/sh fhem
Der Aufruf von Brause (wollte hemmungslos kopieren

) hat nicht geklappt bei mir.
Habe es dann auf die obige Zeile von mir erledigt, gleicher Effekt Java-Aufruf als User fhem.
vi /opt/java-Tradfri.sh
Tippen: i
copy&paste: Deine bearbeitete Zeile von oben
Bei mir sieht es dann so ungefähr aus:
#! /bin/bash
su -c "java -jar /opt/Tradfri-FHEM/kCoAPSocket/kCoAPSocket/kCoAPSocket-latest.jar -s ABC -g xxx.xxx.xxx.xxx >> /log/tradfri_java.log" -s /bin/sh fhem
Berechtigungen ändern:
chmod 740 /opt/java-Tradfri.sh
chown fhem:dialout /opt/java-Tradfri.sh
Kontrolle:
-rwxr----- 1 fhem dialout 200 Jul 26 16:34 java-Tradfri.sh
Zum Schluss: Augen zu und durch

Reboot tut gut um zu sehen ob auch alles soweit hochstartet, fhem das GW als "opened" ansieht und testweise mal die Devices via webfhem abfragen.
reboot
Im Anschluss:
via:
netstat -tulpn | grep java
sieht man ganz gut ob etwas lauscht:
Bei mir:
tcp 0 0 127.0.0.1:1505 0.0.0.0:* LISTEN 888/java
TCP/1505 ist das Tradfri-Modul, was man auch im Log sehen kann:
"[TcpServerThread] Binding of socket @ port 1505 successfull."
4.) Brauses Skript
Im Anschluss kann man wunderbar abfragen:
/etc/init.d/tradfri status
Das meldet die CLI dann zurück: "FHEM - Tradfri-JAVA is running"
Offene Frage meinerseitsps -aux | grep fhem
[Auszug]:
fhem 888 0.0 0.0 1908 376 ? Ss 17:16 0:00 sh -c java -jar /DUMMY/kCoAPSocket-latest.jar -s CODE -g IP >> /log/tradfri_java.log
fhem 889 11.0 3.7 324704 36664 ? Sl 17:16 0:04 java -jar /DUMMY/kCoAPSocket-latest.jar -s CODE -g IP
Warum läuft das 2x?
netstat -tulpn ergibt:
tcp 0 0 127.0.0.1:1505 0.0.0.0:* LISTEN 889/java
udp 0 0 0.0.0.0:60085 0.0.0.0:* 889/java
Klar, der Screen wäre einer und der java der zweite Befehl. Irritiert bin ich wegen 2x java Aufruf.
Der Prozess mit ID 888 macht netztechnisch nichts, demnach gehe müsste es passen und ich habe wieder etwas gelernt

Grüße,
dtavb