Hauptmenü

STDOUT an FHEM zurück

Begonnen von Meister_Petz, 02 November 2016, 13:42:48

Vorheriges Thema - Nächstes Thema

Meister_Petz

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

sumsum

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

Wuppi68

und wenn Du den Befehl in den Hintergrund mit dem & schickst, bekommst Du auch keinen auswertbaren Status zurück ...
FHEM unter Proxmox als VM

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Meister_Petz

Danke, ich werds gleich testen

Meister_Petz

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");;\   
}\
}