softbuffer fixes
git-svn-id: https://svn.fhem.de/fhem/trunk@113 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -351,6 +351,8 @@
|
|||||||
- feature: softwarebuffer for FHT devices (Dirk 17.10)
|
- feature: softwarebuffer for FHT devices (Dirk 17.10)
|
||||||
- feature: FHT low temperatur warning and offset (Dirk 17.10)
|
- feature: FHT low temperatur warning and offset (Dirk 17.10)
|
||||||
- change: change FHT state into warnings (Dirk 17.10)
|
- change: change FHT state into warnings (Dirk 17.10)
|
||||||
|
NOTE: you'll get an undefined type state &
|
||||||
|
undefined type unknown_85 after upgrade.
|
||||||
- feature: Softwarebuffer code simplified (Rudi 22.11)
|
- feature: Softwarebuffer code simplified (Rudi 22.11)
|
||||||
- bugfix: bug #12327 doppeltes my
|
- bugfix: bug #12327 doppeltes my
|
||||||
- bugfix: set STATE from trigger
|
- bugfix: set STATE from trigger
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ FHZ_Parse($$)
|
|||||||
$msg = substr($msg, 4, 2);
|
$msg = substr($msg, 4, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log 4, "FHZ $name $type: $msg)";
|
Log 4, "FHZ $name $type: $msg";
|
||||||
$def->{CHANGED}[0] = "$type: $msg";
|
$def->{CHANGED}[0] = "$type: $msg";
|
||||||
return $hash->{NAME};
|
return $hash->{NAME};
|
||||||
}
|
}
|
||||||
@@ -343,7 +343,7 @@ FHZ_ReadAnswer($$)
|
|||||||
for(;;) {
|
for(;;) {
|
||||||
|
|
||||||
vec($rin, $hash->{FD}, 1) = 1;
|
vec($rin, $hash->{FD}, 1) = 1;
|
||||||
my $nfound = select($rin, undef, undef, 3);
|
my $nfound = select($rin, undef, undef, 3); # 3 seconds timeout
|
||||||
if($nfound < 0) {
|
if($nfound < 0) {
|
||||||
next if ($! == EAGAIN() || $! == EINTR() || $! == 0);
|
next if ($! == EAGAIN() || $! == EINTR() || $! == 0);
|
||||||
die("Select error $nfound / $!\n");
|
die("Select error $nfound / $!\n");
|
||||||
@@ -352,8 +352,7 @@ FHZ_ReadAnswer($$)
|
|||||||
|
|
||||||
my $buf = $hash->{PortObj}->input();
|
my $buf = $hash->{PortObj}->input();
|
||||||
|
|
||||||
# Log 5, "FHZ/RAW: " . unpack('H*',$buf);
|
Log 5, "FHZ/RAW: " . unpack('H*',$buf);
|
||||||
Log 4, "FHZ/RAW: " . unpack('H*',$buf);
|
|
||||||
$mfhzdata .= $buf;
|
$mfhzdata .= $buf;
|
||||||
next if(length($mfhzdata) < 2);
|
next if(length($mfhzdata) < 2);
|
||||||
|
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ FHT_Parse($$)
|
|||||||
if(!$val) {
|
if(!$val) {
|
||||||
# This is a confirmation message. We reformat it so that
|
# This is a confirmation message. We reformat it so that
|
||||||
# it looks like a real message, and let the rest parse it
|
# it looks like a real message, and let the rest parse it
|
||||||
Log 4, "FHT $name confirmation: $cde)";
|
Log 4, "FHT $name confirmation: $cde";
|
||||||
$val = substr($cde, 2, 2);
|
$val = substr($cde, 2, 2);
|
||||||
$cde = substr($cde, 0, 2) . "0069";
|
$cde = substr($cde, 0, 2) . "0069";
|
||||||
$confirm = 1;
|
$confirm = 1;
|
||||||
@@ -399,9 +399,6 @@ FHT_Parse($$)
|
|||||||
} elsif($type eq "lowtemp-offset") {
|
} elsif($type eq "lowtemp-offset") {
|
||||||
$val = sprintf("%d.0 (Celsius)", $val)
|
$val = sprintf("%d.0 (Celsius)", $val)
|
||||||
|
|
||||||
} elsif($type =~ m/echo_/) { # Ignore these messages
|
|
||||||
return "";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$def->{READINGS}{$type}{TIME} = $tn;
|
$def->{READINGS}{$type}{TIME} = $tn;
|
||||||
@@ -409,17 +406,19 @@ FHT_Parse($$)
|
|||||||
$def->{CHANGED}[0] = "$type: $val";
|
$def->{CHANGED}[0] = "$type: $val";
|
||||||
$def->{STATE} = "$type: $val" if($type eq "measured-temp");
|
$def->{STATE} = "$type: $val" if($type eq "measured-temp");
|
||||||
|
|
||||||
Log 4, "FHT $name ($type: $val)";
|
Log 4, "FHT $name $type: $val";
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# Softbuffer: deleted confirmed commands
|
# Softbuffer: deleted confirmed commands
|
||||||
my $io = $hash->{IODev};
|
if($confirm) {
|
||||||
if($confirm && keys(%{$io->{SOFTBUFFER}})) {
|
|
||||||
my $found;
|
my $found;
|
||||||
|
my $io = $def->{IODev};
|
||||||
foreach my $key (sort keys %{$io->{SOFTBUFFER}}) {
|
foreach my $key (sort keys %{$io->{SOFTBUFFER}}) {
|
||||||
my $h = $io->{SOFTBUFFER}{$key};
|
my $h = $io->{SOFTBUFFER}{$key};
|
||||||
if($h->{HASH}->{NAME} eq $name &&
|
my $hcmd = $h->{CMD};
|
||||||
$h->{CMD} eq $type) {
|
$hcmd = "init" if($hcmd eq "refreshvalues");
|
||||||
|
Log 5, "FHT check $h->{HASH}->{NAME} eq $name && $hcmd eq $type";
|
||||||
|
if($h->{HASH}->{NAME} eq $name && $hcmd eq $type) {
|
||||||
$found = $key;
|
$found = $key;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
@@ -440,6 +439,7 @@ doSoftBuffer($)
|
|||||||
my $now = gettimeofday();
|
my $now = gettimeofday();
|
||||||
|
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
|
my $fhzbuflen = -999;
|
||||||
foreach my $key (keys %{ $io->{SOFTBUFFER} }) {
|
foreach my $key (keys %{ $io->{SOFTBUFFER} }) {
|
||||||
|
|
||||||
$count++;
|
$count++;
|
||||||
@@ -457,8 +457,10 @@ doSoftBuffer($)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
next if(getFhzBuffer($io) < $minFhzHardwareBuffer);
|
$fhzbuflen = getFhzBuffer($io) if($fhzbuflen == -999);
|
||||||
|
next if($fhzbuflen < $minFhzHardwareBuffer);
|
||||||
sendCommand($h->{HASH}, $h->{CMD}, $h->{VAL}, $h->{ARG});
|
sendCommand($h->{HASH}, $h->{CMD}, $h->{VAL}, $h->{ARG});
|
||||||
|
$fhzbuflen -= ($h->{CMD} eq "refreshvalues" ? 7 : 5);
|
||||||
$h->{SENDTIME} = $now;
|
$h->{SENDTIME} = $now;
|
||||||
$h->{NSENT}++;
|
$h->{NSENT}++;
|
||||||
|
|
||||||
@@ -491,13 +493,12 @@ getFhzBuffer($)
|
|||||||
|
|
||||||
return $minFhzHardwareBuffer if(IsDummy($io->{NAME}));
|
return $minFhzHardwareBuffer if(IsDummy($io->{NAME}));
|
||||||
|
|
||||||
Log 4, "getFhzBuffer";
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
FHZ_Write($io, "04", "c90185");
|
FHZ_Write($io, "04", "c90185");
|
||||||
|
|
||||||
my $msg = FHZ_ReadAnswer($io, "fhtbuf");
|
my $msg = FHZ_ReadAnswer($io, "fhtbuf");
|
||||||
|
Log 5, "getFhzBuffer: $count $msg";
|
||||||
|
|
||||||
return hex(substr($msg, 16, 2)) if($msg && $msg =~ m/^[0-9]+$/);
|
return hex(substr($msg, 16, 2)) if($msg && $msg =~ m/^[0-9A-F]+$/i);
|
||||||
return 0 if($count++ > 5);
|
return 0 if($count++ > 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -517,8 +518,6 @@ sendCommand($$$$)
|
|||||||
my $havefhz = ($hash->{IODev} && defined($hash->{IODev}->{FD}));
|
my $havefhz = ($hash->{IODev} && defined($hash->{IODev}->{FD}));
|
||||||
IOWrite($hash, "04", $arg);
|
IOWrite($hash, "04", $arg);
|
||||||
sleep(1) if($havefhz);
|
sleep(1) if($havefhz);
|
||||||
IOWrite($hash, "04", "c90185"); # Check the fht buffer
|
|
||||||
sleep(1) if($havefhz);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ my %intAt; # Internal at timer hash.
|
|||||||
my $intAtCnt=0;
|
my $intAtCnt=0;
|
||||||
my $reread_active = 0;
|
my $reread_active = 0;
|
||||||
my $AttrList = "room comment";
|
my $AttrList = "room comment";
|
||||||
my $cvsid = '$Id: fhem.pl,v 1.30 2007-11-26 14:56:45 rudolfkoenig Exp $';
|
my $cvsid = '$Id: fhem.pl,v 1.31 2007-11-27 15:17:47 rudolfkoenig Exp $';
|
||||||
|
|
||||||
$init_done = 0;
|
$init_done = 0;
|
||||||
|
|
||||||
@@ -1628,8 +1628,10 @@ DoTrigger($$)
|
|||||||
$defs{$dev}{INTRIGGER}=1;
|
$defs{$dev}{INTRIGGER}=1;
|
||||||
my $ret = "";
|
my $ret = "";
|
||||||
foreach my $n (sort keys %defs) {
|
foreach my $n (sort keys %defs) {
|
||||||
Log 5, "$dev trigger: Checking $n for notify";
|
if($modules{$defs{$n}{TYPE}}{NotifyFn}) {
|
||||||
$ret .= CallFn($n, "NotifyFn", $defs{$n}, $defs{$dev});
|
Log 5, "$dev trigger: Checking $n for notify";
|
||||||
|
$ret .= CallFn($n, "NotifyFn", $defs{$n}, $defs{$dev});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delete($defs{$dev}{INTRIGGER});
|
delete($defs{$dev}{INTRIGGER});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user