Homebridge - Start und Status in FHEM, wenn FHEM auf Debian läuft...

Begonnen von M@d, 05 Februar 2018, 11:58:33

Vorheriges Thema - Nächstes Thema

M@d

Hallöchen,

ich habe ein paar Fragen / Anregungen bezüglich o.g. Themas aus dem Wiki-Artikel:
https://wiki.fhem.de/wiki/Homebridge_Start_und_Status_in_FHEM

Und zwar habe ich gestern die Nacht an der Konsole meines Debian-Servers verbracht auf dem FHEM läuft um das Homebridge-Skript über FHEM starten und stoppen zu können, denn so wie es im Wiki beschrieben ist hat es bei mir nicht funktioniert.

Vielleicht bin ich zu blöd, vielleicht hat es mit Debian zu tun, ich hoffe einer von euch kann Licht in das Dunkel geben.

Die Einrichtung war eigentlich kein Problem, die Symbole auf FHEM waren da, nur konnte nichts geschaltet werden. Die Fehlermeldung im Logfile war:
sudo: Kein TTY vorhanden und kein >>askpass<<-Programm angegeben
Klarer Fall: Er fragt nach einem Passwort.
Das Skript "/etc/init.d/hombridge start" lies sich auf Kommandozeilenebene starten, allerdings kam dann ein Prompt für ein Passwort.
Das komisch ist nun, der Eintrag in der /etc/sudoers sitzt wie im Wiki angegeben und trotzdem wird nach dem Passwort gefragt. Das Passwort für den User fhem übrigens.

Nach einigen Änderungsversuchen der /etc/sudoers habe ich das Problem eingrenzen können: Es wurde immer dann nach dem Passwort gefragt, wenn man bereits als der User angemeldet ist unter dem auch Homebridge gestartet werden soll, quasi immer dann wenn man ein unnötiges "su" macht. Dieses Verhalten konnte ich meinem System nicht austreiben, egal was ich in der sudoers geändert habe.

Jetzt die Frage von mir an die Profis: Ist das normales Verhalten von Debian, oder sollte das nicht so sein?

Bei mir läuft fhem unter dem Benutzer fhem und Homebridge wird auch unter dem Benutzer fhem gestartet. Wenn ich als User fhem angemeldet bin und das Skript /etc/init.d/homebridge start ausführe, so wird, obwohl unnötig, ein
su - fhem - c homebridge > /dev/null 2>&1 &
ausgeführt und er fragt nach dem Passwort.

Um den Fehler abzustellen habe ich das Start-Skript verändert und verwende jetzt folgende Version:

#!/bin/bash
### 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
export PATH=$PATH:/usr/bin
export NODE_PATH=$NODE_PATH:/opt/fhem/node_modules

PID=`pidof homebridge`
homeBridgeUser="fhem"
fhemHost=127.0.0.1          #FHEM Server (Masterinstanz)
fhemHostTelnetPort=7072     #TelnetPort der FHEM Instanz
fhemDefine="SYS_Homebridge"
username=$(whoami)

#if [[ $username == $homeBridgeUser ]]; then #echo "Username und HomeBridgeUser sind gleich"
#fi


case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is already running"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge is already running"
else
        if [[ $username == $homeBridgeUser ]]; then
          echo "Username ist $homeBridgeUser, starten ohne SU"
          homebridge > /dev/null 2>&1 &
        else
          echo "Username ist $username, starten mit SU"
          su - $homeBridgeUser -c "homebridge > /dev/null 2>&1 &"
        fi
        echo "Homebridge starting"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge starting"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "set $fhemDefine on"
        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 $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge is not running"
else
        kill $PID
        echo "Homebridge stopping"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge stopping"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "set $fhemDefine off"
        sleep 2
        $0 status
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 $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge running as PID $PID"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "set $fhemDefine on"
else
        echo "Homebridge is not running"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "setreading $fhemDefine info Homebridge is not running"
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort "set $fhemDefine off"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0


Die Attribute der SYS_Homebridge musste ich auch ändern, genauer aus
attr SYS_Homebridge userReadings OnStateChange:(start|stop|restart|status) {  system ("sudo service homebridge ".ReadingsVal($NAME,"state","restart")." &" );;  }
habe ich
attr SYS_Homebridge userReadings OnStateChange:(start|stop|restart|status) {  system ("/etc/init.d/homebridge ".ReadingsVal($NAME,"state","restart")." &" );;  }
gemacht.

So, blöde Frage nun: Hätte ich das ganze auch anders lösen können?

Grüssle


Martin

DeeSPe

Wenn Du ein aktuelles Debian verwendest solltest Du lieber auf die systemd Variante von homebridge umsteigen.
Um das dann als Device in FHEM anzuzeigen und zu steuern kannst Du das (noch neue) Modul 98_serviced verwenden.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

pcbastler

Standardmäßig ist sudo bei debian gar nicht installiert, das hat mich gestern auch ein paar Stunden gekostet.
Da hilft auch der Eintrag in sudoers nichts.

krikan

Zitat von: pcbastler am 21 Februar 2018, 09:16:21
Standardmäßig ist sudo bei debian gar nicht installiert, das hat mich gestern auch ein paar Stunden gekostet.
Afaik hängt die Installation von sudo bei Debian davon ab, ob bei der Debian-Installation das root Passwort gesetzt wird oder nicht. "standardmäßig" gibt es mMn nicht.