FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Navigator am 15 November 2015, 17:51:12

Titel: Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: Navigator am 15 November 2015, 17:51:12
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);
}


Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: justme1968 am 15 November 2015, 17:56:54
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
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: Navigator am 15 November 2015, 18:00:49
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.
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: justme1968 am 15 November 2015, 18:02:31
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
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: Navigator am 15 November 2015, 18:06:24
Den habe ich natürlich mehrmals gelesen....  :o ;D ... vielleicht bin ich noch nicht soweit dort alles zu verstehen.  ::)
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: justme1968 am 15 November 2015, 18:10:14
die rückgabe wird musst du in einen string verpacken der dann an die angegebene funktion übergeben wird.
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: Navigator am 15 November 2015, 18:25:47
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?
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: justme1968 am 15 November 2015, 18:42:35
es wird ja eben nicht gewartet sondern die sub wird aufgerufen sobald der BlockingCall fertig ist.
Titel: Antw:Kommandos an FHEM übergeben aus Blocking Call Sub.
Beitrag von: Navigator am 15 November 2015, 18:44:21
Danke... ich denke ich habs verstanden.