diff --git a/fhem/FHEM/11_FHT.pm b/fhem/FHEM/11_FHT.pm index 752394d34..32133b598 100755 --- a/fhem/FHEM/11_FHT.pm +++ b/fhem/FHEM/11_FHT.pm @@ -10,88 +10,87 @@ sub getFhtMin($); sub getFhtBuffer($); my %codes = ( - "0000.." => "actuator", - "0100.." => "actuator1", - "0200.." => "actuator2", - "0300.." => "actuator3", - "0400.." => "actuator4", - "0500.." => "actuator5", - "0600.." => "actuator6", - "0700.." => "actuator7", - "0800.." => "actuator8", + "00" => "actuator", + "01" => "actuator1", + "02" => "actuator2", + "03" => "actuator3", + "04" => "actuator4", + "05" => "actuator5", + "06" => "actuator6", + "07" => "actuator7", + "08" => "actuator8", - "140069" => "mon-from1", - "150069" => "mon-to1", - "160069" => "mon-from2", - "170069" => "mon-to2", - "180069" => "tue-from1", - "190069" => "tue-to1", - "1a0069" => "tue-from2", - "1b0069" => "tue-to2", - "1c0069" => "wed-from1", - "1d0069" => "wed-to1", - "1e0069" => "wed-from2", - "1f0069" => "wed-to2", - "200069" => "thu-from1", - "210069" => "thu-to1", - "220069" => "thu-from2", - "230069" => "thu-to2", - "240069" => "fri-from1", - "250069" => "fri-to1", - "260069" => "fri-from2", - "270069" => "fri-to2", - "280069" => "sat-from1", - "290069" => "sat-to1", - "2a0069" => "sat-from2", - "2b0069" => "sat-to2", - "2c0069" => "sun-from1", - "2d0069" => "sun-to1", - "2e0069" => "sun-from2", - "2f0069" => "sun-to2", + "14" => "mon-from1", + "15" => "mon-to1", + "16" => "mon-from2", + "17" => "mon-to2", + "18" => "tue-from1", + "19" => "tue-to1", + "1a" => "tue-from2", + "1b" => "tue-to2", + "1c" => "wed-from1", + "1d" => "wed-to1", + "1e" => "wed-from2", + "1f" => "wed-to2", + "20" => "thu-from1", + "21" => "thu-to1", + "22" => "thu-from2", + "23" => "thu-to2", + "24" => "fri-from1", + "25" => "fri-to1", + "26" => "fri-from2", + "27" => "fri-to2", + "28" => "sat-from1", + "29" => "sat-to1", + "2a" => "sat-from2", + "2b" => "sat-to2", + "2c" => "sun-from1", + "2d" => "sun-to1", + "2e" => "sun-from2", + "2f" => "sun-to2", - "3e0069" => "mode", - "3f0069" => "holiday1", # Not verified - "400069" => "holiday2", # Not verified - "410069" => "desired-temp", - "XX0069" => "measured-temp", # sum of next. two, never really sent - "420069" => "measured-low", - "430069" => "measured-high", - "440069" => "warnings", - "450069" => "manu-temp", # No clue what it does. + "3e" => "mode", + "3f" => "holiday1", # Not verified + "40" => "holiday2", # Not verified + "41" => "desired-temp", + "XX" => "measured-temp", # sum of next. two, never really sent + "42" => "measured-low", + "43" => "measured-high", + "44" => "warnings", + "45" => "manu-temp", # No clue what it does. - "..0067" => "repeat1", # repeat the last data (?) - "..0077" => "repeat2", + "4b" => "ack", + "53" => "can-xmit", + "54" => "can-rcv", - "600069" => "year", - "610069" => "month", - "620069" => "day", - "630069" => "hour", - "640069" => "minute", - "650069" => "report1", - "660069" => "report2", + "60" => "year", + "61" => "month", + "62" => "day", + "63" => "hour", + "64" => "minute", + "65" => "report1", + "66" => "report2", - "820069" => "day-temp", - "840069" => "night-temp", - "850069" => "lowtemp-offset", # Alarm-Temp.-Differenz - "8a0069" => "windowopen-temp", + "7d" => "start-xmit", + "7e" => "end-xmit", + + "82" => "day-temp", + "84" => "night-temp", + "85" => "lowtemp-offset", # Alarm-Temp.-Differenz + "8a" => "windowopen-temp", ); my %cantset = ( - "actuators" => 1, - "actuator1" => 1, - "actuator2" => 1, - "actuator3" => 1, - "actuator4" => 1, - "actuator5" => 1, - "actuator6" => 1, - "actuator7" => 1, - "actuator8" => 1, + "ack" => 1, + "can-xmit" => 1, + "can-rcv" => 1, + "start-xmit" => 1, + "end-xmit" => 1, + "measured-temp" => 1, "measured-high" => 1, "measured-low" => 1, "warnings" => 1, - "repeat1" => 1, - "repeat2" => 1, ); @@ -109,7 +108,6 @@ my %priority = ( my %c2m = (0 => "auto", 1 => "manual", 2 => "holiday", 3 => "holiday_short"); my %m2c; # Reverse c2m my %c2b; # command->button hash (reverse of codes) -my %c2bset; # Setteable values my %defptr; my $defmin = 0; # min fhtbuf free bytes before sending commands @@ -125,7 +123,6 @@ FHT_Initialize($) foreach my $k (keys %codes) { my $v = $codes{$k}; $c2b{$v} = $k; - $c2bset{$v} = substr($k, 0, 2) if(!defined($cantset{$v})); } foreach my $k (keys %c2m) { $m2c{$c2m{$k}} = $k; @@ -172,13 +169,15 @@ FHT_Set($@) $allcmd .=" " if($allcmd); $allcmd .= $cmd; - return "Unknown argument $cmd, choose one of " . join(" ",sort keys %c2bset) - if(!defined($c2bset{$cmd})); - return "\"set $name\" needs a parameter" + return "Unknown argument $cmd, choose one of " . join(" ",sort keys %c2b) + if(!defined($c2b{$cmd})); + return "Readonly parameter $cmd" + if(defined($cantset{$cmd})); + return "\"set $name $cmd\" needs a parameter" if(@a < 1); $ncmd++; $val = shift(@a); - $arg .= $c2bset{$cmd}; + $arg .= $c2b{$cmd}; if ($cmd =~ m/-temp/) { @@ -302,8 +301,9 @@ FHT_Parse($$) { my ($hash, $msg) = @_; + $msg = lc($msg); my $dev = substr($msg, 16, 4); - my $cde = substr($msg, 20, 6); + my $cde = substr($msg, 20, 2); my $val = substr($msg, 26, 2) if(length($msg) > 26); my $confirm = 0; @@ -315,35 +315,17 @@ FHT_Parse($$) my $def = $defptr{$dev}; my $name = $def->{NAME}; - # Unknown, but don't want report it. Should come with c409c401 - return "" if($cde eq "00"); - - if(length($cde) < 6) { - Log GetLogLevel($name,2), "FHT Unknown code from $name : $cde"; - $def->{CHANGED}[0] = "unknown_$cde"; - return $name; - } - - my $scmd = substr($cde, 0, 2); - if(!$val || $scmd eq "65" || $scmd eq "66") { + if(!$val || $cde eq "65" || $cde eq "66") { # This is a confirmation message. We reformat it so that # it looks like a real message, and let the rest parse it Log 4, "FHT $name confirmation: $cde"; - $val = substr($cde, 2, 2); - $cde = $scmd . "0069"; + $val = substr($msg, 22, 2); $confirm = 1; } - my $cmd; - foreach my $c (keys %codes) { - if($cde =~ m/$c/) { - $cmd = $codes{$c}; - last; - } - } - $val = hex($val); + my $cmd = $codes{$cde}; if(!$cmd) { Log 4, "FHT $name (Unknown: $cde => $val)"; $def->{CHANGED}[0] = "unknown_$cde: $val"; @@ -371,7 +353,7 @@ FHT_Parse($$) } elsif($cmd =~ m/^actuator/) { - my $sval = substr($cde, 4, 2); + my $sval = substr($msg,24,2); my $fv = sprintf("%d%%", int(100*$val/255+0.5)); if($sval =~ m/.6/) { $val = "$fv" } @@ -412,6 +394,8 @@ FHT_Parse($$) } + $cmd = "FHZ:$cmd" if(substr($msg,24,1) eq "7"); + $def->{READINGS}{$cmd}{TIME} = $tn; $def->{READINGS}{$cmd}{VAL} = $val; $def->{CHANGED}[0] = "$cmd: $val"; diff --git a/fhem/FHEM/14_CUL_WS.pm b/fhem/FHEM/14_CUL_WS.pm index a7a90847d..282e00f72 100755 --- a/fhem/FHEM/14_CUL_WS.pm +++ b/fhem/FHEM/14_CUL_WS.pm @@ -62,7 +62,8 @@ CUL_WS_Parse($$) # K41505268 -> Code 5, T: 25.0 H: 68.5 my @a = split("", $msg); - my $cde = (($a[1]+0)&7) + 1; + my $firstbyte = hex($a[1]); + my $cde = ($firstbyte&7) + 1; my $sgn = (($a[1]+0)&8) ? -1 : 1; my $tmp = $sgn * ($a[6].$a[3].".".$a[4]); my $hum = $a[7].$a[8].".".$a[5]; diff --git a/fhem/FHEM/87_WS2000.pm b/fhem/FHEM/87_WS2000.pm index d866b75b7..879aa2791 100644 --- a/fhem/FHEM/87_WS2000.pm +++ b/fhem/FHEM/87_WS2000.pm @@ -4,7 +4,8 @@ package main; # Modul for FHEM # # contributed by thomas dressler 2008 -# $Id: 87_WS2000.pm,v 1.4 2008-09-06 08:33:25 rudolfkoenig Exp $ +# $Id: 87_WS2000.pm,v 1.5 2008-09-21 17:55:28 rudolfkoenig Exp $ +# corr. negativ temps / peterp ########################### use strict; use Switch; @@ -81,7 +82,7 @@ WS2000_Define($$) return "Can't open Device $PortName: $^E\n"; } #$hash->{FD}=$PortObj->{_HANDLE}; - $readyfnlist{"$a[0].$a[2]"} = $hash; +# $readyfnlist{"$a[0].$a[2]"} = $hash; } else { eval ("use Device::SerialPort;"); if ($@) { @@ -96,7 +97,7 @@ WS2000_Define($$) return "Can't open Device $PortName: $^E\n"; } $hash->{FD}=$PortObj->FILENO; - $selectlist{"$a[0].$a[2]"} = $hash; +# $selectlist{"$a[0].$a[2]"} = $hash; } #Parameter 19200,8,2,Odd,None $PortObj->baudrate(19200); @@ -127,7 +128,7 @@ WS2000_Define($$) } $xport->autoflush(1); $hash->{FD}=$xport->fileno; - $selectlist{"$a[0].$a[2]"} = $hash; +# $selectlist{"$a[0].$a[2]"} = $hash; $hash->{socket}=$xport; @@ -345,11 +346,12 @@ WS2000_Parse($$) { $snr -= 8; $sensor = "Temperatursensor V1.2(" .$snr. ")"; } - if ($w1 >= 64) { - $daten1 = ((255 - $w1 - $w2) / 10) * (-1); - }else{ - $daten1 = (($w1 * 128 + $w2) / 10); + $daten1 = (($w1 * 128 + $w2) ); + if ($daten1 >= 16085) + { + $daten1 = $daten1 - 16384; } + $daten1 = $daten1 / 10; $shortname='TX'.$snr; $einheit1 = " C"; $result = $shortname . " => T:" . $daten1 . $einheit1; @@ -362,11 +364,12 @@ WS2000_Parse($$) { $snr -= 8; $sensor = "Temperatursensor mit Feuchte V1.2(" . $snr . ")"; } - if ($w1 >= 64) { - $daten1 = ((255 - $w1 - $w2) / 10) * (-1); - }else{ - $daten1 = (($w1 * 128 + $w2) / 10); - } + $daten1 = (($w1 * 128 + $w2) ); + if ($daten1 >= 16085) + { + $daten1 = $daten1 - 16384; + } + $daten1 = $daten1 / 10; $shortname='TH'.$snr; $einheit1 = " C"; $daten2 = $w3; @@ -449,11 +452,12 @@ WS2000_Parse($$) { $snr -= 8; $sensor = "Innensensor V1.2(" . $snr . ")"; } - if ($w1 >= 64) { - $daten1 = ((255 - $w1 - $w2) / 10) * (-1); - }else{ - $daten1 = (($w1 * 128 + $w2) / 10); - } + $daten1 = (($w1 * 128 + $w2) ); + if ($daten1 >= 16085) + { + $daten1 = $daten1 - 16384; + } + $daten1 = $daten1 / 10; $shortname='I'.$snr; $daten2 = $w3; $daten3 = $w4 * 128 + $w5;