Hi,
im Wiki gibts ja ne gute Anleitung wie man Homebridge mit FHEM starten/stoppen und den Status sehen kann: https://wiki.fhem.de/wiki/Homebridge_Start_und_Status_in_FHEM (https://wiki.fhem.de/wiki/Homebridge_Start_und_Status_in_FHEM)
Nun habe ich (als Noob) FHEM&Co auf ArchLinux und Homebridge (schon) als Service laufen ("systemctl status/start/stop/restart homebridge.service").
Da ich mich weder mit Linux noch mit Programmieren noch Fhem wirklich auskenne: hat das jemand am laufen und kann mir etwas Hilfestellung geben, wie die Skripte hier zu ändern sind? Vielleicht kann jemand mal sein Skript posten, dann müsste man ja nur die Pfade anpassen:)
Lieben Dank im Voraus!
Hi,
das ist auch ein Punkt der mich aktuell brennend interessiert. Bei mir geht es allerdings um alexa-fhem, dass ich als Service am laufen habe. Macht ja im Prinzip keinen Unterschied.
Es scheitert auch daran, dass ich nicht weiß wie ich die systemctl Befehle in FHEM bzw. in den Alexa-FHEM dummy integriert bekomme damit ich über die Weboberfläche starten/stoppen/neustarten oder den Service abfragen kann.
Geht sicherlich irgendwie, hab nur keine Ahnung wie ich es umsetzen muss.
Gruß
Habe da was für homebridge gebastelt.
Nötig sind 2 Dinge:
ein dummy:
defmod Homebridge dummy
attr Homebridge cmdIcon restart:rc_REPEAT stop:rc_STOP status:rc_INFO start:rc_PLAY
attr Homebridge devStateIcon running:audio_play:stop stopped:audio_stop:start stopping:audio_stop .*starting:audio_repeat
attr Homebridge icon it_router
attr Homebridge setList start:noArg stop:noArg restart:noArg status:noArg
attr Homebridge userReadings status:(start|stop|restart|status) {\
my $cmd = ReadingsVal($NAME,"state","");;\
my $hb = $NAME;;\
my @qx = `sudo systemctl $cmd homebridge`;;\
my $set;;\
if ($cmd eq "status" && @qx)\
{\
my $s = $qx[2];;\
chomp $s;;\
$s =~ s/[\r\n\t;;]/ /g;;\
$set = "status $s";;\
if ($s =~ /running|active/)\
{\
$set .= ";;setreading $hb state running";;\
}\
elsif ($s =~ /failed|stopped/)\
{\
$set .= ";;setreading $hb state stopped";;\
}\
}\
elsif ($cmd eq "start" && !@qx)\
{\
$set = "state starting;;sleep 1;;set $hb status";;\
}\
elsif ($cmd eq "stop" && !@qx)\
{\
$set = "state stopping;;sleep 1;;set $hb status";;\
}\
elsif ($cmd eq "restart" && !@qx)\
{\
$set = "state restarting;;sleep 1;;set $hb status";;\
}\
elsif (@qx)\
{\
my $e = join " - ",@qx;;\
chomp $e;;\
$e =~ s/[\r\n\t;;]/ /g;;\
$set = "error $e";;\
}\
fhem "setreading $hb $set" if ($set);;\
return;;\
}
attr Homebridge webCmd start:restart:stop:status
und per "sudo visudo" im System die sudo-Rechte für den User fhem auf systemctl geben, z.B. das an das Ende schreiben oder wenn es bereits eine Zeile beginnend mit fhem gibt, diese entsprechend erweitern:
fhem ALL=(ALL) NOPASSWD:/bin/systemctl
Nun sollte alles wie gewünscht über den Homebridge dummy zu steuern gehen.
Gruß
Dan
EDIT:
Die FILTER sind sinnlos gewesen und ich habe sie deshalb aus dem Code entfernt.
EDIT2:
Hab noch eine Veränderung vorgenommen. Nun wird der Status direkt nach start/stop/restart direkt nochmal abgefragt und dann entsprechend der aktuelle Status (stopped/running) ausgegeben.
EDIT3:
Da war noch ein Fehler im devStateIcon.
Funktioniert einwandfrei, danke!!! :)
Zitat von: yc2k17 am 15 November 2017, 23:30:52
Funktioniert einwandfrei, danke!!! :)
Das freut mich, so soll es sein. ;)
Gruß
Dan
Hi yc2k17,
ich bin mit systemctl auch noch nicht sooo richtig gut drauf, aber habe heute zumindest meine vpnc.service und etherwake.service zum Laufen bekommen - aber darum geht's ja hier nicht direkt ;)
Es geht Dir ja darum, Alexa aus FHEM starten, etc. zu können.
Ich habe dieses bei mir in ein DOIF (mit DropDown für die Web-Oberfläche) gepackt (start/stop/restart/status):
define Alexa.DOIF DOIF ([$SELF:Aktion] eq "start") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "stop") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "restart") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "status") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")})
attr Alexa.DOIF do always
attr Alexa.DOIF readingList Aktion
attr Alexa.DOIF setList Aktion:auswählen,start,stop,restart,status
attr Alexa.DOIF webCmd Aktion
Status und PID (READING 'info') werden dann ja "automatisch" durch alexa-fhem in den Alexa-Dummy geschrieben.
Vielleicht hilfts Dir ja - viele Grüße
Sascha
Zitat von: Sascha_F am 16 November 2017, 01:43:11
Hi yc2k17,
ich bin mit systemctl auch noch nicht sooo richtig gut drauf, aber habe heute zumindest meine vpnc.service und etherwake.service zum Laufen bekommen - aber darum geht's ja hier nicht direkt ;)
Es geht Dir ja darum, Alexa aus FHEM starten, etc. zu können.
Ich habe dieses bei mir in ein DOIF (mit DropDown für die Web-Oberfläche) gepackt (start/stop/restart/status):
define Alexa.DOIF DOIF ([$SELF:Aktion] eq "start") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "stop") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "restart") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")})
DOELSEIF ([$SELF:Aktion] eq "status") (setreading Alexa.DOIF Aktion auswählen, {system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")})
attr Alexa.DOIF do always
attr Alexa.DOIF readingList Aktion
attr Alexa.DOIF setList Aktion:auswählen,start,stop,restart,status
attr Alexa.DOIF webCmd Aktion
Status und PID (READING 'info') werden dann ja "automatisch" durch alexa-fhem in den Alexa-Dummy geschrieben.
Vielleicht hilfts Dir ja - viele Grüße
Sascha
Danke für den Beitrag Deines Codes.
Allerdings wurde im Titel des Beitrags ausdrücklich nach systemd und nicht nach initd gefragt. ;)
Gruß
Dan
Genial, genau das habe ich gesucht!! Herzlichen Dank!
Zwei Tipps:
1. Wer den Code nicht direkt in die fhem.cfg kopiert muss etwas aufpassen: Ich hatte die Sachen manuell eingegeben, dann muss man aber die ";;\" am Ende der Zeile bei UserReadings entfernen. Sonst geht es nicht (Fehler: Error evaluating Homebridge userReading status: Experimental aliasing via reference not enabled at (eval 456) line 2.).
2. Ich habe die devStateIcon zu running:rc_dot@green:stop stopped:rc_dot@red:start stopping:audio_stop .*starting:audio_repeat
geändert. Das gibt einen fetten grünen Punkt für "running" und einen fetten roten, wenn HB "stop" ist. Geschmackssache, aber ich will das Ganze auch noch für MQTT & Co machen, dann hat man eine schöne Übersicht.
Nochmal: super Anleitung, hat mir sehr geholfen und hätte ich selbst nicht hinbekommen! Sollte ins Wiki!
Zitat von: maddhin am 17 November 2017, 08:11:25
1. Wer den Code nicht direkt in die fhem.cfg kopiert muss etwas aufpassen: Ich hatte die Sachen manuell eingegeben, dann muss man aber die ";;\" am Ende der Zeile bei UserReadings entfernen. Sonst geht es nicht (Fehler: Error evaluating Homebridge userReading status: Experimental aliasing via reference not enabled at (eval 456) line 2.).
Der Code ist nicht für die fhem.cfg, denn darin sollte niemand manuell herumfuhrwerken, sondern für einen Code-Import (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) über eine "Raw Definition".
Die devStateIcon sind natürlich Geschmackssache.
Gruß
Dan
Zitat von: DeeSPe am 17 November 2017, 10:46:09
Der Code ist nicht für die fhem.cfg, denn darin sollte niemand manuell herumfuhrwerken, sondern für einen Code-Import (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) über eine "Raw Definition".
Ups! Wieder was gelernt, "Raw Definition" kannte ich noch nicht!
Hatte das alles - wegen "nicht in fhem.cfg werkeln!" - manuell gemacht. Raw Definition ist natürlich wesentlich einfacher. Vielleicht noch ein EDIT4 in deinem Beitrag? ;D
hierzu nochmal eine weiterführende Frage:
Ich plane FHEM, Homebridge, Mosquitto, etc. in eigene Docker Container zu packen. Könnte bzw. wie könnte ich das UserReading so umbauen, dass das dann immernoch funktioniert?
Zitat von: maddhin am 17 November 2017, 13:49:30
hierzu nochmal eine weiterführende Frage:
Ich plane FHEM, Homebridge, Mosquitto, etc. in eigene Docker Container zu packen. Könnte bzw. wie könnte ich das UserReading so umbauen, dass das dann immernoch funktioniert?
Passwordless SSH wäre dann das Zauberwort!
Und dann:
my @qx = `sudo systemctl $cmd homebridge`;
ändern in:
my @qx = `ssh user@deine.ip.local 'sudo systemctl $cmd homebridge'`;
Wenn Du Dich als root per SSH anmeldest, dann kannst Du das sudo auch weglassen.
Gruß
Dan
1. wenn docker auf dem gleichen Server liegt, könntest Du fhem in die Docker-Gruppe legen und den Container "rebooten" ....
2. Ihr kennt /etc/sudoers.d ?
Es ist besser, Ergänzungen zu sudoers dort hineinzulegen anstatt die soders selber zu editieren. Ist "updatefester" ;o)
Zitat von: DeeSPe am 17 November 2017, 14:00:24
Passwordless SSH wäre dann das Zauberwort!
Und dann:
my @qx = `sudo systemctl $cmd homebridge`;
ändern in:
my @qx = `ssh user@deine.ip.local 'sudo systemctl $cmd homebridge'`;
Super & lieben Dank, Dan, werde das in den nächsten Tagen probieren!!
Zitat von: Wernieman am 17 November 2017, 14:03:01
2. Ihr kennt /etc/sudoers.d ?
Es ist besser, Ergänzungen zu sudoers dort hineinzulegen anstatt die soders selber zu editieren. Ist "updatefester" ;o)
Ich dachte "visudo" wäre auch "updatefest"... ???
Gruß
Dan
Zitat von: Wernieman am 17 November 2017, 14:03:01
1. wenn docker auf dem gleichen Server liegt, könntest Du fhem in die Docker-Gruppe legen und den Container "rebooten" ....
ist für mich im Moment noch Chinesisch :) Im Grunde will ich ja Homebridge, MQTT, etc. in getrennten Containern haben, so dass ich sie auf getrennten Servern laufen lassen kann aber insbesondere auch damit ich das System schnell wiederherstellen kann. D.h. eigentlich sind dann alle "Teile" nur über separate IPs zu erreichen, oder?
Praktisch gesehen, werden alle Container auf dem gleiche RPI laufen. Muss mich aber erst in Docker reinfuchsen, kenne mich praktisch noch 0 damit aus - daher ja auch die Frage hier, wie das am Geschicktesten anzustellen ist;)
a) Bezüglich visudo und updatefster:
vusido macht eine Syntaxprüfung. Mit updatefster meinte ich aber ein update des Systemes. (z.B. apt-get upgrade)
Mit visudo kannst Du auch Dateien unter /etc/sudoers.d/xxx bearbeiten:
visudo -f /etc/sudoers.d/xxx[/code
b) bezüglich docker auf Pi:
Läuft super und Doku ist richtig einfach (finde ich). Docker hat selber relativ gute Tutorials .... allerdings auf English.
Zitat von: Wernieman am 17 November 2017, 14:25:23
b) bezüglich docker auf Pi:
Läuft super und Doku ist richtig einfach (finde ich). Docker hat selber relativ gute Tutorials .... allerdings auf English.
klingt sehr gut und so denke ich mir das;) Nur der Umzug von FHEM in den Container wird ggf. noch etwas tricky. Aber im Grund ist das ja nur copy & paste. Mit etwas Glück lauft die Sache am Sonntagabend!
Wenn Du auf docherhub guckst, gibt es sogar schon viele fertige Container ... ;o)
Zitat von: Wernieman am 17 November 2017, 15:58:15
Wenn Du auf docherhub guckst, gibt es sogar schon viele fertige Container ... ;o)
Ja, ich bin nur wegen Calibre (deb Pakete immer veraltet) und Mosquitto (Probleme mit Stretch) auf ArchLinux umgestiegen und bin nun am Überlegen, die jeweiligen Container selbst zu basteln (wenn es kein Arch Container gibt) - nach dem Motto: wieso einfach, wenn es auch kompliziert geht... :)
Ob das wirklich Sinn macht, weiß ich (noch) nicht. Werde mich Stück für Stück da reinarbeiten bis FHEM & Co in die neuen Container umgezogen ist... Fange am WE mal mit Homebridge und Mosquitto an.
Zitat(wenn es kein Arch Container gibt)
Das ist eigentlich der falsche Ansatz. Die Idee von Containern ist eigentlich die Betriebsystemunabhängigkeit. Warum sollte aucgh der Container einem Bestimmten Betriebsystem zugehörig sein, wenn er nur dazu dient, einen (1!) Dienst zu starten?
Hallo Zusammen,
ich Starte / Stoppe / Restarte meinen PLEX Media Server auf einem Debian so:
dummy list:
Internals:
NAME SW_PlexMediaServer
NR 611
STATE stop
TYPE dummy
READINGS:
2017-11-17 19:10:16 state stop
Attributes:
group Schalten_Dienste
icon rc_BACK
room Wohnzimmer
setList start stop restart
webCmd start:stop:restart
DOIF:
Internals:
DEF ([SW_PlexMediaServer:state] eq "start")
({ system("sudo service plexmediaserver start ") })
DOELSEIF
([SW_PlexMediaServer:state] eq "stop")
({ system("sudo service plexmediaserver stop ") })
DOELSE
([SW_PlexMediaServer:state] eq "restart")
({ system("sudo service plexmediaserver restart ") })
NAME SW_PlexMediaServer_doif
NR 612
NTFY_ORDER 50-SW_PlexMediaServer_doif
STATE cmd_2
TYPE DOIF
READINGS:
2017-11-17 19:10:16 Device SW_PlexMediaServer
2017-11-17 19:10:17 cmd 2
2017-11-17 19:10:17 cmd_event SW_PlexMediaServer
2017-11-17 19:10:17 cmd_nr 2
2017-11-17 19:10:16 e_SW_PlexMediaServer_state stop
2017-11-17 19:10:17 error { system("sudo service plexmediaserver stop ") }: -1
2017-11-17 19:10:17 state cmd_2
condition:
0 ReadingValDoIf($hash,'SW_PlexMediaServer','state') eq "start"
1 ReadingValDoIf($hash,'SW_PlexMediaServer','state') eq "stop"
devices:
0 SW_PlexMediaServer
1 SW_PlexMediaServer
all SW_PlexMediaServer
do:
0:
0 { system("sudo service plexmediaserver start ") }
1:
0 { system("sudo service plexmediaserver stop ") }
2:
0 [SW_PlexMediaServer:state] eq "restart"
1 { system("sudo service plexmediaserver restart ") }
helper:
globalinit 1
last_timer 0
sleeptimer -1
itimer:
readings:
0 SW_PlexMediaServer:state
1 SW_PlexMediaServer:state
all SW_PlexMediaServer:state
regexp:
all:
state:
STATE:
Attributes:
group FKT_Schalten
room Zentrale
Rechte für FHEM auf dem Host vorausgesetzt!
Dafür folgendes befolgen: http://www.ueberueck.com/index.php/fhem-hausautomatisierung/fhem-how-to-s/raspberry-aus-fhem-neu-starten (http://www.ueberueck.com/index.php/fhem-hausautomatisierung/fhem-how-to-s/raspberry-aus-fhem-neu-starten)
Das sollte auch für andere Dienste gehen!
VG Denny
Weil's vielleicht auch für die Steuerung anderer Dienste interessant sein kann, habe ich das mal in ein Modul gegossen.
Vielleicht mag's ja mal jemand testen (https://forum.fhem.de/index.php/topic,79952.0.html).
Gruß
Dan