Hallo..
ich habe eine kleine Ping Routine in einer Sub, die ich sporadisch aufrufe. Da diese aber den Hauptprozess stilllegt, habe ich ein BlockingCall darauf gemacht. Leider werden dort direkt keine Kommandos an den Hauptprozess übergeben, wie umgehe ich das eigentlich?
Hier mein Script.
#### Ping ####
sub
Handyping ($)
{
use Net::Ping;
my $hash = @_;
my $i = 1;
my $p = Net::Ping->new();
while ($i <= 5){
if ( $p->ping("192.168.178.44") ) {fhem ("set Testaktor on");Log 1, "Ping erfolgreich";return} else {$i++;Log 1, "$i,Ping fehlgeschlagen"}
};
undef ($p);
}
in dem du die finishFn verwendest und im hauptprozess die rückgabe auswertest und dort entsprechend reagierst.
aber warum verwendest du nicht PRESENCE? dann kannst du dich einfach per notify ans ergebniss hängen.
gruss
andre
Hallo justme...
Presence ist mir natürlich bekannt, aber dabei lerne ich nichts, wenn ich das so fertig einsetze.
Kannst du mir noch ein wenig mehr verraten, wie ich auf die finishFn überhaupt reagieren kann? Löst dieses denn ein Event aus? Gibt es Beispiele irgendwo, die fertigen grossen Module sind für mich noch ein wenig schwer lesbar.
im wiki gibt es einen ganzen artikel zu blocking in dem alles beschrieben ist: http://www.fhemwiki.de/wiki/Blocking_Call#BlockingCall_muss_als_Argument_eine_Referenz_auf_das_Ursprungs-Device_enthalten (http://www.fhemwiki.de/wiki/Blocking_Call#BlockingCall_muss_als_Argument_eine_Referenz_auf_das_Ursprungs-Device_enthalten).
gruss
andre
Den habe ich natürlich mehrmals gelesen.... :o ;D ... vielleicht bin ich noch nicht soweit dort alles zu verstehen. ::)
die rückgabe wird musst du in einen string verpacken der dann an die angegebene funktion übergeben wird.
Also mit anderen Worten ich stelle einen Vergleich im FHEM Hauptprozess an, der den Rückgabewert der Funktion vergleicht und damit ein Event auslöst. Aber wird dann FHEM nicht wieder blockiert, wenn dieser auf das Erbebnis der Sub gewartet wird?
es wird ja eben nicht gewartet sondern die sub wird aufgerufen sobald der BlockingCall fertig ist.
Danke... ich denke ich habs verstanden.