Moin,
wie kann ich STDOUT eines Befehls den FHEM absetzt wieder als Ergebnis zurück bekommen?
Hintergrund:
über FHEM schalte ich einen meiner Dienste (homebridge):
define RestartHomebridge dummy
attr RestartHomebridge setList on off
attr RestartHomebridge webCmd on:off
attr RestartHomebridge event-on-change-reading state
define RestartHomebridge.on notify RestartHomebridge:on {system ("sudo /etc/init.d/homebridge start &")}
define RestartHomebridge.of notify RestartHomebridge:off {system ("sudo /etc/init.d/homebridge stop &")}
Ich würde nun gerne "/etc/init.d/homebridge status" nutzen um den dummy regelmäßig schonmal in den richtigen Zustand zu bringen
also irgendwie sowas:
define RestartHomebridge.status at +*00:01:00 {\
my $d= <das STDOUT>;;\
if ($d eq <das STDOUT für "Läuft"){\
fhem("set RestartHomebridge on");;\
}\
if ($d eq <das STDOUT für "Läuft nicht"){\
fhem("set RestartHomebridge off");;\
}\
}
Kann mir da jemand weiter helfen?
Danke
Petz
Hallo,
system gibt nicht den "output" zurück sonder ob der Befehl erfolgreich war oder nicht.
*15:00:00 {
my $d = `/bin/ls`;
fhem("set test $d");
}
Ist eher was du suchst. In diesem Fall wird under Linux der inhalt vom aktuellen Verzeichnis in den dummy test geschrieben.
Gruss
Ulf
und wenn Du den Befehl in den Hintergrund mit dem & schickst, bekommst Du auch keinen auswertbaren Status zurück ...
Statt System qx schreiben und natürlich die zu füllende Variable davor.
my $response = qx( ("sudo /etc/init.d/homebridge status");
Aber Achtung, das ganze ist blockierend
Danke, ich werds gleich testen
Danke, klappt:
define RestartHomebridge.status at +*00:01:00 {\
my $response = `sudo /etc/init.d/homebridge status`;;\
if ($response =~ m/on/) {\
fhem("set RestartHomebridge on");;\
}\
if ($response =~ m/off/) {\
fhem("set RestartHomebridge off");;\
}\
}