Homebridge Start und Status in FHEM: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Textuelle Änderungen für bessere Verständlichkeit)
Zeile 2: Zeile 2:
Der Code ist noch nicht 100% getestet, es muss also noch mit Fehler gerechnet werden.
Der Code ist noch nicht 100% getestet, es muss also noch mit Fehler gerechnet werden.


Achtung: Die Code Zeilen sind direkt der FHEM Config Datei entnommen.
Um nicht bei jeder Änderung, welche die Homebridge betrifft, über die Console den Dienst manuell neustarten zu müssen kann dies bequem aus FHEMWEB erfolgen. In den nachfolgenden Abschnitten sind die einzelnen Schritte dazu erläutert.
Über die hier gezeigte Lösung ist es ist leider noch nicht möglich zu erkennen ob die Homebridge läuft, oder ob ein Problem aufgetreten ist. Es ist daher keine Abbildung des aktuellen Homebridge Status, sondern lediglich die Möglicheit die Homebride aus FHEM heraus zu starten, stopen oder neuzustarten.


Ich war es leid bei jeder Änderung die Homebridge betrifft immer wieder auf die Console zu müssen um den Dienst neu zustarten.
Hier aus ist dann das folgenden entstanden.
Was noch nicht geht ist die Erkennung wenn Homebridge abgeschmiert ist.
Dies wird nach möglichleit zu einem späterem Zeitpunkt umgesetzt.


Grundlage ist das Script von meintechblog.de für das Auto Backup sowie das Startscript im Artikel Homebridge einrichten
== Status Dummy anlegen ==
Es wird ein Dummy benötigt, welcher den Status des Homebridge Status durch den Dienst gesetzt bekommt. Das dafür nötige Script wird weiter unten in diesem Artikel erstellt.
Der Name des Dummys kann natürlich beliebig geändert werden, nur muss diese Änderung auch an entsprechenden Stellen wie z.B. dem Start Skript geändert werden.


== Status Dummy anlegen ==
1. Anlegen einen Dummies um den Status in FHEM zu sehen:
<source lang="bash" style="width:100%;">
<source lang="bash" style="width:100%;">
define FHEM.Homebridge.Status dummy
define FHEM.Homebridge.Status dummy

Version vom 7. Februar 2017, 19:23 Uhr

Der Artikel befindet sich noch im Aufbau. Der Code ist noch nicht 100% getestet, es muss also noch mit Fehler gerechnet werden.

Um nicht bei jeder Änderung, welche die Homebridge betrifft, über die Console den Dienst manuell neustarten zu müssen kann dies bequem aus FHEMWEB erfolgen. In den nachfolgenden Abschnitten sind die einzelnen Schritte dazu erläutert. Über die hier gezeigte Lösung ist es ist leider noch nicht möglich zu erkennen ob die Homebridge läuft, oder ob ein Problem aufgetreten ist. Es ist daher keine Abbildung des aktuellen Homebridge Status, sondern lediglich die Möglicheit die Homebride aus FHEM heraus zu starten, stopen oder neuzustarten.


Status Dummy anlegen

Es wird ein Dummy benötigt, welcher den Status des Homebridge Status durch den Dienst gesetzt bekommt. Das dafür nötige Script wird weiter unten in diesem Artikel erstellt. Der Name des Dummys kann natürlich beliebig geändert werden, nur muss diese Änderung auch an entsprechenden Stellen wie z.B. dem Start Skript geändert werden.

define FHEM.Homebridge.Status dummy
attr FHEM.Homebridge.Status room 9.03_Tech

Start Script anlegen

2. Script im Verzeichnis /etc/init.d/ erstellen

Wenn die Datei noch nicht angelegt ist auf der Console mit folgenden Befehl erstellen.

sudo nano /etc/init.d/homebridge

Start Script befüllen

Achtung: Damit das Script auch seine Arbeit richtig erledigen kann, muss zwingend der User unter dem Homebridge arbeiten soll eingetragen werden. Diese Stelle ist durch "User hier" gekennzeichnet. Die Anführungszeichen werden an der Stelle nicht benötigt.

#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# 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 homebridge
# 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 homebridge`
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is already running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Homebridge.Status info Homebridge is already running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge.Status on"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge off"
else
        su - "User hier" -c "homebridge > /dev/null 2>&1 &"
        echo "Homebridge starting"
        sleep 2
	$0 status
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Homebridge.Status info Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge off"
else
        kill $PID
        echo "Homebridge closed"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Homebridge.Status info Homebridge closed"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge 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 "Homebridge is running PID $PID"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Homebridge.Status info Homebridge running as PID $PID"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge.Status on"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge off"
else
        echo "Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Homebridge.Status info Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set FHEM.Homebridge off"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0

Start Script Autostart einrichten

Autostart aktivieren:

sudo chmod 755 /etc/init.d/homebridge

sudo update-rc.d homebridge defaults

Homebridge Start per Konsole

Nun kann man mit

sudo service homebridge start

bzw.

sudo /etc/init.d/homebridge start

den Dienst starten. Da in dem Script versucht wird, den Status für den Dummy "FHEM.Homebridge" zu setzen, gibt's erstmal eine Fehlermeldung - also am Besten gleich den Dummy anlegen, wie im nächsten Abschnitt beschrieben.

Homebridge Start per FHEM

Homebridge Start Dummy einrichten

define FHEM.Homebridge dummy
attr FHEM.Homebridge event-on-change-reading state
attr FHEM.Homebridge room 9.03_Tech
attr FHEM.Homebridge webCmd status:start:stop:restart
attr FHEM.Homebridge devStateIcon .*on:general_an .*off:general_aus .*:audio_rec
attr FHEM.Homebridge eventMap status:status start:start stop:stop restart:restart
attr FHEM.Homebridge icon it_router

Homebridge Start DOIF einrichten

define FHEM.Homebridge.DOIF DOIF ([FHEM.Homebridge] eq "start") (set FHEM.Homebridge on, {system ("sudo /etc/init.d/homebridge start")})\
DOELSEIF ([FHEM.Homebridge] eq "stop") (set FHEM.Homebridge on, {system ("sudo /etc/init.d/homebridge stop")})\
DOELSEIF ([FHEM.Homebridge] eq "restart") (set FHEM.Homebridge on, {system ("sudo /etc/init.d/homebridge restart")})\
DOELSEIF ([FHEM.Homebridge] eq "status") (set FHEM.Homebridge on, {system ("sudo /etc/init.d/homebridge status")})
attr FHEM.Homebridge.DOIF room 9.03_Tech

Homebridge FHEM Zugriff auf Script gewähren

sudo nano /etc/sudoers

Beispiel Zeile

fhem ALL=(ALL) NOPASSWD:/etc/init.d/homebridge

Beispiel Datei:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL
fhem ALL=(ALL) NOPASSWD:/opt/fhem/FHEM/backup.sh, /etc/init.d/homebridge

# Members of the admin group may gain root privileges
%admin  ALL = (ALL) NOPASSWD: ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d