mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
10_ZWave.pm: add command class version handling capability (Forum #53389)
git-svn-id: https://svn.fhem.de/fhem/trunk@11563 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
bbfc4a260a
commit
85f2425b9a
@ -417,7 +417,8 @@ my %zwave_class = (
|
|||||||
"0b8612(..................)" => 'sprintf("version:Lib %d Prot '.
|
"0b8612(..................)" => 'sprintf("version:Lib %d Prot '.
|
||||||
'%d.%d App %d.%d HW %d FWCounter %d FW %d.%d",'.
|
'%d.%d App %d.%d HW %d FWCounter %d FW %d.%d",'.
|
||||||
'unpack("C*",pack("H*","$1")))',
|
'unpack("C*",pack("H*","$1")))',
|
||||||
"048614(..)(..)" => '"versionClass_$1:$2"' } },
|
"048614(..)(..)" => '"versionClass_$1:$2"' },
|
||||||
|
init => { ORDER=>12, CMD => '"get $NAME versionClassAll"' } },
|
||||||
INDICATOR => { id => '87',
|
INDICATOR => { id => '87',
|
||||||
set => { indicatorOff => "0100",
|
set => { indicatorOff => "0100",
|
||||||
indicatorOn => "01FF",
|
indicatorOn => "01FF",
|
||||||
@ -482,12 +483,16 @@ my %zwave_class = (
|
|||||||
NON_INTEROPERABLE => { id => 'f0' },
|
NON_INTEROPERABLE => { id => 'f0' },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my %zwave_classVersion = (
|
||||||
|
dimWithDuration => { min => 2 },
|
||||||
|
);
|
||||||
|
|
||||||
my %zwave_cmdArgs = (
|
my %zwave_cmdArgs = (
|
||||||
set => {
|
set => {
|
||||||
dim => "slider,0,1,99",
|
dim => "slider,0,1,99",
|
||||||
indicatorDim => "slider,0,1,99",
|
indicatorDim => "slider,0,1,99",
|
||||||
rgb => "colorpicker,RGB",
|
rgb => "colorpicker,RGB",
|
||||||
configRGBLedColorForTesting => "colorpicker,RGB", # Aeon SmartSwitch 6
|
configRGBLedColorForTesting => "colorpicker,RGB", # Aeon SmartSwitch 6
|
||||||
},
|
},
|
||||||
get => {
|
get => {
|
||||||
},
|
},
|
||||||
@ -645,6 +650,7 @@ ZWave_Define($$)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
AssignIoPort($hash, $proposed);
|
AssignIoPort($hash, $proposed);
|
||||||
|
$hash->{".vclasses"} = {};
|
||||||
|
|
||||||
if(@a) { # Autocreate: set the classes, execute the init calls
|
if(@a) { # Autocreate: set the classes, execute the init calls
|
||||||
asyncOutput($hash->{IODev}{addCL}, "created $name") if($hash->{IODev});
|
asyncOutput($hash->{IODev}{addCL}, "created $name") if($hash->{IODev});
|
||||||
@ -1644,6 +1650,7 @@ ZWave_versionClassAllGet($@)
|
|||||||
my %h = map { $_=>1 } split(" ", AttrVal($name, "vclasses", ""));
|
my %h = map { $_=>1 } split(" ", AttrVal($name, "vclasses", ""));
|
||||||
return 0 if($data !~ m/^048614(..)(..)$/i); # ??
|
return 0 if($data !~ m/^048614(..)(..)$/i); # ??
|
||||||
$h{$zwave_id2class{lc($1)}.":".hex($2)} = 1;
|
$h{$zwave_id2class{lc($1)}.":".hex($2)} = 1;
|
||||||
|
$hash->{".vclasses"}{$zwave_id2class{lc($1)}} = hex($2);
|
||||||
$attr{$name}{vclasses} = join(" ", sort keys %h);
|
$attr{$name}{vclasses} = join(" ", sort keys %h);
|
||||||
return 1; # "veto" for parseHook
|
return 1; # "veto" for parseHook
|
||||||
}
|
}
|
||||||
@ -3515,6 +3522,16 @@ ZWave_getHash($$$)
|
|||||||
map { $ptr->{$_} = $add->{$_} } keys %{$add} if($add);
|
map { $ptr->{$_} = $add->{$_} } keys %{$add} if($add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $version = $hash->{".vclasses"}{$cl};
|
||||||
|
if(defined($version) && ($type eq "get" || $type eq "set")) {
|
||||||
|
map {
|
||||||
|
my $zv = $zwave_classVersion{$_};
|
||||||
|
delete $ptr->{$_} if($zv &&
|
||||||
|
(($zv->{min} && $zv->{min} > $version) ||
|
||||||
|
($zv->{max} && $zv->{max} < $version)));
|
||||||
|
} keys %{$ptr};
|
||||||
|
}
|
||||||
|
|
||||||
return $ptr;
|
return $ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4157,16 +4174,28 @@ ZWave_computeRoute($;$)
|
|||||||
sub
|
sub
|
||||||
ZWave_Attr(@)
|
ZWave_Attr(@)
|
||||||
{
|
{
|
||||||
my ($type, $devName, $attrName, @param) = @_;
|
my ($type, $devName, $attrName, $param) = @_;
|
||||||
|
my $hash = $defs{$devName};
|
||||||
|
|
||||||
if($attrName eq "zwaveRoute") {
|
if($attrName eq "zwaveRoute") {
|
||||||
if($type eq "del") {
|
if($type eq "del") {
|
||||||
delete $defs{$devName}{route};
|
delete $hash->{route};
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
return ZWave_computeRoute($devName,join(" ",@param)) if($init_done);
|
return ZWave_computeRoute($devName, $param) if($init_done);
|
||||||
InternalTimer(1, "ZWave_computeRoute", "TYPE=ZWave", 0);
|
InternalTimer(1, "ZWave_computeRoute", "TYPE=ZWave", 0);
|
||||||
|
return undef;
|
||||||
|
|
||||||
|
} elsif($attrName eq "vclasses") {
|
||||||
|
if($type eq "del") {
|
||||||
|
$hash->{".vclasses"} = {};
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
my %h = map { split(":", $_) } split(" ", $param);
|
||||||
|
$hash->{".vclasses"} = \%h;
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user