mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
Lacrosse TX2/TX3
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@945 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
79d2fde61d
commit
7df6b37def
1
CHANGED
1
CHANGED
@ -1,5 +1,6 @@
|
|||||||
- CVS
|
- CVS
|
||||||
- bugfix: applying smallscreen attributes to firefox/opera
|
- bugfix: applying smallscreen attributes to firefox/opera
|
||||||
|
- feature: CUL_TX added (thanks to Peterp)
|
||||||
|
|
||||||
- 2011-07-08 (5.1)
|
- 2011-07-08 (5.1)
|
||||||
- feature: smallscreen optimizations for iPhone
|
- feature: smallscreen optimizations for iPhone
|
||||||
|
@ -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: " .
|
my $clientsSlowRF = ":FS20:FHT:FHT8V:KS300:USF1000:BS:HMS: " .
|
||||||
":CUL_EM:CUL_WS:CUL_FHTTK:CUL_RFR:CUL_HOERMANN: " .
|
":CUL_EM:CUL_WS:CUL_FHTTK:CUL_RFR:CUL_HOERMANN: " .
|
||||||
":ESA2000:CUL_IR:";
|
":ESA2000:CUL_IR:CUL_TX";
|
||||||
|
|
||||||
my $clientsHomeMatic = ":CUL_HM:HMS:";
|
my $clientsHomeMatic = ":CUL_HM:HMS:";
|
||||||
|
|
||||||
@ -66,6 +66,7 @@ my %matchListSlowRF = (
|
|||||||
"B:CUL_HOERMANN"=> "^R..........",
|
"B:CUL_HOERMANN"=> "^R..........",
|
||||||
"C:ESA2000" => "^S................................\$",
|
"C:ESA2000" => "^S................................\$",
|
||||||
"D:CUL_IR" => "^I............",
|
"D:CUL_IR" => "^I............",
|
||||||
|
"E:CUL_TX" => "^t..........",
|
||||||
);
|
);
|
||||||
my %matchListHomeMatic = (
|
my %matchListHomeMatic = (
|
||||||
"1:CUL_HM" => "^A......................",
|
"1:CUL_HM" => "^A......................",
|
||||||
@ -817,7 +818,7 @@ CUL_Parse($$$$$)
|
|||||||
my $rssi;
|
my $rssi;
|
||||||
|
|
||||||
my $dmsg = $rmsg;
|
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);
|
my $l = length($dmsg);
|
||||||
$rssi = hex(substr($dmsg, $l-2, 2));
|
$rssi = hex(substr($dmsg, $l-2, 2));
|
||||||
$dmsg = substr($dmsg, 0, $l-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 "A" && $len >= 21) { # AskSin/BidCos/HomeMatic
|
||||||
;
|
;
|
||||||
|
} elsif($fn eq "t" && $len >= 5) { # TX3
|
||||||
|
;
|
||||||
} else {
|
} else {
|
||||||
Log GetLogLevel($name,2), "$name: unknown message $dmsg";
|
Log GetLogLevel($name,2), "$name: unknown message $dmsg";
|
||||||
return;
|
return;
|
||||||
|
117
FHEM/14_CUL_TX.pm
Normal file
117
FHEM/14_CUL_TX.pm
Normal file
@ -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 <name> CUL_TX <code> [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;
|
||||||
|
|
@ -12,16 +12,16 @@ use warnings;
|
|||||||
|
|
||||||
my %flogpar = (
|
my %flogpar = (
|
||||||
"CUL_EM.*"
|
"CUL_EM.*"
|
||||||
=> { GPLOT => "cul_em:Power,", FILTER => "%NAME" },
|
=> { GPLOT => "cul_em:Power,", FILTER => "%NAME:CNT.*" },
|
||||||
"CUL_WS.*"
|
"CUL_WS.*"
|
||||||
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME" },
|
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" },
|
||||||
"CUL_FHTTK.*"
|
"CUL_FHTTK.*"
|
||||||
=> { GPLOT => "fht80tf:Window,", FILTER => "%NAME" },
|
=> { GPLOT => "fht80tf:Window,", FILTER => "%NAME" },
|
||||||
"FHT.*"
|
"FHT.*"
|
||||||
=> { GPLOT => "fht:Temp/Act,", FILTER => "%NAME" },
|
=> { GPLOT => "fht:Temp/Act,", FILTER => "%NAME" },
|
||||||
"HMS100TFK_.*"
|
"HMS100TFK_.*"
|
||||||
=> { GPLOT => "fht80tf:Contact,", FILTER => "%NAME" },
|
=> { GPLOT => "fht80tf:Contact,", FILTER => "%NAME" },
|
||||||
"HMS100T._.*"
|
"HMS100T_.*"
|
||||||
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" },
|
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" },
|
||||||
"KS300.*"
|
"KS300.*"
|
||||||
=> { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,",
|
=> { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,",
|
||||||
@ -58,14 +58,16 @@ my %flogpar = (
|
|||||||
|
|
||||||
# HomeMatic
|
# HomeMatic
|
||||||
"CUL_HM_THSensor.*"
|
"CUL_HM_THSensor.*"
|
||||||
=> { GPLOT => "hms:Temp/Hum,",
|
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" },
|
||||||
FILTER => "%NAME:T:.*" },
|
|
||||||
"CUL_HM_KS550.*"
|
"CUL_HM_KS550.*"
|
||||||
=> { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,",
|
=> { GPLOT => "ks300:Temp/Rain,ks300_2:Wind/Hum,",
|
||||||
FILTER => "%NAME:T:.*" },
|
FILTER => "%NAME:T:.*" },
|
||||||
"CUL_HM_HM-CC-TC.*"
|
"CUL_HM_HM-CC-TC.*"
|
||||||
=> { GPLOT => "hms:Temp/Hum,",
|
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:T:.*" },
|
||||||
FILTER => "%NAME:T:.*" },
|
|
||||||
|
# Lacrosse TX
|
||||||
|
"CUL_TX.*"
|
||||||
|
=> { GPLOT => "hms:Temp/Hum,", FILTER => "%NAME:(T|H):.*" },
|
||||||
);
|
);
|
||||||
|
|
||||||
# Do not create FileLog for the following devices.
|
# Do not create FileLog for the following devices.
|
||||||
|
@ -36,7 +36,6 @@ SVG_render($$$$$$$)
|
|||||||
my $SVG_ss = shift; # small screen
|
my $SVG_ss = shift; # small screen
|
||||||
|
|
||||||
return "" if(!defined($dp));
|
return "" if(!defined($dp));
|
||||||
|
|
||||||
my $th = 16; # "Font" height
|
my $th = 16; # "Font" height
|
||||||
my ($x, $y) = (($SVG_ss ? 2 : 3)*$th, 1.2*$th); # Rect offset
|
my ($x, $y) = (($SVG_ss ? 2 : 3)*$th, 1.2*$th); # Rect offset
|
||||||
my %conf; # gnuplot file settings
|
my %conf; # gnuplot file settings
|
||||||
|
27
webfrontend/pgm2/temp4hum4.gplot
Normal file
27
webfrontend/pgm2/temp4hum4.gplot
Normal file
@ -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 <SIZE> crop
|
||||||
|
|
||||||
|
set terminal png transparent size <SIZE> crop
|
||||||
|
|
||||||
|
set output '<OUT>.png'
|
||||||
|
set xdata time
|
||||||
|
set timefmt "%Y-%m-%d_%H:%M:%S"
|
||||||
|
set xlabel " "
|
||||||
|
set ytics nomirror
|
||||||
|
set y2tics
|
||||||
|
#set ytics
|
||||||
|
set title '<L1>'
|
||||||
|
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}' <IN>"\
|
||||||
|
using 1:2 axes x1y2 title 'Measured temperature' with lines lw 2,\
|
||||||
|
"< awk '/H:/ {print $1, $4}' <IN>"\
|
||||||
|
using 1:2 axes x1y1 title 'Humidity (%)' with lines lw 1\
|
Loading…
x
Reference in New Issue
Block a user