improve peerList for rain Sens

git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@3594 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876
2013-08-04 06:39:30 +00:00
parent 16851e487c
commit f2113d89dd
2 changed files with 13 additions and 9 deletions

View File

@@ -471,7 +471,6 @@ sub CUL_HM_Parse($$) {##############################
my ($len,$mNo,$mFlg,$mTp,$src,$dst,$p) = ($1,$2,$3,$4,$5,$6,$7);
$p = "" if(!defined($p));
my @mI = unpack '(A2)*',$p; # split message info to bytes
if ($msgStat){
return "" if($msgStat eq 'NACK');#discard if lowlevel error
}
@@ -874,6 +873,7 @@ sub CUL_HM_Parse($$) {##############################
my $hHash = CUL_HM_id2Hash($src."02");# hash for heating
my $pon = 0;# power on if mNo == 0 and heating status plus second msg
# status or trigger from rain channel
my $devHash = $shash;
if (($mTp eq "02" && $p =~ m/^01/) || #Ack_Status
($mTp eq "10" && $p =~ m/^06/)) { #Info_Status
@@ -898,7 +898,8 @@ sub CUL_HM_Parse($$) {##############################
$val = hex($val)/2;
}
push @event, "state:$val";
push @event, "level:".($val eq "off"?"0 %":"100 %");
CUL_HM_UpdtReadSingle($shash,'.level',#store level invisible
($val eq "off"?"0 %":"100 %"),0);
if ($mNo eq "00" && $chn eq "02" && $val eq "on"){
$hHash->{helper}{pOn} = 1;
@@ -931,7 +932,7 @@ sub CUL_HM_Parse($$) {##############################
delete $shash->{helper}{pOn};
}
if ($pon){# we have power ON, perform action
push @entities,CUL_HM_UpdtReadSingle($dhash,'powerOn',"-",1);
push @entities,CUL_HM_UpdtReadSingle($devHash,'powerOn',"-",1);
CUL_HM_Set($hHash,$hHash->{NAME},"off")
if ($hHash && $hHash->{helper}{param}{offAtPon});
}
@@ -1547,11 +1548,12 @@ sub CUL_HM_parseCommon(@){#####################################################
my $chnhash = $modules{CUL_HM}{defptr}{$src.$chn};
$chnhash = $shash if (!$chnhash);
my $chnNname = $chnhash->{NAME};
my @peers = substr($p,2,) =~ /(.{8})/g;
my (undef,@peers) = unpack 'A2(A8)*',$p;
$_ = '00000000' foreach (grep /^000000/,@peers);#correct bad term(6 chars) from rain sens)
$chnhash->{helper}{peerIDsRaw}.= ",".join",",@peers;
CUL_HM_ID2PeerList ($chnNname,$_,1) foreach (@peers);
if ($p =~ m/000000..$/) {# last entry, peerList is complete
if (grep /00000000/,@peers) {# last entry, peerList is complete
CUL_HM_respPendRm($shash);
# check for request to get List3 data
my $reqPeer = $chnhash->{helper}{getCfgList};
@@ -1559,7 +1561,8 @@ sub CUL_HM_parseCommon(@){#####################################################
my $flag = CUL_HM_getFlag($shash);
my $id = CUL_HM_IOid($shash);
my $listNo = "0".$chnhash->{helper}{getCfgListNo};
my @peerID = split(",",($attr{$chnNname}{peerIDs}?$attr{$chnNname}{peerIDs}:""));
my @peerID = split(",",($attr{$chnNname}{peerIDs}?
$attr{$chnNname}{peerIDs}:""));
foreach my $peer (grep (!/00000000/,@peerID)){
$peer .="01" if (length($peer) == 6); # add the default
if ($peer &&($peer eq $reqPeer || $reqPeer eq "all")){
@@ -3685,7 +3688,8 @@ sub CUL_HM_secSince2000() {#####################
}
sub CUL_HM_getChnLvl($){# in: name out: vit or phys level
my $name = shift;
my $curVal = ReadingsVal($name,"level",0);
my $curVal = ReadingsVal($name,"level",undef);
$curVal = ReadingsVal($name,".level",0)if (!defined $curVal);
$curVal =~ s/set_//;
$curVal =~ s/ .*//;#strip unit
return $curVal;
@@ -4095,6 +4099,7 @@ sub CUL_HM_setAttrIfCh($$$$) {
}
sub CUL_HM_noDup(@) {#return list with no duplicates
my %all;
return "" if (scalar(@_) == 0);
$all{$_}=0 foreach (grep !/^$/,@_);
delete $all{""}; #remove empties if present
return (sort keys %all);

View File

@@ -1000,8 +1000,7 @@ my %culHmChanSets = (
,"on-till" =>"<time>"
,on =>""
,off =>""
,toggle =>""
,statusRequest =>""}
,toggle =>""}
);
# clones- - - - - - - - - - - - - - - - -
#$culHmChanSets{"HM-OU-CF-PL02"} = $culHmChanSets{"HM-OU-CF-PL01"};