Kommandos an FHEM übergeben aus Blocking Call Sub.

Begonnen von Navigator, 15 November 2015, 17:51:12

Vorheriges Thema - Nächstes Thema

Navigator

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


Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Navigator

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.
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Navigator

Den habe ich natürlich mehrmals gelesen....  :o ;D ... vielleicht bin ich noch nicht soweit dort alles zu verstehen.  ::)
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

justme1968

die rückgabe wird musst du in einen string verpacken der dann an die angegebene funktion übergeben wird.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Navigator

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?
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

justme1968

es wird ja eben nicht gewartet sondern die sub wird aufgerufen sobald der BlockingCall fertig ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Navigator

Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.