mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 20:24:36 +00:00
10_ZWave.pm: useMultiCmd attribute (Forum #61527)
git-svn-id: https://svn.fhem.de/fhem/trunk@13239 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
14c16e6030
commit
68ea102cff
@ -636,6 +636,7 @@ ZWave_Initialize($)
|
|||||||
secure_classes
|
secure_classes
|
||||||
showtime:1,0
|
showtime:1,0
|
||||||
vclasses
|
vclasses
|
||||||
|
useMultiCmd
|
||||||
zwaveRoute
|
zwaveRoute
|
||||||
);
|
);
|
||||||
use warnings 'qw';
|
use warnings 'qw';
|
||||||
@ -4102,6 +4103,8 @@ sub
|
|||||||
ZWave_processSendStack($$;$)
|
ZWave_processSendStack($$;$)
|
||||||
{
|
{
|
||||||
my ($hash,$ackType, $omsg) = @_;
|
my ($hash,$ackType, $omsg) = @_;
|
||||||
|
|
||||||
|
delete($hash->{delayedProcessing});
|
||||||
my $ss = $hash->{SendStack};
|
my $ss = $hash->{SendStack};
|
||||||
if(!$ss) {
|
if(!$ss) {
|
||||||
readingsSingleUpdate($hash, "timeToAck",
|
readingsSingleUpdate($hash, "timeToAck",
|
||||||
@ -4179,6 +4182,35 @@ ZWave_processSendStack($$;$)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# packs multiple gets into a MULTI_CMD-get, may reorder
|
||||||
|
sub
|
||||||
|
ZWave_packSendStack($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
my (@ns, @ms, $sfx, $cmd, $id);
|
||||||
|
my $ncmd = 0;
|
||||||
|
for my $se (@{$hash->{SendStack}}) {
|
||||||
|
if($se =~ m/^get:13(..)(...*)(....)$/) {
|
||||||
|
($id, $cmd, $sfx) = ($1, $2, $3);
|
||||||
|
if($cmd =~ m/^..8f01(..)(.*)/i) { # already Multi-cmd
|
||||||
|
$ncmd += $1; $cmd = $2;
|
||||||
|
} else {
|
||||||
|
$ncmd++;
|
||||||
|
}
|
||||||
|
push(@ms, $cmd);
|
||||||
|
} else {
|
||||||
|
push(@ns, $se);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return if($ncmd < 2 || @ms < 2);
|
||||||
|
|
||||||
|
$cmd = join("", @ms);
|
||||||
|
push @ns, sprintf("get:13$id%02x8f01%02x%s%s",
|
||||||
|
length($cmd)/2+3, $ncmd, $cmd, $sfx);
|
||||||
|
$hash->{SendStack} = \@ns;
|
||||||
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
ZWave_addToSendStack($$$)
|
ZWave_addToSendStack($$$)
|
||||||
{
|
{
|
||||||
@ -4208,6 +4240,16 @@ ZWave_addToSendStack($$$)
|
|||||||
return ZWave_addToSendStack($hash, $type, $cmd);
|
return ZWave_addToSendStack($hash, $type, $cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($hash->{useMultiCmd}) {
|
||||||
|
ZWave_packSendStack($hash);
|
||||||
|
if($hash->{INTRIGGER}) { # Allow repacking of multiple gets on WUN
|
||||||
|
if(!$hash->{delayedProcessing}) {
|
||||||
|
$hash->{delayedProcessing} = 1;
|
||||||
|
InternalTimer(1, sub(){ZWave_processSendStack($hash, "next");}, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
ZWave_processSendStack($hash, "next") if(@{$ss} == 1);
|
ZWave_processSendStack($hash, "next") if(@{$ss} == 1);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -4747,6 +4789,17 @@ ZWave_Attr(@)
|
|||||||
my %h = map { split(":", $_) } split(" ", $param);
|
my %h = map { split(":", $_) } split(" ", $param);
|
||||||
$hash->{".vclasses"} = \%h;
|
$hash->{".vclasses"} = \%h;
|
||||||
return undef;
|
return undef;
|
||||||
|
|
||||||
|
} elsif($attrName eq "useMultiCmd") {
|
||||||
|
if($type eq "del") {
|
||||||
|
$hash->{".vclasses"} = {};
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
my $a = ($attr{$devName} ? $attr{$devName}{classes} : "");
|
||||||
|
return "useMultiCmd: unsupported device, see help ZWave for details"
|
||||||
|
if(!$a || !($a =~ m/MULTI_CMD/ && $a =~ m/WAKE_UP/));
|
||||||
|
$hash->{useMultiCmd} = 1;
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
@ -5883,6 +5936,12 @@ s2Hex($)
|
|||||||
contains the version information for each of the supported classes.
|
contains the version information for each of the supported classes.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li><a name="useMultiCmd">useMultiCmd</a><br>
|
||||||
|
Experimental: if a device supports MULTI_CMD and WAKE_UP, then pack
|
||||||
|
multiple get messages on the SendStack into a single MULTI_CMD to save
|
||||||
|
radio transmissions.
|
||||||
|
</li>
|
||||||
|
|
||||||
<li><a name="zwaveRoute">zwaveRoute</a><br>
|
<li><a name="zwaveRoute">zwaveRoute</a><br>
|
||||||
space separated list of (ZWave) device names. They will be used in the
|
space separated list of (ZWave) device names. They will be used in the
|
||||||
given order to route messages from the controller to this device. Specify
|
given order to route messages from the controller to this device. Specify
|
||||||
|
Loading…
x
Reference in New Issue
Block a user