diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index b9c1c69f4..6575ab4fb 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -80,7 +80,7 @@ sub HMLAN_Initialize($) { "loadLevel ". "hmLanQlen:1_min,2_low,3_normal,4_high,5_critical ". "wdTimer:5,10,15,20,25 ". - "logIDs ". + "logIDs:multiple,sys,all ". $readingFnAttributes; } sub HMLAN_Define($$) {######################################################### @@ -250,6 +250,7 @@ sub HMLAN_Attr(@) {############################################################ } } elsif($aName eq "logIDs"){ + HMLAN_UpdtLogId(); if ($cmd eq "set"){ if ($init_done){ if ($aVal){ @@ -349,6 +350,15 @@ sub HMLAN_Attr(@) {############################################################ return; } +sub HMLAN_UpdtLogId() {#################################################### + $modules{HMLAN}{AttrList} =~ s/logIDs:.*? //; + $modules{HMLAN}{AttrList} =~ s/logIDs:.*?$//; + $modules{HMLAN}{AttrList} .= " logIDs:multiple,sys,all," + .join(",",(devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=virtual"))); + return; +} + + sub HMLAN_UpdtMsgLoad($$) {#################################################### my($name,$val) = @_; my $hash = $defs{$name}; @@ -949,7 +959,6 @@ sub HMLAN_assignIDs($){ sub HMLAN_writeAesKey($) {##################################################### my ($name) = @_; return if (!$name || !$defs{$name} || $defs{$name}{TYPE} ne "HMLAN"); -# return if (!$init_done); General: need to wait for init done and then redo my %keys = (); my $vccu = InternalVal($name,"owner_CCU",$name); $vccu = $name if(!AttrVal($vccu,"hmKey","")); diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 9da21a2a5..4595034c3 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -4786,7 +4786,10 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++ } elsif($cmd eq "playTone") { ################################################# my $msg; - if ($a[2] eq 'replay'){ + if (!defined $a[2]){ + return "please enter parameter"; + } + elsif ($a[2] eq 'replay'){ $msg = ReadingsVal($chnHash->{NAME},".lastTone",""); } else{ @@ -6267,6 +6270,9 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register next if (!$change);#no changes $change =~ s/00:00//; $change =~ s/(\ |:)//g; + if ($nrRd){ + $chnhash->{READINGS}{$regPre.$nrn}{VAL} =~ s/00:00// #mark incomplete as wego for a change; + } my $pN; $changed = 1;# yes, we did ($list,$pN) = ($1,$2) if($nrn =~ m/RegL_(..)\.(.*)/); @@ -6293,7 +6299,10 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register } ######### } - CUL_HM_qAutoRead($hash->{NAME},3) if ($changed); + if ($changed){ + CUL_HM_complConfig($hash->{NAME},1); + CUL_HM_qAutoRead($hash->{NAME},3) ; + } } sub CUL_HM_PushCmdStack($$) { my ($chnhash, $cmd) = @_; diff --git a/fhem/FHEM/98_HMinfo.pm b/fhem/FHEM/98_HMinfo.pm index f2b9958b7..2052e308e 100644 --- a/fhem/FHEM/98_HMinfo.pm +++ b/fhem/FHEM/98_HMinfo.pm @@ -426,7 +426,6 @@ sub HMinfo_regCheck(@) { ###################################################### foreach my $rNm (@lsNo){# check non-peer lists next if (!$rNm || $rNm eq ""); - if ( !$ehash->{READINGS}{$rNm} || !$ehash->{READINGS}{$rNm}{VAL}) {push @mReg, $rNm;} elsif ( $ehash->{READINGS}{$rNm}{VAL} !~ m/00:00/){push @iReg, $rNm;} @@ -1578,7 +1577,18 @@ sub HMinfo_SetFn($@) {######################################################### my $fn = $a[0]?$a[0]:AttrVal($name,"configFilename","regSave.cfg"); $fn = "$attr{global}{modpath}/".AttrVal($name,"configDir",".")."\/".$fn if ($fn !~ m/\//); - $ret = HMinfo_verifyConfig($filter,$fn); + + if ($hash->{CL}){ + my $id = ++$hash->{nb}{cnt}; + my $bl = BlockingCall("HMinfo_verifyConfig", join(",",("$name;$id;$hash->{CL}{NAME}",$fn)), + "HMinfo_bpPost", 30, + "HMinfo_bpAbort", "$name:$id"); + $hash->{nb}{$id}{$_} = $bl->{$_} foreach (keys %{$bl}); + $ret = ""; + } + else{ + $ret = HMinfo_verifyConfig("$name;0;none,$fn"); + } } elsif($cmd eq "purgeConfig"){##action: purgeConfig--------------------------- my $id = ++$hash->{nb}{cnt}; @@ -1709,28 +1719,28 @@ sub HMInfo_help(){ ############################################################ ; } -sub HMinfo_verifyConfig($@) {################################################## - my ($filter,$fName)=@_; - $filter = "." if (!$filter); - my $ret; - +sub HMinfo_verifyConfig($) {################################################## + my ($param) = @_; + my ($id,$fName) = split ",",$param; + HMinfo_purgeConfig($param); open(aSave, "$fName") || return("Can't open $fName: $!"); my @elPeer = (); my @elReg = (); my @entryNF = (); my @elOk = (); + my %nh; while(){ chomp; my $line = $_; $line =~ s/\r//g; next if ( $line !~ m/set .* (peerBulk|regBulk) .*/); + $line =~ s/#.*//; my ($cmd1,$eN,$cmd,$param) = split(" ",$line,4); - next if ($eN !~ m/$filter/); if (!$eN || !$defs{$eN}){ push @entryNF,"$eN deleted"; next; } - + $nh{$eN} = 1 if (!defined $nh{$eN});# if($cmd eq "peerBulk"){ my $ePeer = AttrVal($eN,"peerIDs",""); if ($param ne $ePeer){ @@ -1742,6 +1752,7 @@ sub HMinfo_verifyConfig($@) {################################################## my @onlyEnt = grep { !$ep{$_} } @ePeers; push @elPeer,"$eN peer deleted: $_" foreach(@onlyFile); push @elPeer,"$eN peer added : $_" foreach(@onlyEnt); + $nh{$eN} = 0 if(scalar@onlyFile || scalar @onlyEnt); } } elsif($cmd eq "regBulk"){ @@ -1788,22 +1799,24 @@ sub HMinfo_verifyConfig($@) {################################################## push @elReg,"$eN " .($peer?": peer:$peer ":"") ."addr:$a changed from $r{$a}{f} to $r{$a}{c} - effected RegName:$rgN"; + $nh{$eN} = 0; } } - push @elOk," $eN" if ( !scalar @elPeer - &&!scalar @elReg); } } close(aSave); @elReg = HMinfo_noDup(@elReg); - @elOk = HMinfo_noDup(@elOk); - $ret .= "\nverified:\n " .join("\n ",sort(@elOk)) if (scalar @elOk); + foreach (sort keys(%nh)){ + push @elOk,"$_" if($nh{$_}); + } + my $ret; $ret .= "\npeer mismatch:\n " .join("\n ",sort(@elPeer)) if (scalar @elPeer); $ret .= "\nreg mismatch:\n " .join("\n ",sort(@elReg )) if (scalar @elReg); $ret .= "\nmissing devices:\n " .join("\n ",sort(@entryNF)) if (scalar @entryNF); - - return $ret; +# $ret .= "\nverified:\n " .join("\n ",sort(@elOk)) if (scalar @elOk); + $ret =~ s/\n/-ret-/g; + return "$id;$ret"; } sub HMinfo_loadConfig($@) {#################################################### my ($filter,$fName)=@_; @@ -1944,6 +1957,12 @@ sub HMinfo_purgeConfig($) {#################################################### chomp; my $line = $_; $line =~ s/\r//g; + if($line =~ m/entity:/){#remove an old entry. Last entry is the final. + my $name = $line; + $name =~ s/.*entity://; + $name =~ s/ .*//; + delete $purgeH{$name}; + } next if ( $line !~ m/set (.*) (peerBulk|regBulk) (.*)/ && $line !~ m/(setreading) .*/); my ($command,$timeStamp) = split("#",$line,2);