mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-24 02:59:22 +00:00
repeater sourcelist, revert RSSI handling
git-svn-id: https://svn.fhem.de/fhem/trunk@2799 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
14b139670e
commit
b18303d4cb
@ -918,7 +918,7 @@ CUL_Parse($$$$$)
|
|||||||
} elsif($fn eq "A" && $len >= 20) { # AskSin/BidCos/HomeMatic
|
} elsif($fn eq "A" && $len >= 20) { # AskSin/BidCos/HomeMatic
|
||||||
my $srcId = substr($dmsg,9,6);
|
my $srcId = substr($dmsg,9,6);
|
||||||
$hash->{helper}{nextSend}{$srcId} = gettimeofday() + 0.100;
|
$hash->{helper}{nextSend}{$srcId} = gettimeofday() + 0.100;
|
||||||
$dmsg .="::$rssi" if(defined($rssi));
|
$dmsg .="::$rssi:$name" if(defined($rssi));
|
||||||
} elsif($fn eq "Z" && $len >= 21) { # Moritz/Max
|
} elsif($fn eq "Z" && $len >= 21) { # Moritz/Max
|
||||||
;
|
;
|
||||||
} elsif($fn eq "t" && $len >= 5) { # TX3
|
} elsif($fn eq "t" && $len >= 5) { # TX3
|
||||||
|
@ -341,7 +341,9 @@ HMLAN_Parse($$)
|
|||||||
HMLAN_Write($hash,undef, "As15".$mNo."8002".$dst.$src."00");
|
HMLAN_Write($hash,undef, "As15".$mNo."8002".$dst.$src."00");
|
||||||
}
|
}
|
||||||
|
|
||||||
$dmsg .= (($mFld[1] !~ m/00(01|02|21)/ && $letter eq 'R')?":NACK:":"::").(hex($mFld[4])-65536);
|
$dmsg .= (($mFld[1] !~ m/00(01|02|21)/ && $letter eq 'R')?":NACK:":"::")
|
||||||
|
.(hex($mFld[4])-65536)
|
||||||
|
.":".$name;
|
||||||
|
|
||||||
$hash->{uptime} = HMLAN_uptime($mFld[2]);
|
$hash->{uptime} = HMLAN_uptime($mFld[2]);
|
||||||
$hash->{RSSI} = hex($mFld[4])-65536;
|
$hash->{RSSI} = hex($mFld[4])-65536;
|
||||||
|
@ -425,8 +425,9 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
($dst eq $id ? $ioName :
|
($dst eq $id ? $ioName :
|
||||||
$dst));
|
$dst));
|
||||||
my $target = " (to $dname)";
|
my $target = " (to $dname)";
|
||||||
my ($p,$msgStat,$myRSSI) = split(":",$p1,3);
|
my ($p,$msgStat,$myRSSI,$msgIO) = split(":",$p1,4);
|
||||||
return "" if($msgStat && $msgStat eq 'NACK');#discard TCP errors from HMlan. Resend will cover it
|
|
||||||
|
return "" if($msgStat && $msgStat eq 'NACK');#discard if lowlevel error
|
||||||
return "" if($src eq $id);#discard mirrored messages
|
return "" if($src eq $id);#discard mirrored messages
|
||||||
|
|
||||||
$respRemoved = 0; #set to 'no response in this message' at start
|
$respRemoved = 0; #set to 'no response in this message' at start
|
||||||
@ -442,7 +443,7 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
Log 3, "CUL_HM Unknown device $sname, please define it";
|
Log 3, "CUL_HM Unknown device $sname, please define it";
|
||||||
return "UNDEFINED $sname CUL_HM $src $msg";
|
return "UNDEFINED $sname CUL_HM $src $msg";
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
CUL_HM_eventP($shash,"Rcv");
|
CUL_HM_eventP($shash,"Rcv");
|
||||||
my $name = $shash->{NAME};
|
my $name = $shash->{NAME};
|
||||||
@ -455,7 +456,6 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
"to_".((hex($msgFlag)&0x40)?"rpt_":"").$ioName,# repeater?
|
"to_".((hex($msgFlag)&0x40)?"rpt_":"").$ioName,# repeater?
|
||||||
$myRSSI);
|
$myRSSI);
|
||||||
|
|
||||||
# return if duplicate
|
|
||||||
my $msgX = "No:$msgcnt - t:$msgType s:$src d:$dst ".($p?$p:"");
|
my $msgX = "No:$msgcnt - t:$msgType s:$src d:$dst ".($p?$p:"");
|
||||||
|
|
||||||
if($shash->{lastMsg} && $shash->{lastMsg} eq $msgX) {
|
if($shash->{lastMsg} && $shash->{lastMsg} eq $msgX) {
|
||||||
@ -468,7 +468,7 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
Log GetLogLevel($name,4), "CUL_HM $name dup mesg - ignore";
|
Log GetLogLevel($name,4), "CUL_HM $name dup mesg - ignore";
|
||||||
}
|
}
|
||||||
|
|
||||||
return ""; #return something to please dispatcher
|
return $name; #return something to please dispatcher
|
||||||
}
|
}
|
||||||
$shash->{lastMsg} = $msgX;
|
$shash->{lastMsg} = $msgX;
|
||||||
$iohash->{HM_CMDNR} = hex($msgcnt) if($dst eq $id);# updt message cnt to rec
|
$iohash->{HM_CMDNR} = hex($msgcnt) if($dst eq $id);# updt message cnt to rec
|
||||||
@ -789,7 +789,6 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
elsif($st eq "switch" || ####################################################
|
elsif($st eq "switch" || ####################################################
|
||||||
$st eq "dimmer" ||
|
$st eq "dimmer" ||
|
||||||
$st eq "blindActuator") {
|
$st eq "blindActuator") {
|
||||||
|
|
||||||
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status
|
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status
|
||||||
($msgType eq "10" && $p =~ m/^06/)) { # or Info_Status message here
|
($msgType eq "10" && $p =~ m/^06/)) { # or Info_Status message here
|
||||||
|
|
||||||
@ -884,7 +883,7 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
push @event, "battery:". (($err&0x80)?"low" :"ok" );
|
push @event, "battery:". (($err&0x80)?"low" :"ok" );
|
||||||
my $flag = ($err>>4) &0x7;
|
my $flag = ($err>>4) &0x7;
|
||||||
push @event, "flags:". (($flag)?"none" :$flag );
|
push @event, "flags:". (($flag)?"none" :$flag );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($st eq "virtual"){#####################################################
|
elsif($st eq "virtual"){#####################################################
|
||||||
# possibly add code to count all acks that are paired.
|
# possibly add code to count all acks that are paired.
|
||||||
@ -1261,8 +1260,9 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
#------------ process events ------------------
|
#------------ process events ------------------
|
||||||
|
|
||||||
push @event, "noReceiver:src:$src ($cmd) $p" if(!@event);
|
push @event, "noReceiver:src:$src ($cmd) $p" if(!@event);
|
||||||
CUL_HM_UpdtReadBulk($shash,1,@event);
|
CUL_HM_UpdtReadBulk($shash,1,@event); #events to the channel
|
||||||
return $shash->{NAME} ;# shash could have changed to support channel
|
$defs{$shash->{NAME}}{EVENTS}++; # count events for channel
|
||||||
|
return $name ;#general notification to the device
|
||||||
}
|
}
|
||||||
|
|
||||||
##----------definitions for register settings-----------------
|
##----------definitions for register settings-----------------
|
||||||
@ -1834,22 +1834,16 @@ sub CUL_HM_TCtempReadings($) {
|
|||||||
}
|
}
|
||||||
sub CUL_HM_repReadings($) {
|
sub CUL_HM_repReadings($) {
|
||||||
my ($hash)=@_;
|
my ($hash)=@_;
|
||||||
my $name = $hash->{NAME};
|
my %pCnt;
|
||||||
my $regLN = ((CUL_HM_getExpertMode($hash) eq "2")?"":".")."RegL_";
|
foreach my$pId(split',',$hash->{helper}{peerIDsRaw}){
|
||||||
my $reg2 = ReadingsVal($name,$regLN."02:" ,"");
|
next if (!$pId || $pId eq "00000000");
|
||||||
$reg2 =~ s/..://g;
|
$pCnt{$pId}{cnt}++;
|
||||||
$reg2 =~ s/ //g;
|
}
|
||||||
my @array = $reg2 =~ /(.{14})/g; # entry is sendID,recID and bdcast
|
|
||||||
my $entry = 0;
|
|
||||||
my $ret;
|
my $ret;
|
||||||
foreach (@array){
|
foreach my$pId(sort keys %pCnt){
|
||||||
my @arr2 = $_ =~ /(.{6})(.{6})(.{2})/;
|
my ($pdID,$bdcst) = ($1,$2) if ($pId =~ m/(......)(..)/);
|
||||||
$entry++;
|
$ret .= "source ".$pCnt{$pId}{cnt}." entry for: ".CUL_HM_id2Name($pdID)
|
||||||
next if ($arr2[1] eq '000000' && $arr2[0] eq '000000');
|
.($bdcst eq "01"?" broadcast enabled":"")."\n";
|
||||||
$ret .= $entry.
|
|
||||||
" Bdcast:".((hex($arr2[2])& 0x01)?"on":"off").
|
|
||||||
" sendID:".(($arr2[0] ne "000000")?CUL_HM_id2Name($arr2[0]):"none ").
|
|
||||||
" recID:" .(($arr2[1] ne "000000")?CUL_HM_id2Name($arr2[1]):"none ")."\n";
|
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
@ -2275,6 +2269,8 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
foreach my $var (keys %{$hash}){
|
foreach my $var (keys %{$hash}){
|
||||||
delete ($hash->{$var}) if ($var =~ m/^prot/);
|
delete ($hash->{$var}) if ($var =~ m/^prot/);
|
||||||
|
delete ($hash->{EVENTS});
|
||||||
|
delete ($hash->{helper}{rssi});
|
||||||
}
|
}
|
||||||
$hash->{protState} = "Info_Cleared" ;
|
$hash->{protState} = "Info_Cleared" ;
|
||||||
}
|
}
|
||||||
@ -3163,6 +3159,7 @@ sub CUL_HM_responseSetup($$) {#store all we need to handle the response
|
|||||||
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
|
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
|
||||||
$chnhash = $hash if (!$chnhash);
|
$chnhash = $hash if (!$chnhash);
|
||||||
delete $chnhash->{READINGS}{peerList};#empty old list
|
delete $chnhash->{READINGS}{peerList};#empty old list
|
||||||
|
delete $chnhash->{helper}{peerIDsRaw};
|
||||||
$attr{$chnhash->{NAME}}{peerIDs} = '';
|
$attr{$chnhash->{NAME}}{peerIDs} = '';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3763,10 +3760,11 @@ sub CUL_HM_parseCommon(@){#############################
|
|||||||
$chnhash = $shash if (!$chnhash);
|
$chnhash = $shash if (!$chnhash);
|
||||||
my $chnNname = $chnhash->{NAME};
|
my $chnNname = $chnhash->{NAME};
|
||||||
my @peers = substr($p,2,) =~ /(.{8})/g;
|
my @peers = substr($p,2,) =~ /(.{8})/g;
|
||||||
|
$chnhash->{helper}{peerIDsRaw}.= ",".join",",@peers;
|
||||||
|
|
||||||
foreach my $peer(@peers){
|
foreach my $peer(@peers){
|
||||||
CUL_HM_ID2PeerList ($chnNname,$peer,1);
|
CUL_HM_ID2PeerList ($chnNname,$peer,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($p =~ m/000000..$/) {# last entry, peerList is complete
|
if ($p =~ m/000000..$/) {# last entry, peerList is complete
|
||||||
CUL_HM_respPendRm($shash);
|
CUL_HM_respPendRm($shash);
|
||||||
# check for request to get List3 data
|
# check for request to get List3 data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user