2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-07 12:58:13 +00:00

10_ZWave.pm: get versionClassAll rewrite (Forum #50090)

git-svn-id: https://svn.fhem.de/fhem/trunk@11022 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2016-03-07 16:02:52 +00:00
parent 3e4432d41f
commit 962cc9383a

View File

@ -97,16 +97,16 @@ my %zwave_class = (
"042b01(..)ff" => 'ZWave_sceneParse($1)'} }, "042b01(..)ff" => 'ZWave_sceneParse($1)'} },
SCENE_ACTUATOR_CONF => { id => '2c', SCENE_ACTUATOR_CONF => { id => '2c',
set => { sceneConfig => "01%02x%02x80%02x" }, set => { sceneConfig => "01%02x%02x80%02x" },
get => { sceneConfig => "02%02x", }, get => { sceneConfig => "02%02x" },
parse => { "052c03(..)(..)(..)" => '"scene_$1:level $2 duration $3"' } }, parse => { "052c03(..)(..)(..)" => '"scene_$1:level $2 duration $3"' } },
SCENE_CONTROLLER_CONF => { id => '2d', SCENE_CONTROLLER_CONF => { id => '2d',
set => { sceneConfig => "01%02x%02x%02x" }, set => { sceneConfig => "01%02x%02x%02x" },
get => { sceneConfig => "02%02x", }, get => { sceneConfig => "02%02x" },
parse => { "052d03(..)(..)(..)" => '"group_$1:scene $2 duration $3"' } }, parse => { "052d03(..)(..)(..)" => '"group_$1:scene $2 duration $3"' } },
ZIP_CLIENT => { id => '2e' }, ZIP_CLIENT => { id => '2e' },
ZIP_ADV_SERVICES => { id => '2f' }, ZIP_ADV_SERVICES => { id => '2f' },
SENSOR_BINARY => { id => '30', SENSOR_BINARY => { id => '30',
get => { sbStatus => "02", }, get => { sbStatus => "02" },
parse => { "03300300" => "state:closed", parse => { "03300300" => "state:closed",
"033003ff" => "state:open", "033003ff" => "state:open",
"043003(..)(..)"=> 'ZWave_sensorbinaryV2Parse($1,$2)' } }, "043003(..)(..)"=> 'ZWave_sensorbinaryV2Parse($1,$2)' } },
@ -404,7 +404,7 @@ my %zwave_class = (
init => { ORDER=>10, CMD=> '"set $NAME associationAdd 1 $CTRLID"' } }, init => { ORDER=>10, CMD=> '"set $NAME associationAdd 1 $CTRLID"' } },
VERSION => { id => '86', VERSION => { id => '86',
get => { version => "11", get => { version => "11",
versionClass => 'ZWave_versionClassGet("%s")', versionClass => 'ZWave_versionClassGet($hash, "%s")',
versionClassAll => 'ZWave_versionClassAllGet($hash)'}, versionClassAll => 'ZWave_versionClassAllGet($hash)'},
parse => { "028611" => "cmdGet:version", parse => { "028611" => "cmdGet:version",
"078612(..........)" => 'sprintf("version:Lib %d Prot '. "078612(..........)" => 'sprintf("version:Lib %d Prot '.
@ -592,6 +592,7 @@ ZWave_Initialize($)
if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; } if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; }
$fn .= "/zwave"; $fn .= "/zwave";
if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; } if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; }
} }
@ -1595,10 +1596,11 @@ ZWave_meterSupportedParse($$)
sub sub
ZWave_versionClassGet($) ZWave_versionClassGet($$)
{ {
my ($class) = @_; my ($hash, $class) = @_;
$zwave_parseHook{"$hash->{nodeIdHex}:..8614"} = \&ZWave_versionClassAllGet;
return("", sprintf('13%02x', $class)) return("", sprintf('13%02x', $class))
if($class =~ m/\d+/); if($class =~ m/\d+/);
return("", sprintf('13%02x', hex($zwave_class{$class}{id}))) return("", sprintf('13%02x', hex($zwave_class{$class}{id})))
@ -1612,27 +1614,22 @@ ZWave_versionClassAllGet($@)
{ {
my ($hash, $data) = @_; my ($hash, $data) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $hname = ".versionClassAllGet";
$zwave_parseHook{"$hash->{nodeIdHex}:..8614"} = \&ZWave_versionClassAllGet;
if(!$data) { # called by the user if(!$data) { # called by the user
$zwave_parseHook{"$hash->{nodeIdHex}:..8614"} = \&ZWave_versionClassAllGet;
delete($hash->{CL}); delete($hash->{CL});
my @arr = split(" ", AttrVal($name, "classes", "")); foreach my $c (sort split(" ", AttrVal($name, "classes", ""))) {
$hash->{$hname} = \@arr; next if($c eq "MARK");
ZWave_Get($hash, $name, "versionClass", shift @{$hash->{$hname}}); ZWave_Get($hash, $name, "versionClass", $c);
$attr{$name}{vclasses} = ""; }
return("", "EMPTY"); return("", "EMPTY");
} }
my %h = map { $_=>1 } split(" ", AttrVal($name, "vclasses", ""));
return 0 if($data !~ m/^048614(..)(..)$/i); # ?? return 0 if($data !~ m/^048614(..)(..)$/i); # ??
$attr{$name}{vclasses} .= " " if($attr{$name}{vclasses}); $h{$zwave_id2class{lc($1)}.":".hex($2)} = 1;
$attr{$name}{vclasses} .= $zwave_id2class{lc($1)}.":".hex($2); $attr{$name}{vclasses} = join(" ", sort keys %h);
if(!int(@{$hash->{$hname}})) {
delete($hash->{$hname});
return 1; # "veto" for parseHook
}
ZWave_Get($hash, $name, "versionClass", shift @{$hash->{$hname}});
$zwave_parseHook{"$hash->{nodeIdHex}:..8614"} = \&ZWave_versionClassAllGet;
return 1; # "veto" for parseHook return 1; # "veto" for parseHook
} }
@ -3554,7 +3551,7 @@ ZWave_isWakeUp($)
sub sub
ZWave_processSendStack($$;$) ZWave_processSendStack($$;$)
{ {
my ($hash,$ackType, $msg) = @_; my ($hash,$ackType, $omsg) = @_;
my $ss = $hash->{SendStack}; my $ss = $hash->{SendStack};
return if(!$ss); return if(!$ss);
@ -3565,7 +3562,7 @@ ZWave_processSendStack($$;$)
} elsif($1 eq "ackget" && $ackType eq "msg") {# compare answer class for get } elsif($1 eq "ackget" && $ackType eq "msg") {# compare answer class for get
my $cs = substr($2, 6, 2); my $cs = substr($2, 6, 2);
my $cg = substr($msg, 2, 2); my $cg = substr($omsg, 2, 2);
return if($cs ne $cg); return if($cs ne $cg);
} }