mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 18:59:33 +00:00
98_DOIF.pm: blocking calls
git-svn-id: https://svn.fhem.de/fhem/trunk@17281 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
539670f77b
commit
25b5320119
@ -21,6 +21,7 @@
|
||||
package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Blocking;
|
||||
use Color;
|
||||
use vars qw($FW_CSRF);
|
||||
|
||||
@ -38,10 +39,18 @@ sub DOIF_delTimer($)
|
||||
RemoveInternalTimer (\$hash->{ptimer}{$key});
|
||||
}
|
||||
}
|
||||
sub DOIF_killBlocking($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
foreach my $key (keys %{$hash->{var}{blockingcalls}}) {
|
||||
BlockingKill($hash->{var}{blockingcalls}{$key}) if(defined($hash->{var}{blockingcalls}{$key}));
|
||||
}
|
||||
}
|
||||
|
||||
sub DOIF_delAll($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
DOIF_killBlocking($hash);
|
||||
delete ($hash->{helper});
|
||||
delete ($hash->{condition});
|
||||
delete ($hash->{do});
|
||||
@ -80,6 +89,7 @@ sub DOIF_Initialize($)
|
||||
$hash->{SetFn} = "DOIF_Set";
|
||||
$hash->{GetFn} = "DOIF_Get";
|
||||
$hash->{UndefFn} = "DOIF_Undef";
|
||||
$hash->{ShutdownFn} = "DOIF_Shutdown";
|
||||
$hash->{AttrFn} = "DOIF_Attr";
|
||||
$hash->{NotifyFn} = "DOIF_Notify";
|
||||
$hash->{FW_deviceOverview} = 1;
|
||||
@ -3262,6 +3272,14 @@ DOIF_Undef
|
||||
my ($hash, $name) = @_;
|
||||
$hash->{DELETED} = 1;
|
||||
DOIF_delTimer($hash);
|
||||
DOIF_killBlocking($hash);
|
||||
return undef;
|
||||
}
|
||||
sub
|
||||
DOIF_Shutdown
|
||||
{
|
||||
my ($hash) = @_;
|
||||
DOIF_killBlocking($hash);
|
||||
return undef;
|
||||
}
|
||||
|
||||
@ -5527,10 +5545,11 @@ Timer setzen: <code><b>set_Exec(<timerName>, <seconds>, <function
|
||||
welcher nach Ablauf die angegebene Perl-Funktion <function> mit optionalen Parameter <parameter> aufruft. Die Perlfunkion muss eindeutig sein und in FHEM zuvor deklariert worden sein.
|
||||
Wird set_Exec mit dem gleichen <timerName> vor seinem Ablauf erneut aufgerufen, so wird der laufender Timer gelöscht und neugesetzt.<br>
|
||||
<br>
|
||||
Timer holen: <code><b>get_Exec(<timerNamet>)</code></b>, Returnwert: 0, wenn Timer abgelaufen oder nicht gesetzt ist, sonst Anzahl der Sekunden bis zum Ablauf des Timers<br>
|
||||
Timer holen: <code><b>get_Exec(<timerName>)</code></b>, Returnwert: 0, wenn Timer abgelaufen oder nicht gesetzt ist, sonst Anzahl der Sekunden bis zum Ablauf des Timers<br>
|
||||
<br>
|
||||
Laufenden Timer löschen: <code><b>del_Exec(<timerName>)</code></b><br>
|
||||
<br>
|
||||
<br>
|
||||
Ein beliebiges FHEM-Event absetzen: <code><b>set_Event(<Event>)</code></b><br>
|
||||
<br>
|
||||
Reading schreiben: <code><b>set_Reading(<readingName>,<content>,<trigger>)</code></b>, mit <trigger>: 0 ohne Trigger, 1 mit Trigger<br>
|
||||
@ -5553,6 +5572,18 @@ $_betrag{$i}=100;</code><br>
|
||||
Ebenso funktionieren hash-Variablen z. B.: <br>
|
||||
<code>$_betrag{heute}=100;</code><br>
|
||||
<br>
|
||||
<u>Blokierende Funktionsaufrufe (blocking calls)</u><br>
|
||||
<br>
|
||||
DOIF verwaltet blockierende Funktionsaufrufe, d.h. die in diesem Zusammenhang gestarteten FHEM-Instanzen werden gelöscht, beim Herunterfahren (shutdown), Wiedereinlesen der Konfiguration (rereadcfg) Änderung der Konfiguration (modify) und Deaktivieren des Gerätes (disabled).<br>
|
||||
Die Handhabung von blockierenden Funktionsaufrufen ist im FHEMwiki erklärt, s. <a href="https://wiki.fhem.de/wiki/Blocking_Call">Blocking Call</a>.<br>
|
||||
Der von der Funktion BlockingCall zurückgegebene Datensatz ist unterhalb von $_blockingcalls abzulegen, z.B.<br>
|
||||
<br>
|
||||
<code>$_blockingcalls{<blocking call name>} = BlockingCall(<blocking function>, <argument>, <finish function>, <timeout>, <abort function>, <abort argument>) unless(defined($_blockingcalls{<blocking call name>}));</code><br>
|
||||
<br>
|
||||
Für unterschiedliche blockierende Funktionen ist jeweils ein eigener Name (<blocking call name>) unterhalb von $_blockingcalls anzulegen.<br>
|
||||
<br>
|
||||
<b>$_blockingcalls</b> ist eine für DOIF reservierte Variable und darf nur in der beschriebenen Weise verwendet werden.<br>
|
||||
<br>
|
||||
<a name="DOIF_Attribute_Perl_Modus"></a>
|
||||
<u>Nutzbare Attribute im Perl-Modus</u><br>
|
||||
<br>
|
||||
|
Loading…
Reference in New Issue
Block a user