diff --git a/CHANGED b/CHANGED index b0ade72fe..d9b7560d8 100644 --- a/CHANGED +++ b/CHANGED @@ -1,5 +1,6 @@ - CVS - bugfix: applying smallscreen attributes to firefox/opera + - feature: CUL_TX added (thanks to Peterp) - 2011-07-08 (5.1) - feature: smallscreen optimizations for iPhone diff --git a/FHEM/00_CUL.pm b/FHEM/00_CUL.pm index a12a624fd..627f091de 100755 --- a/FHEM/00_CUL.pm +++ b/FHEM/00_CUL.pm @@ -48,7 +48,7 @@ my @ampllist = (24, 27, 30, 33, 36, 38, 40, 42); # rAmpl(dB) my $clientsSlowRF = ":FS20:FHT:FHT8V:KS300:USF1000:BS:HMS: " . ":CUL_EM:CUL_WS:CUL_FHTTK:CUL_RFR:CUL_HOERMANN: " . - ":ESA2000:CUL_IR:"; + ":ESA2000:CUL_IR:CUL_TX"; my $clientsHomeMatic = ":CUL_HM:HMS:"; @@ -66,6 +66,7 @@ my %matchListSlowRF = ( "B:CUL_HOERMANN"=> "^R..........", "C:ESA2000" => "^S................................\$", "D:CUL_IR" => "^I............", + "E:CUL_TX" => "^t..........", ); my %matchListHomeMatic = ( "1:CUL_HM" => "^A......................", @@ -817,7 +818,7 @@ CUL_Parse($$$$$) my $rssi; my $dmsg = $rmsg; - if($dmsg =~ m/^[AFTKEHRS]([A-F0-9][A-F0-9])+$/) { # RSSI + if($dmsg =~ m/^[AFTKEHRSt]([A-F0-9][A-F0-9])+$/) { # RSSI my $l = length($dmsg); $rssi = hex(substr($dmsg, $l-2, 2)); $dmsg = substr($dmsg, 0, $l-2); @@ -895,6 +896,8 @@ CUL_Parse($$$$$) ; } elsif($fn eq "A" && $len >= 21) { # AskSin/BidCos/HomeMatic ; + } elsif($fn eq "t" && $len >= 5) { # TX3 + ; } else { Log GetLogLevel($name,2), "$name: unknown message $dmsg"; return; diff --git a/FHEM/14_CUL_TX.pm b/FHEM/14_CUL_TX.pm new file mode 100644 index 000000000..a61185122 --- /dev/null +++ b/FHEM/14_CUL_TX.pm @@ -0,0 +1,117 @@ +############################################## +package main; + +# From peterp +# Lacrosse TX3-TH thermo/hygro sensor + +use strict; +use warnings; + +sub +CUL_TX_Initialize($) +{ + my ($hash) = @_; + + $hash->{Match} = "^t.........."; + $hash->{DefFn} = "CUL_TX_Define"; + $hash->{UndefFn} = "CUL_TX_Undef"; + $hash->{ParseFn} = "CUL_TX_Parse"; + $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 " . + "showtime:1,0 loglevel:0,1,2,3,4,5,6"; +} + +############################# +sub +CUL_TX_Define($$) +{ + my ($hash, $def) = @_; + my @a = split("[ \t][ \t]*", $def); + + return "wrong syntax: define CUL_TX [corr]" + if(int(@a) < 3 || int(@a) > 4); + + $hash->{CODE} = $a[2]; + $hash->{corr} = ((int(@a) > 3) ? $a[3] : 0); + + $modules{CUL_TX}{defptr}{$a[2]} = $hash; + $hash->{STATE} = "Defined"; + Log 4, "CUL_TX defined $a[0] $a[2]"; + + return undef; +} + +##################################### +sub +CUL_TX_Undef($$) +{ + my ($hash, $name) = @_; + delete($modules{CUL_TX}{defptr}{$hash->{CODE}}) + if(defined($hash->{CODE}) && + defined($modules{CUL_TX}{defptr}{$hash->{CODE}})); + return undef; +} + +################################### +sub +CUL_TX_Parse($$) +{ + my ($hash, $msg) = @_; + # Msg format: taTHHXYZXY, see http://www.f6fbb.org/domo/sensors/tx3_th.php + my @a = split("", $msg); + my $id2 = hex($a[4]) & 1; #meaning unknown + my $id3 = (hex($a[3])<<3) + (hex($a[4])>>1); + + if($a[5] ne $a[8] || $a[6] ne $a[9]) { + Log 4, "CUL_TX $id3 ($msg) data error"; + return; + } + + my $def = $modules{CUL_TX}{defptr}{$id3}; + if(!$def) { + Log 2, "CUL_TX Unknown device $id3, please define it"; + return "UNDEFINED CUL_TX_$id3 CUL_TX $id3" if(!$def); + } + + my $name = $def->{NAME}; + + my $ll4 = GetLogLevel($name,4); + Log $ll4, "CUL_TX $name $id3 ($msg)"; + + my ($devtype, $val, $no); + my $valraw = ($a[5].$a[6].".".$a[7]); + my $type = $a[2]; + if($type eq "0") { + $devtype = "temperature"; + $val = sprintf("%2.1f", ($valraw - 50 + $hash->{corr}) ); + Log $ll4, "CUL_TX $devtype $name $id3 T: $val F: $id2"; + $no = "T: $val"; + + } elsif ($type eq "E") { + $devtype = "humidity"; + $val = $valraw; + Log $ll4, "CUL_TX $devtype $name $id3 H: $val F: $id2"; + $no = "H: $val"; + + } else { + my $ll2 = GetLogLevel($name,4); + Log $ll2, "CUL_TX $type $name $id3 ($msg) unknown type"; + return ""; + + } + + my $tn = TimeNow(); + $def->{STATE} = $no; + $def->{READINGS}{state}{TIME} = $tn; + $def->{READINGS}{state}{VAL} = $val; + $def->{CHANGED}[0] = $no; + + $def->{READINGS}{$devtype}{VAL} = $val; + $def->{READINGS}{$devtype}{TIME} = $tn; + + DoTrigger($name, undef) if($init_done); + return $name; + +} + +1; + diff --git a/FHEM/98_autocreate.pm b/FHEM/98_autocreate.pm index 1dd4ee6b6..881fea6e4 100644 --- a/FHEM/98_autocreate.pm +++ b/FHEM/98_autocreate.pm @@ -12,16 +12,16 @@ use warnings; my %flogpar = ( "CUL_EM.*" - => { GPLOT => "cul_em:Power,", FILTER => "%NAME" }, + => { GPLOT => "cul_em:Power,", FILTER => "%NAME:CNT.*" }, "CUL_WS.*" - => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME" }, + => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" }, "CUL_FHTTK.*" => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" }, "FHT.*" => { GPLOT => "fht:Temp/Act,", FILTER => "%NAME" }, "HMS100TFK_.*" => { GPLOT => "fht80tf:Contact,", FILTER => "%NAME" }, - "HMS100T._.*" + "HMS100T_.*" => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" }, "KS300.*" => { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,", @@ -58,14 +58,16 @@ my %flogpar = ( # HomeMatic "CUL_HM_THSensor.*" - => { GPLOT => "hms:Temp/Hum,", - FILTER => "%NAME:T:.*" }, + => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" }, "CUL_HM_KS550.*" => { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,", FILTER => "%NAME:T:.*" }, "CUL_HM_HM-CC-TC.*" - => { GPLOT => "hms:Temp/Hum,", - FILTER => "%NAME:T:.*" }, + => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" }, + + # Lacrosse TX + "CUL_TX.*" + => { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:(T|H):.*" }, ); # Do not create FileLog for the following devices. diff --git a/webfrontend/pgm2/98_SVG.pm b/webfrontend/pgm2/98_SVG.pm index 68c7f6b8c..739aa2862 100755 --- a/webfrontend/pgm2/98_SVG.pm +++ b/webfrontend/pgm2/98_SVG.pm @@ -36,7 +36,6 @@ SVG_render($$$$$$$) my $SVG_ss = shift; # small screen return "" if(!defined($dp)); - my $th = 16; # "Font" height my ($x, $y) = (($SVG_ss ? 2 : 3)*$th, 1.2*$th); # Rect offset my %conf; # gnuplot file settings diff --git a/webfrontend/pgm2/temp4hum4.gplot b/webfrontend/pgm2/temp4hum4.gplot new file mode 100644 index 000000000..359ab6567 --- /dev/null +++ b/webfrontend/pgm2/temp4hum4.gplot @@ -0,0 +1,27 @@ +# Attribute 'small' is useful for gnuplot/-scroll only, +# if plotsize is less than 800,400 +#set terminal png transparent small size crop + +set terminal png transparent size crop + +set output '.png' +set xdata time +set timefmt "%Y-%m-%d_%H:%M:%S" +set xlabel " " +set ytics nomirror +set y2tics +#set ytics +set title '' +set grid xtics y2tics + +set y2label "Temperature in C" +set ylabel "Humidity (%)" + +#FileLog 4:T\x3a:10: +#FileLog 4:H\x3a:50: + +plot \ + "< awk '/T:/ {print $1, $4}' "\ + using 1:2 axes x1y2 title 'Measured temperature' with lines lw 2,\ + "< awk '/H:/ {print $1, $4}' "\ + using 1:2 axes x1y1 title 'Humidity (%)' with lines lw 1\