mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +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;
|
package main;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use Blocking;
|
||||||
use Color;
|
use Color;
|
||||||
use vars qw($FW_CSRF);
|
use vars qw($FW_CSRF);
|
||||||
|
|
||||||
@ -38,10 +39,18 @@ sub DOIF_delTimer($)
|
|||||||
RemoveInternalTimer (\$hash->{ptimer}{$key});
|
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($)
|
sub DOIF_delAll($)
|
||||||
{
|
{
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
DOIF_killBlocking($hash);
|
||||||
delete ($hash->{helper});
|
delete ($hash->{helper});
|
||||||
delete ($hash->{condition});
|
delete ($hash->{condition});
|
||||||
delete ($hash->{do});
|
delete ($hash->{do});
|
||||||
@ -80,6 +89,7 @@ sub DOIF_Initialize($)
|
|||||||
$hash->{SetFn} = "DOIF_Set";
|
$hash->{SetFn} = "DOIF_Set";
|
||||||
$hash->{GetFn} = "DOIF_Get";
|
$hash->{GetFn} = "DOIF_Get";
|
||||||
$hash->{UndefFn} = "DOIF_Undef";
|
$hash->{UndefFn} = "DOIF_Undef";
|
||||||
|
$hash->{ShutdownFn} = "DOIF_Shutdown";
|
||||||
$hash->{AttrFn} = "DOIF_Attr";
|
$hash->{AttrFn} = "DOIF_Attr";
|
||||||
$hash->{NotifyFn} = "DOIF_Notify";
|
$hash->{NotifyFn} = "DOIF_Notify";
|
||||||
$hash->{FW_deviceOverview} = 1;
|
$hash->{FW_deviceOverview} = 1;
|
||||||
@ -3262,6 +3272,14 @@ DOIF_Undef
|
|||||||
my ($hash, $name) = @_;
|
my ($hash, $name) = @_;
|
||||||
$hash->{DELETED} = 1;
|
$hash->{DELETED} = 1;
|
||||||
DOIF_delTimer($hash);
|
DOIF_delTimer($hash);
|
||||||
|
DOIF_killBlocking($hash);
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
sub
|
||||||
|
DOIF_Shutdown
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
DOIF_killBlocking($hash);
|
||||||
return undef;
|
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.
|
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>
|
Wird set_Exec mit dem gleichen <timerName> vor seinem Ablauf erneut aufgerufen, so wird der laufender Timer gelöscht und neugesetzt.<br>
|
||||||
<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>
|
<br>
|
||||||
Laufenden Timer löschen: <code><b>del_Exec(<timerName>)</code></b><br>
|
Laufenden Timer löschen: <code><b>del_Exec(<timerName>)</code></b><br>
|
||||||
<br>
|
<br>
|
||||||
|
<br>
|
||||||
Ein beliebiges FHEM-Event absetzen: <code><b>set_Event(<Event>)</code></b><br>
|
Ein beliebiges FHEM-Event absetzen: <code><b>set_Event(<Event>)</code></b><br>
|
||||||
<br>
|
<br>
|
||||||
Reading schreiben: <code><b>set_Reading(<readingName>,<content>,<trigger>)</code></b>, mit <trigger>: 0 ohne Trigger, 1 mit Trigger<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>
|
Ebenso funktionieren hash-Variablen z. B.: <br>
|
||||||
<code>$_betrag{heute}=100;</code><br>
|
<code>$_betrag{heute}=100;</code><br>
|
||||||
<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>
|
<a name="DOIF_Attribute_Perl_Modus"></a>
|
||||||
<u>Nutzbare Attribute im Perl-Modus</u><br>
|
<u>Nutzbare Attribute im Perl-Modus</u><br>
|
||||||
<br>
|
<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user