mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
CUL_HM:templatehandling, expert attribut bugfix
git-svn-id: https://svn.fhem.de/fhem/trunk@9697 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ea16a9d1cd
commit
7d3c888d83
@ -278,6 +278,7 @@ sub CUL_HM_updateConfig($){
|
||||
}
|
||||
}
|
||||
elsif ($md =~ m/(CCU-FHEM)/){
|
||||
$hash->{helper}{role}{vrt} = 1;
|
||||
if($hash->{helper}{role}{dev}){
|
||||
CUL_HM_UpdtCentral($name); # first update, then keys
|
||||
if(eval "defined(&HMLAN_writeAesKey)"){
|
||||
@ -833,10 +834,6 @@ sub CUL_HM_AttrCheck(@) {############################
|
||||
return " $attrName only valid for devices"
|
||||
if (($modules{CUL_HM}{Attr}{dev}.$modules{CUL_HM}{Attr}{devPhy}) =~ m /\b$attrName\b/);
|
||||
}
|
||||
if ($defs{$name}{helper}{role}{vrt}){
|
||||
return " $attrName only valid for physical devices"
|
||||
if ($modules{CUL_HM}{Attr}{devPhy} =~ m /\b$attrName\b/);
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
sub CUL_HM_prtInit($){ #setup protocol variables after define
|
||||
@ -1393,7 +1390,7 @@ sub CUL_HM_Parse($$) {#########################################################
|
||||
$chnHash->{helper}{needUpdate} = 1 if($mode =~ m /central/ && $mh{mTp} eq '10');
|
||||
}
|
||||
push @evtEt,[$mh{shash},1,"desired-temp:$dTemp"];
|
||||
push @evtEt,[$mh{shash},1,"battery:".($err&0x80?"low":"ok")];
|
||||
push @evtEt,[$mh{devH},1,"battery:".($err&0x80?"low":"ok")];
|
||||
}
|
||||
elsif( $mh{mTp} eq "10" && # Config change report
|
||||
($mh{p} =~ m/^0402000000000501/)) { # paramchanged L5
|
||||
@ -1645,10 +1642,10 @@ sub CUL_HM_Parse($$) {#########################################################
|
||||
push @evtEt,[$mh{cHash},1,"desired-temp:$setTemp"];
|
||||
push @evtEt,[$mh{cHash},1,"controlMode:$ctlTbl{$ctrlMode}"];
|
||||
push @evtEt,[$mh{cHash},1,"state:T: $actTemp desired: $setTemp"];
|
||||
push @evtEt,[$mh{cHash},1,"battery:".($lbat?"low":"ok")];
|
||||
push @evtEt,[$mh{cHash},1,"commReporting:$cRep"];
|
||||
push @evtEt,[$mh{cHash},1,"winOpenReporting:$wRep"];
|
||||
push @evtEt,[$mh{cHash},1,"boostTime:$bTime"];
|
||||
push @evtEt,[$mh{devH},1,"battery:".($lbat?"low":"ok")];
|
||||
push @evtEt,[$mh{devH},1,"desired-temp:$setTemp"];
|
||||
}
|
||||
elsif($mh{mTp} eq "70"){
|
||||
@ -1702,14 +1699,14 @@ sub CUL_HM_Parse($$) {#########################################################
|
||||
|
||||
push @evtEt,[$mh{shash},1,"level:$lvl"] if($mh{md} eq "HM-Sen-Wa-Od");
|
||||
push @evtEt,[$mh{shash},1,"state:$lvl"];
|
||||
push @evtEt,[$mh{shash},1,"battery:".($err&0x80?"low":"ok")] if (defined $err);
|
||||
push @evtEt,[$mh{devH},1,"battery:".($err&0x80?"low":"ok")] if (defined $err);
|
||||
}
|
||||
}
|
||||
elsif($mh{md} eq "KFM-Sensor") { ############################################
|
||||
if ($mh{mTp} eq "53"){
|
||||
if($mh{p} =~ m/(..)4(.)0200(..)(..)(..)/) {
|
||||
my ($chn,$seq, $k_v1, $k_v2, $k_v3) = (hex($1),hex($2),$3,hex($4),hex($5));
|
||||
push @evtEt,[$mh{shash},1,"battery:".($chn & 0x80?"low":"ok")];
|
||||
push @evtEt,[$mh{devH},1,"battery:".($chn & 0x80?"low":"ok")];
|
||||
my $v = 1408 - ((($k_v3 & 0x07)<<8) + $k_v2);
|
||||
push @evtEt,[$mh{shash},1,"rawValue:$v"];
|
||||
my $nextSeq = ReadingsVal($mh{devN},"Sequence","");
|
||||
@ -2305,7 +2302,7 @@ sub CUL_HM_Parse($$) {#########################################################
|
||||
else{
|
||||
push @evtEt,[$mh{shash},1,"cover:". (($err&0x0E)?"open" :"closed")];
|
||||
}
|
||||
push @evtEt,[$mh{shash},1,"battery:". (($err&0x80)?"low" :"ok" )];
|
||||
push @evtEt,[$mh{devH},1,"battery:". (($err&0x80)?"low" :"ok" )];
|
||||
}
|
||||
elsif($mh{mTp} eq "41") {#01 is channel
|
||||
my($chn,$cnt,$bright) = (hex($mI[0]),hex($mI[1]),hex($mI[2]));
|
||||
@ -2460,7 +2457,7 @@ sub CUL_HM_Parse($$) {#########################################################
|
||||
$state = " (uncertain)";
|
||||
}
|
||||
push @evtEt,[$mh{shash},1,"unknown:40"] if($err&0x40);
|
||||
push @evtEt,[$mh{shash},1,"battery:" .(($err&0x80) ? "low":"ok")];
|
||||
push @evtEt,[$mh{devH},1,"battery:" .(($err&0x80) ? "low":"ok")];
|
||||
push @evtEt,[$mh{shash},1,"uncertain:" .(($err&0x30) ? "yes":"no")];
|
||||
push @evtEt,[$mh{shash},1,"direction:" .$dir{($err>>4)&3}];
|
||||
push @evtEt,[$mh{shash},1,"error:" . ($error)];
|
||||
@ -2906,6 +2903,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
||||
delete $chnhash->{helper}{getCfgList};
|
||||
delete $chnhash->{helper}{getCfgListNo};
|
||||
CUL_HM_rmOldRegs($chnName);
|
||||
$chnhash->{READINGS}{".peerListRDate"}{VAL} = $chnhash->{READINGS}{".peerListRDate"}{TIME} = TimeNow();
|
||||
}
|
||||
else{
|
||||
CUL_HM_respPendToutProlong($mhp->{devH});#wasn't last - reschedule timer
|
||||
@ -3704,11 +3702,11 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
if ($sectIn eq "all") {
|
||||
@sectL = ("rssi","msgEvents","readings","attack");#readings is last - it schedules a reread possible
|
||||
}
|
||||
elsif($sectIn =~ m/(rssi|trigger|msgEvents|readings|register|unknownDev|attack)/){
|
||||
elsif($sectIn =~ m/(rssi|trigger|msgEvents|readings|oldRegs|register|unknownDev|attack)/){
|
||||
@sectL = ($sectIn);
|
||||
}
|
||||
else{
|
||||
return "unknown section. User readings, msgEvents or rssi";
|
||||
return "unknown section:$sectIn. User rssi|trigger|msgEvents|readings|oldRegs|register|unknownDev|attack";
|
||||
}
|
||||
foreach my $sect (@sectL){
|
||||
if ($sect eq "readings"){
|
||||
@ -3738,6 +3736,11 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
CUL_HM_complConfig($h->{NAME});
|
||||
}
|
||||
}
|
||||
elsif($sect eq "oldRegs"){
|
||||
my @cN = ($name);
|
||||
push @cN,$hash->{$_} foreach(grep /^channel/,keys %{$hash});
|
||||
CUL_HM_refreshRegs($_) foreach (@cN);
|
||||
}
|
||||
elsif($sect eq "msgEvents"){
|
||||
CUL_HM_respPendRm($hash);
|
||||
|
||||
@ -6937,6 +6940,25 @@ sub CUL_HM_rmOldRegs($){ # remove register i outdated
|
||||
delete $hash->{READINGS}{$_} foreach (grep /^R-$peer-/,keys %{$hash->{READINGS}})
|
||||
}
|
||||
}
|
||||
sub CUL_HM_refreshRegs($){ # renew all register readings from Regl_
|
||||
my $name = shift;
|
||||
foreach(grep /\.?R-/,keys %{$defs{$name}{READINGS}}){
|
||||
delete $defs{$name}{READINGS}{$_};
|
||||
}
|
||||
my $peers = ReadingsVal($name,"peerList","");
|
||||
my $dH = CUL_HM_getDeviceHash($defs{$name});
|
||||
foreach(grep /\.?RegL_/,keys %{$defs{$name}{READINGS}}){
|
||||
my ($l,$p) = ($1,$2) if($_ =~ m/RegL_(..):(.*)/);
|
||||
my $ps = $p;
|
||||
$ps =~ s/_chn:.*//;
|
||||
if (!$p || $peers =~ m /$ps/){
|
||||
CUL_HM_updtRegDisp($defs{$name},$l,CUL_HM_name2Id($p,$dH));
|
||||
}
|
||||
else{
|
||||
delete $defs{$name}{READINGS}{$_};# peer for This List not found
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#############################
|
||||
#+++++++++++++++++ parameter cacculations +++++++++++++++++++++++++++++++++++++
|
||||
|
@ -978,7 +978,7 @@ sub HMinfo_GetFn($@) {#########################################################
|
||||
my @IOlist;
|
||||
my @plSum; push @plSum,0 for (0..9);#prefill
|
||||
my $maxNlen = 3;
|
||||
foreach my $dName (HMinfo_getEntities($opt."d",$filter)){
|
||||
foreach my $dName (HMinfo_getEntities($opt."dv",$filter)){
|
||||
my $id = $defs{$dName}{DEF};
|
||||
my $nl = length($dName);
|
||||
$maxNlen = $nl if($nl > $maxNlen);
|
||||
@ -1167,7 +1167,7 @@ sub HMinfo_GetFn($@) {#########################################################
|
||||
keys %{$defs{$dName}{READINGS}})){
|
||||
push @peerUndef,"$dName triggers $_"
|
||||
if( ($peerIDs && $peerIDs !~ m/$_/)
|
||||
||("CCU-FHEM" ne AttrVal(CUL_HM_id2Name($_),"model","")));
|
||||
&&("CCU-FHEM" ne AttrVal(CUL_HM_id2Name($_),"model","")));
|
||||
}
|
||||
|
||||
#--- check regular references
|
||||
@ -1359,7 +1359,7 @@ sub HMinfo_SetFn($@) {#########################################################
|
||||
}
|
||||
if ($type ne "msgStat"){
|
||||
return "unknown parameter - use Protocol, readings, msgStat, register, rssi or all"
|
||||
if ($type !~ m/^(Protocol|readings|register|rssi|all|trigger)$/);
|
||||
if ($type !~ m/^(Protocol|readings|register|oldRegs|rssi|all|trigger)$/);
|
||||
$opt .= "d" if ($type =~ m/(Protocol|rssi)/);# readings apply to all, others device only
|
||||
my @entities;
|
||||
$type = "msgEvents" if ($type eq "Protocol");# translate parameter
|
||||
@ -1663,6 +1663,7 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
next if ( $line !~ m/set .* (peerBulk|regBulk) .*/
|
||||
&& $line !~ m/(setreading|template.e.) .*/);
|
||||
my ($command,$timeStamp) = split("#",$line,2);
|
||||
$timeStamp = "1900-01-01 00:00:01" if (!$timeStamp || $timeStamp !~ m /^20..-..-.. /);
|
||||
my ($cmd1,$eN,$cmd,$param) = split(" ",$command,4);
|
||||
next if ($eN !~ m/$filter/);
|
||||
if ($cmd1 !~ m /^template(Def|Set)$/ && (!$eN || !$defs{$eN})){
|
||||
@ -1675,7 +1676,7 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
$changes{$eN}{$cmd}{t}=$timeStamp ;
|
||||
}
|
||||
$defs{$eN}{READINGS}{$cmd}{VAL} = $param;
|
||||
$defs{$eN}{READINGS}{$cmd}{TIME} = "from archive";
|
||||
$defs{$eN}{READINGS}{$cmd}{TIME} = "from archivexx";
|
||||
}
|
||||
elsif($cmd1 eq "templateDef"){
|
||||
if ($eN eq "templateStart"){#if new block we remove all old templates
|
||||
@ -1701,9 +1702,11 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
push @elincmpl,"$eN peerList";
|
||||
next;
|
||||
}
|
||||
if (!AttrVal($eN,"peerIDs","")){
|
||||
if ( $timeStamp
|
||||
&& $timeStamp gt ReadingsTimestamp($eN,".peerListRDate","1900-01-01 00:00:01")){
|
||||
CUL_HM_ID2PeerList($eN,$_,1) foreach (grep /[0-9A-F]{8}/,split(",",$param));
|
||||
push @el,"$eN peerIDs";
|
||||
$defs{$eN}{READINGS}{".peerListRDate"}{VAL} = $defs{$eN}{READINGS}{".peerListRDate"}{TIME} = $timeStamp;
|
||||
}
|
||||
}
|
||||
elsif($cmd eq "regBulk"){
|
||||
@ -1721,12 +1724,16 @@ sub HMinfo_loadConfig($@) {####################################################
|
||||
push @elincmpl,"$eN reg list:$reg";
|
||||
next;
|
||||
}
|
||||
|
||||
my $ts = ReadingsTimestamp($eN,$reg,"1900-01-01 00:00:01");
|
||||
$ts = "1900-01-01 00:00:00" if ($ts !~ m /^20..-..-.. /);
|
||||
if ( !$defs{$eN}{READINGS}{$reg}
|
||||
|| $defs{$eN}{READINGS}{$reg}{VAL} !~ m/00:00/
|
||||
|| ( $timeStamp
|
||||
&& $timeStamp gt ReadingsTimestamp($eN,$reg,"1900-01-01 00:00:01")
|
||||
)){
|
||||
|| ( ( $timeStamp gt $ts
|
||||
||( $changes{$eN}
|
||||
&& $changes{$eN}{$reg}
|
||||
&& $timeStamp gt $changes{$eN}{$reg}{t})
|
||||
))){
|
||||
$data =~ s/ //g;
|
||||
$changes{$eN}{$reg}{d}=$data;
|
||||
$changes{$eN}{$reg}{t}=$timeStamp;
|
||||
}
|
||||
@ -1909,7 +1916,7 @@ sub HMinfo_bpAbort($) {#bp timeout ############################################
|
||||
|
||||
sub HMinfo_templateDef(@){#####################################################
|
||||
my ($name,$param,$desc,@regs) = @_;
|
||||
return "insufficient parameter" if(!defined $param);
|
||||
return "insufficient parameter, no param" if(!defined $param);
|
||||
$HMConfig::culHmTpl{tmplDefChange} = 1;# signal we have a change!
|
||||
if ($param eq "del"){
|
||||
delete $HMConfig::culHmTpl{$name};
|
||||
@ -1951,7 +1958,7 @@ sub HMinfo_templateDef(@){#####################################################
|
||||
splice @regs,0,$cnt;
|
||||
}
|
||||
|
||||
return "insufficient parameter" if(@regs < 1);
|
||||
return "insufficient parameter, regs missing" if(@regs < 1);
|
||||
|
||||
my $paramNo;
|
||||
if($param ne "0"){
|
||||
@ -2059,7 +2066,8 @@ sub HMinfo_templateUsg(@){#####################################################
|
||||
elsif($tFilter ne $t){
|
||||
next;}
|
||||
}
|
||||
else{ push @ul,sprintf("%-20s|%-15s|%s|%s",$dName,$p,$t,$defs{$dName}{helper}{tmpl}{$tid});}
|
||||
else{
|
||||
push @ul,sprintf("%-20s|%-15s|%s|%s",$dName,$p,$t,$defs{$dName}{helper}{tmpl}{$tid});}
|
||||
}
|
||||
}
|
||||
return join("\n",sort(@ul));
|
||||
|
@ -1391,7 +1391,6 @@ $culHmRegChan{"ROTO_ZEL-STG-RM-FWT03"}= $culHmRegChan{"HM-CC-TC03"};
|
||||
%culHmVrtGets = (
|
||||
param => "<param>",
|
||||
cmdList => "",
|
||||
saveConfig => "<filename> ...",
|
||||
);
|
||||
%culHmSubTypeGets = (
|
||||
none4Type =>{ "test"=>"" },
|
||||
@ -1409,13 +1408,11 @@ $culHmRegChan{"ROTO_ZEL-STG-RM-FWT03"}= $culHmRegChan{"HM-CC-TC03"};
|
||||
,getRegRaw => "[List0|List1|List2|List3|List4|List5|List6] ... [<PeerChannel>]"
|
||||
,getConfig => ""
|
||||
,regSet => "[prep|exec] <regName> <value> ... [<peerChannel>]"
|
||||
,clear => "[readings|trigger|register|rssi|msgEvents|attack|all]"
|
||||
,clear => "[readings|trigger|register|oldRegs|rssi|msgEvents|attack|all]"
|
||||
);
|
||||
%culHmGlobalSetsVrtDev = (# virtuals and devices without subtype
|
||||
raw => "data ..."
|
||||
,virtual => "<noButtons>"
|
||||
virtual => "<noButtons>"
|
||||
,clear => "[readings|rssi|msgEvents|unknownDev]"
|
||||
,deviceRename => "newName"
|
||||
);
|
||||
%culHmGlobalSetsDevice = (# all devices but virtuals
|
||||
raw => "data ..."
|
||||
@ -1656,7 +1653,6 @@ $culHmModelSets{"ROTO_ZEL-STG-RM-DWT-10"}= $culHmModelSets{"HM-PB-4DIS-WM"};
|
||||
,hmPairForSec =>"<sec> ..."
|
||||
,hmPairSerial =>"<serial>"
|
||||
,defIgnUnknown =>""
|
||||
,virtual =>"<noButtons>"
|
||||
,assignIO =>"<IO> [set|unset]..."
|
||||
}
|
||||
,"HM-LC-RGBW-WM01" =>{ "on-for-timer" =>"<ontime> [<ramptime>]..."
|
||||
|
Loading…
x
Reference in New Issue
Block a user