FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Meister_Petz am 02 November 2016, 13:42:48

Titel: STDOUT an FHEM zurück
Beitrag von: Meister_Petz am 02 November 2016, 13:42:48
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
Titel: Antw:STDOUT an FHEM zurück
Beitrag von: sumsum am 02 November 2016, 15:56:57
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
Titel: Antw:STDOUT an FHEM zurück
Beitrag von: Wuppi68 am 02 November 2016, 16:04:15
und wenn Du den Befehl in den Hintergrund mit dem & schickst, bekommst Du auch keinen auswertbaren Status zurück ...
Titel: Antw:STDOUT an FHEM zurück
Beitrag von: CoolTux am 02 November 2016, 16:29:00
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
Titel: Antw:STDOUT an FHEM zurück
Beitrag von: Meister_Petz am 03 November 2016, 09:38:52
Danke, ich werds gleich testen
Titel: Antw:STDOUT an FHEM zurück
Beitrag von: Meister_Petz am 03 November 2016, 13:00:04
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");;\   
}\
}