MYSENSORS: fix perl-warning on unparsable data, add attribute 'last-sensorid'

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@6803 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
ntruchsess 2014-10-24 06:12:17 +00:00
parent 4e4a690554
commit 82c0aceb2b
2 changed files with 44 additions and 38 deletions

View File

@ -59,6 +59,7 @@ sub MYSENSORS_Initialize($) {
"autocreate:1 ".
"requestAck:1 ".
"first-sensorid ".
"last-sensorid ".
"stateFormat";
}
@ -235,7 +236,7 @@ sub Read {
my $txt;
($txt,$data) = split("\n", $data, 2);
$txt =~ s/\r//;
my $msg = parseMsg($txt);
if (my $msg = parseMsg($txt)) {
Log3 ($name,5,"MYSENSORS Read: ".dumpMsg($msg));
if ($msg->{ack}) {
@ -266,6 +267,9 @@ sub Read {
last;
};
}
} else {
Log3 ($name,5,"MYSENSORS Read: ".$txt."is no parsable mysensors message");
}
}
$hash->{PARTIAL} = $data;
return undef;
@ -338,13 +342,13 @@ sub onInternalMsg($$) {
};
$type == I_ID_REQUEST and do {
if ($hash->{'inclusion-mode'}) {
my %nodes = map {$_ => 1} (AttrVal($hash->{NAME},"first-sensorid",20) ... 254);
my %nodes = map {$_ => 1} (AttrVal($hash->{NAME},"first-sensorid",20) ... AttrVal($hash->{NAME},"last-sensorid",254));
GP_ForallClients($hash,sub {
my $client = shift;
delete $nodes{$client->{radioId}};
});
if (keys %nodes) {
my $newid = (keys %nodes)[0];
my $newid = (sort keys %nodes)[0];
sendMessage($hash,radioId => 255, childId => 255, cmd => C_INTERNAL, ack => 0, subType => I_ID_RESPONSE, payload => $newid);
Log3($hash->{NAME},4,"MYSENSORS $hash->{NAME} assigned new nodeid $newid");
} else {

View File

@ -12,14 +12,16 @@ use warnings;
sub parseMsg($) {
my $txt = shift;
my @fields = split(/;/,$txt);
my $msgRef = { radioId => $fields[0],
childId => $fields[1],
cmd => $fields[2],
ack => $fields[3],
subType => $fields[4],
payload => $fields[5] };
return $msgRef;
if ($txt =~ /^(\d+);(\d+);(\d+);(\d+);(\d+);(.*)$/) {
return { radioId => $1,
childId => $2,
cmd => $3,
ack => $4,
subType => $5,
payload => $6 };
} else {
return undef;
};
}
sub createMsg(%) {