2
0
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:
Damian 2018-09-05 17:41:40 +00:00
parent 539670f77b
commit 25b5320119

View File

@ -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(&lt;timerName&gt;, &lt;seconds&gt;, &lt;function
welcher nach Ablauf die angegebene Perl-Funktion &lt;function&gt; mit optionalen Parameter &lt;parameter&gt; aufruft. Die Perlfunkion muss eindeutig sein und in FHEM zuvor deklariert worden sein. welcher nach Ablauf die angegebene Perl-Funktion &lt;function&gt; mit optionalen Parameter &lt;parameter&gt; aufruft. Die Perlfunkion muss eindeutig sein und in FHEM zuvor deklariert worden sein.
Wird set_Exec mit dem gleichen &lt;timerName&gt; vor seinem Ablauf erneut aufgerufen, so wird der laufender Timer gelöscht und neugesetzt.<br> Wird set_Exec mit dem gleichen &lt;timerName&gt; vor seinem Ablauf erneut aufgerufen, so wird der laufender Timer gelöscht und neugesetzt.<br>
<br> <br>
Timer holen: <code><b>get_Exec(&lt;timerNamet&gt;)</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(&lt;timerName&gt;)</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(&lt;timerName&gt;)</code></b><br> Laufenden Timer löschen: <code><b>del_Exec(&lt;timerName&gt;)</code></b><br>
<br> <br>
<br>
Ein beliebiges FHEM-Event absetzen: <code><b>set_Event(&lt;Event&gt;)</code></b><br> Ein beliebiges FHEM-Event absetzen: <code><b>set_Event(&lt;Event&gt;)</code></b><br>
<br> <br>
Reading schreiben: <code><b>set_Reading(&lt;readingName&gt;,&lt;content&gt;,&lt;trigger&gt;)</code></b>, mit &lt;trigger&gt;: 0 ohne Trigger, 1 mit Trigger<br> Reading schreiben: <code><b>set_Reading(&lt;readingName&gt;,&lt;content&gt;,&lt;trigger&gt;)</code></b>, mit &lt;trigger&gt;: 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{&lt;blocking call name&gt;} = BlockingCall(&lt;blocking function&gt;, &lt;argument&gt;, &lt;finish function&gt;, &lt;timeout&gt;, &lt;abort function&gt;, &lt;abort argument&gt;) unless(defined($_blockingcalls{&lt;blocking call name&gt;}));</code><br>
<br>
Für unterschiedliche blockierende Funktionen ist jeweils ein eigener Name (&lt;blocking call name&gt;) 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>