2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-08 07:24:21 +00:00

26_tahoma.pm:V0210 tahoma_cancelExecutions: cancel command added

git-svn-id: https://svn.fhem.de/fhem/trunk@13028 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
mike3436 2017-01-09 18:59:59 +00:00
parent 7d22b27e00
commit 98a0e689ac

View File

@ -36,6 +36,7 @@
# 2016-11-15 V 0207 BLOCKING=0 can be used, all calls asynchron, attribut levelInvert inverts RollerShutter position # 2016-11-15 V 0207 BLOCKING=0 can be used, all calls asynchron, attribut levelInvert inverts RollerShutter position
# 2016-11-29 V 0208 HttpUtils used instead of LWP::UserAgent, BLOCKING=0 set as default, umlaut can be used in Tahoma names # 2016-11-29 V 0208 HttpUtils used instead of LWP::UserAgent, BLOCKING=0 set as default, umlaut can be used in Tahoma names
# 2016-12-15 V 0209 perl warnings during startup and login eliminated # 2016-12-15 V 0209 perl warnings during startup and login eliminated
# 2017-01-08 V 0210 tahoma_cancelExecutions: cancel command added
package main; package main;
@ -88,7 +89,7 @@ sub tahoma_Define($$)
my @a = split("[ \t][ \t]*", $def); my @a = split("[ \t][ \t]*", $def);
my $ModuleVersion = "0209"; my $ModuleVersion = "0210";
my $subtype; my $subtype;
my $name = $a[0]; my $name = $a[0];
@ -684,7 +685,7 @@ sub tahoma_applyRequest($$$)
tahoma_UserAgent_NonblockingGet({ tahoma_UserAgent_NonblockingGet({
timeout => 10, timeout => 10,
noshutdown => 1, noshutdown => 1,
hash => $hash->{IODev}, hash => $hash,
page => 'apply', page => 'apply',
data => tahoma_encode_utf8($data), data => tahoma_encode_utf8($data),
callback => \&tahoma_dispatch, callback => \&tahoma_dispatch,
@ -708,7 +709,7 @@ sub tahoma_scheduleActionGroup($$)
tahoma_UserAgent_NonblockingGet({ tahoma_UserAgent_NonblockingGet({
timeout => 10, timeout => 10,
noshutdown => 1, noshutdown => 1,
hash => $hash->{IODev}, hash => $hash,
page => 'scheduleActionGroup', page => 'scheduleActionGroup',
subpage => '?oid='.$hash->{oid}.'&delay='.$delay, subpage => '?oid='.$hash->{oid}.'&delay='.$delay,
callback => \&tahoma_dispatch, callback => \&tahoma_dispatch,
@ -716,11 +717,50 @@ sub tahoma_scheduleActionGroup($$)
}); });
} }
sub tahoma_cancelExecutions($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
Log3 $name, 4, "$name: tahoma_cancelExecutions";
my $subpage = '';
if (defined($hash->{IODev}))
{
if (defined($hash->{inExecId}) && (length $hash->{inExecId} > 20))
{
$subpage = '?execId='.$hash->{inExecId};
}
elsif (defined($hash->{inTriggerId}) && (length $hash->{inTriggerId} > 20))
{
$subpage = '?triggerId='.$hash->{inTriggerId};
}
else
{
Log3 $name, 3, "$name: tahoma_cancelExecutions failed - no valid execId or triggerId found";
return;
}
}
Log3 $name, 3, "$name: tahoma_cancelExecutions subpage=$subpage";
tahoma_UserAgent_NonblockingGet({
timeout => 10,
noshutdown => 1,
hash => $hash,
page => 'cancelExecutions',
subpage => $subpage,
callback => \&tahoma_dispatch,
nonblocking => 1,
});
}
sub tahoma_dispatch($$$) sub tahoma_dispatch($$$)
{ {
my ($param, $err, $data) = @_; my ($param, $err, $data) = @_;
my $hash = $param->{hash}; my $hash = $param->{hash};
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $hashIn = $hash;
$hash = $hash->{IODev} if (defined($hash->{IODev}));
$hash->{request_active} = 0; $hash->{request_active} = 0;
@ -758,7 +798,7 @@ sub tahoma_dispatch($$$)
if( $param->{page} eq 'getEvents' ) { if( $param->{page} eq 'getEvents' ) {
tahoma_parseGetEvents($hash,$json); tahoma_parseGetEvents($hash,$json);
} elsif( $param->{page} eq 'apply' ) { } elsif( $param->{page} eq 'apply' ) {
tahoma_parseApplyRequest($hash,$json); tahoma_parseApplyRequest($hashIn,$json);
} elsif( $param->{page} eq 'getSetup' ) { } elsif( $param->{page} eq 'getSetup' ) {
tahoma_parseGetSetup($hash,$json); tahoma_parseGetSetup($hash,$json);
} elsif( $param->{page} eq 'refreshAllStates' ) { } elsif( $param->{page} eq 'refreshAllStates' ) {
@ -774,7 +814,9 @@ sub tahoma_dispatch($$$)
} elsif( $param->{page} eq 'getCurrentExecutions' ) { } elsif( $param->{page} eq 'getCurrentExecutions' ) {
tahoma_parseGetCurrentExecutions($hash,$json); tahoma_parseGetCurrentExecutions($hash,$json);
} elsif( $param->{page} eq 'scheduleActionGroup' ) { } elsif( $param->{page} eq 'scheduleActionGroup' ) {
tahoma_parseScheduleActionGroup($hash,$json); tahoma_parseScheduleActionGroup($hashIn,$json);
} elsif( $param->{page} eq 'cancelExecutions' ) {
tahoma_parseCancelExecutions($hash,$json);
} }
} }
} }
@ -857,7 +899,7 @@ sub tahoma_defineCommands($)
$devname = "tahoma_". $fid; $devname = "tahoma_". $fid;
$define = "$devname tahoma DEVICE $id"; $define = "$devname tahoma DEVICE $id";
if( defined $device->{definition}{commands}[0]{commandName} ) { if( defined $device->{definition}{commands}[0]{commandName} ) {
my $commandlist = "dim:slider,0,1,100"; my $commandlist = "dim:slider,0,1,100 cancel:noArg";
foreach my $command (@{$device->{definition}{commands}}) { foreach my $command (@{$device->{definition}{commands}}) {
$commandlist .= " " . $command->{commandName}; $commandlist .= " " . $command->{commandName};
$commandlist .= ":noArg" if ($command->{nparams} == 0); $commandlist .= ":noArg" if ($command->{nparams} == 0);
@ -929,6 +971,28 @@ sub tahoma_parseGetEvents($$)
readingsEndUpdate($d,1); readingsEndUpdate($d,1);
} }
} }
elsif( defined($devices->{name}) && (defined($devices->{execId}) || defined($devices->{triggerId})) )
{
foreach my $module (keys %{$modules{$hash->{TYPE}}{defptr}})
{
my $def = $modules{$hash->{TYPE}}{defptr}{"$module"};
if (defined($def->{inExecId}) && ($def->{inExecId} eq $devices->{execId}))
{
if ($devices->{name} eq 'ExecutionStateChangedEvent')
{
$def->{inExecState} = $devices->{newState};
$def->{inExecId} = 'finished' if ($devices->{newState} == 4);
$def->{inExecId} = 'canceled' if ($devices->{newState} == 5);
}
}
elsif (defined($def->{inTriggerId}) && ($def->{inTriggerId} eq $devices->{triggerId}))
{
$def->{inTriggerState} = $devices->{name};
$def->{inTriggerId} = 'finished' if ($devices->{name} eq '4');
$def->{inTriggerId} = 'canceled' if ($devices->{name} eq '5');
}
}
}
} }
} }
@ -939,10 +1003,15 @@ sub tahoma_parseApplyRequest($$)
my($hash, $json) = @_; my($hash, $json) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3 $name, 4, "$name: tahoma_parseApplyRequest"; Log3 $name, 4, "$name: tahoma_parseApplyRequest";
if (defined($json->{applyResponse}{apply}{execId})) { $hash->{inExecState} = 0;
$hash->{InExecId} = $json->{applyResponse}{apply}{execId}; if (defined($json->{execId})) {
$hash->{inExecId} = $json->{execId};
} else { } else {
$hash->{InExecId} = "undefined"; $hash->{inExecId} = "undefined";
}
if (defined($json->{events}) && defined($hash->{IODev}))
{
tahoma_parseGetEvents($hash->{IODev},$json->{events})
} }
} }
@ -1076,6 +1145,26 @@ sub tahoma_parseScheduleActionGroup($$)
my($hash, $json) = @_; my($hash, $json) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3 $name, 4, "$name: tahoma_parseScheduleActionGroup"; Log3 $name, 4, "$name: tahoma_parseScheduleActionGroup";
if (defined $json->{actionGroup})
{
$hash->{inTriggerState} = 0;
if (defined($json->{actionGroup}[0]{triggerId})) {
$hash->{inTriggerId} = $json->{actionGroup}[0]{triggerId};
} else {
$hash->{inTriggerId} = "undefined";
}
}
if (defined($json->{events}) && defined($hash->{IODev}))
{
tahoma_parseGetEvents($hash->{IODev},$json->{events})
}
}
sub tahoma_parseCancelExecutions($$)
{
my($hash, $json) = @_;
my $name = $hash->{NAME};
Log3 $name, 4, "$name: tahoma_parseCancelExecutions";
} }
sub tahoma_Get($$@) sub tahoma_Get($$@)
@ -1128,9 +1217,14 @@ sub tahoma_Set($$@)
my $list = ""; my $list = "";
if( $hash->{SUBTYPE} eq "DEVICE" || if( $hash->{SUBTYPE} eq "DEVICE" ||
$hash->{SUBTYPE} eq "PLACE" ) { $hash->{SUBTYPE} eq "PLACE" ) {
$list = "dim:slider,0,1,100 setClosure open:noArg close:noArg my:noArg stop:noArg"; $list = "dim:slider,0,1,100 setClosure open:noArg close:noArg my:noArg stop:noArg cancel:noArg";
$list = $hash->{COMMANDS} if (defined $hash->{COMMANDS}); $list = $hash->{COMMANDS} if (defined $hash->{COMMANDS});
if( $cmd eq "cancel" ) {
tahoma_cancelExecutions($hash);
return undef;
}
$cmd = "setClosure" if( $cmd eq "dim" ); $cmd = "setClosure" if( $cmd eq "dim" );
my @commands = split(" ",$list); my @commands = split(" ",$list);
@ -1145,7 +1239,7 @@ sub tahoma_Set($$@)
} }
if( $hash->{SUBTYPE} eq "SCENE") { if( $hash->{SUBTYPE} eq "SCENE") {
$list = "start:noArg startAt"; $list = "start:noArg startAt cancel:noArg";
if( $cmd eq "start" ) { if( $cmd eq "start" ) {
tahoma_scheduleActionGroup($hash,0); tahoma_scheduleActionGroup($hash,0);
@ -1156,6 +1250,20 @@ sub tahoma_Set($$@)
tahoma_scheduleActionGroup($hash,$val); tahoma_scheduleActionGroup($hash,$val);
return undef; return undef;
} }
if( $cmd eq "cancel" ) {
tahoma_cancelExecutions($hash);
return undef;
}
}
if( $hash->{SUBTYPE} eq "ACCOUNT") {
$list = "cancel:noArg";
if( $cmd eq "cancel" ) {
tahoma_cancelExecutions($hash);
return undef;
}
} }
return "Unknown argument $cmd, choose one of $list"; return "Unknown argument $cmd, choose one of $list";
@ -1208,6 +1316,7 @@ sub tahoma_UserAgent_NonblockingGet($)
{ {
my ($param) = @_; my ($param) = @_;
my ($hash) = $param->{hash}; my ($hash) = $param->{hash};
$hash = $hash->{IODev} if (defined ($hash->{IODev}));
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3 $name, 5, "$name: tahoma_UserAgent_NonblockingGet page=$param->{page}"; Log3 $name, 5, "$name: tahoma_UserAgent_NonblockingGet page=$param->{page}";
@ -1218,7 +1327,7 @@ sub tahoma_UserAgent_NonblockingGet($)
$param->{compress} = 1; $param->{compress} = 1;
$param->{keepalive} = 1; $param->{keepalive} = 1;
$param->{url} = $hash->{url} . $param->{page}; $param->{url} = $hash->{url} . $param->{page};
$param->{url} .= $param->{subPage} if ($param->{subPage}); $param->{url} .= $param->{subpage} if ($param->{subpage});
$hash->{request_active} = 1; $hash->{request_active} = 1;
$hash->{request_time} = time; $hash->{request_time} = time;