mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-07 19:04:20 +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:
parent
7d22b27e00
commit
98a0e689ac
@ -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,12 +1217,17 @@ 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);
|
||||||
foreach my $command (@commands)
|
foreach my $command (@commands)
|
||||||
{
|
{
|
||||||
if( $cmd eq (split(":",$command))[0])
|
if( $cmd eq (split(":",$command))[0])
|
||||||
@ -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,8 +1250,22 @@ 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user