diff --git a/fhem/FHEM/46_TRX_WEATHER.pm b/fhem/FHEM/46_TRX_WEATHER.pm
index eb70b1b6e..325eddc9f 100755
--- a/fhem/FHEM/46_TRX_WEATHER.pm
+++ b/fhem/FHEM/46_TRX_WEATHER.pm
@@ -82,7 +82,11 @@
# BBQ-Sensors (two temperature values):
# * "ET732" is Maverick ET-732
#
-# Copyright (C) 2012/2013 Willi Herzig
+# thermostats (THERMOSTAT):
+# * "TH10" is XDOM TH10
+# * "TLX7506" is Digimax TLX7506
+#
+# Copyright (C) 2012-2016 Willi Herzig
#
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -128,7 +132,7 @@ TRX_WEATHER_Initialize($)
{
my ($hash) = @_;
- $hash->{Match} = "^..(4e|50|51|52|54|55|56|57|58|5a|5c|5d).*";
+ $hash->{Match} = "^..(40|4e|50|51|52|54|55|56|57|58|5a|5c|5d).*";
$hash->{DefFn} = "TRX_WEATHER_Define";
$hash->{UndefFn} = "TRX_WEATHER_Undef";
$hash->{ParseFn} = "TRX_WEATHER_Parse";
@@ -183,6 +187,8 @@ TRX_WEATHER_Undef($$)
my %types =
(
+ # THERMOSTAT
+ 0x4009 => { part => 'THERMOSTAT', method => \&TRX_WEATHER_common_therm, },
# BBQ
0x4e0a => { part => 'BBQ', method => \&TRX_WEATHER_common_bbq, },
# TEMP
@@ -257,6 +263,97 @@ sub TRX_WEATHER_temperature_food {
}
+# -----------------------------
+sub TRX_WEATHER_common_therm {
+ my $type = shift;
+ my $longids = shift;
+ my $bytes = shift;
+
+ my $subtype = sprintf "%02x", $bytes->[1];
+ my $dev_type;
+
+ my %devname =
+ ( # HEXSTRING => "NAME"
+ 0x00 => "TLX7506",
+ 0x01 => "TH10",
+ );
+
+ if (exists $devname{$bytes->[1]}) {
+ $dev_type = $devname{$bytes->[1]};
+ } else {
+ Log3 undef, 3, "TRX_WEATHER: common_therm error undefined subtype=$subtype";
+ my @res = ();
+ return @res;
+ }
+
+ #my $seqnbr = sprintf "%02x", $bytes->[2];
+
+ my $dev_str = $dev_type;
+ if (TRX_WEATHER_use_longid($longids,$dev_type)) {
+ $dev_str .= $DOT.sprintf("%02x", $bytes->[3]);
+ }
+ if ($bytes->[4] > 0) {
+ $dev_str .= $DOT.sprintf("%d", $bytes->[4]);
+ }
+
+ my @res = ();
+
+ # hexline debugging
+ if ($TRX_HEX_debug) {
+ my $hexline = ""; for (my $i=0;$i<@$bytes;$i++) { $hexline .= sprintf("%02x",$bytes->[$i]);}
+ push @res, { device => $dev_str, type => 'hexline', current => $hexline, units => 'hex', };
+ }
+
+
+ my $temp = ($bytes->[5]);
+ if ($temp) {
+ push @res, {
+ device => $dev_str,
+ type => 'temp',
+ current => $temp,
+ units => 'Grad Celsius'
+ }
+ }
+
+ my $setpoint =($bytes->[6]);
+ if ($setpoint) {
+ push @res, {
+ device => $dev_str,
+ type => 'setpoint',
+ current => $setpoint,
+ units => 'Grad Celsius'
+ }
+ }
+
+ my $demand;
+ my $t_status = ($bytes->[7] & 0x03);
+ if ($t_status == 0) { $demand = 'n/a'}
+ elsif ($t_status == 1) { $demand = 'on'}
+ elsif ($t_status == 2) { $demand = 'off'}
+ elsif ($t_status == 3) { $demand = 'initializing'}
+ else {
+ $demand = sprintf("unknown-%02x",$t_status);
+ }
+
+ Log3 undef, 5, "TRX_WEATHER: demand = $bytes->[7] $t_status $demand";
+ push @res, {
+ device => $dev_str,
+ type => 'demand',
+ current => sprintf("%s",$demand),
+ };
+
+ my $rssi = ($bytes->[8] & 0xf0) >> 4;
+
+ if ($trx_rssi == 1) {
+ push @res, {
+ device => $dev_str,
+ type => 'rssi',
+ current => sprintf("%d",$rssi),
+ };
+ }
+ return @res;
+}
+
sub TRX_WEATHER_temperature_bbq {
my ($bytes, $dev, $res, $off) = @_;
@@ -1647,6 +1744,24 @@ TRX_WEATHER_Parse($$)
$sensor = "time";
readingsBulkUpdate($def, $sensor, $i->{current});
}
+ elsif ($i->{type} eq "setpoint") {
+ Log3 $name, 5, "TRX_WEATHER: name=$name device=$device_name setpoint ".$i->{current}." ".$i->{units};
+ $val .= "SP: ".$i->{current}." ";
+
+ $sensor = "setpoint";
+ readingsBulkUpdate($def, $sensor, $i->{current});
+ }
+ elsif ($i->{type} eq "demand") {
+ Log3 $name, 5, "TRX_WEATHER: name=$name device=$device_name state ".$i->{current};
+ if ($val eq "") {
+ $val = "$i->{current}";
+ }
+ else {
+ $val .= "D: ".$i->{current}." ";
+ }
+ $sensor = "demand";
+ readingsBulkUpdate($def, $sensor, $i->{current});
+ }
else {
Log3 $name, 1, "TRX_WEATHER: name=$name device=$device_name UNKNOWN Type: ".$i->{type}." Value: ".$i->{current}
}
@@ -1710,6 +1825,8 @@ TRX_WEATHER_Parse($$)
"TFA_WIND" (for TFA wind sensor),
"BWR101" (for Oregon Scientific BWR101),
"GR101" (for Oregon Scientific GR101)
+ "TLX7506" (for Digimax TLX7506),
+ "TH10" (for Digimax with short format),
Example: