From 64bcc8f6874746a15de9a0b2a86cc52236cc7c84 Mon Sep 17 00:00:00 2001
From: "klaus.schauer" <>
Date: Wed, 20 Jun 2018 09:37:00 +0000
Subject: [PATCH] 10_EnOcean: Eltako shutter: model Eltako_FSB_ACK added,
digitalInput.03: (EEP A5-30-03) model Eltako_TF_RWB added
git-svn-id: https://svn.fhem.de/fhem/trunk@16891 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/10_EnOcean.pm | 67 ++++++++++++++++++++++++++++++++---------
1 file changed, 52 insertions(+), 15 deletions(-)
diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm
index 7108d4a74..5b2c6db67 100755
--- a/fhem/FHEM/10_EnOcean.pm
+++ b/fhem/FHEM/10_EnOcean.pm
@@ -425,11 +425,13 @@ my %EnO_models = (
"Eltako_FSB14" => {attr => {manufID => "00D"}},
"Eltako_FSB61" => {attr => {manufID => "00D"}},
"Eltako_FSB70" => {attr => {manufID => "00D"}},
+ "Eltako_FSB_ACK" => {attr => {manufID => "00D"}},
"Eltako_FSM12" => {attr => {manufID => "00D"}},
"Eltako_FSM61" => {attr => {manufID => "00D"}},
"Eltako_FT55" => {attr => {manufID => "00D"}},
"Eltako_FTS12" => {attr => {manufID => "00D"}},
"Eltako_TF"=> {attr => {manufID => "00D"}},
+ "Eltako_TF_RWB"=> {attr => {manufID => "00D"}},
"Holter_OEM" => {attr => {pidCtrl => "off"}},
"Micropelt_MVA004" => {attr => {remoteCode => "FFFFFFFE", remoteEEP => "A5-20-01", remoteID => "getNextID", remoteManagement => "manager"}, xml => {productID => "0x004900000000", xmlDescrLocation => "/FHEM/lib/EnO_ReCom_Device_Descr.xml"}},
other => {},
@@ -7149,6 +7151,10 @@ sub EnOcean_Parse($$)
# Eltako shutter
if ($db[0] == 0x70) {
# open
+ if ($model eq 'Eltako_FSB_ACK') {
+ push @event, "3:position:0";
+ push @event, "3:anglePos:" . AttrVal($name, "angleMin", -90);
+ }
push @event, "3:endPosition:open_ack";
$msg = "open_ack";
} elsif ($db[0] == 0x50) {
@@ -7236,7 +7242,7 @@ sub EnOcean_Parse($$)
# the state should remain released.
if ($msg =~ m/released$/ &&
AttrVal($name, "sensorMode", "switch") ne "pushbutton" &&
- $model !~ m/(FT55|FSB14|FSB61|FSB70|FSM12|FSM61|FTS12)$/) {
+ $model !~ m/(FT55|FSB.*|FSM12|FSM61|FTS12)$/) {
$event = "buttons";
$msg = "released";
} else {
@@ -9622,19 +9628,32 @@ sub EnOcean_Parse($$)
} elsif ($st eq "digitalInput.03") {
# 4 digital inputs, wake, temperature (EEP A5-30-03)
- my $in0 = $db[1] & 1;
- my $in1 = ($db[1] & 2) > 1;
- my $in2 = ($db[1] & 4) > 2;
- my $in3 = ($db[1] & 8) > 3;
- my $wake = $db[1] & 16 ? 'high' : 'low';
my $temperature = sprintf "%0.1f", 40 - $db[2] * 40 / 255;
- push @event, "3:in0:$in0";
- push @event, "3:in1:$in1";
- push @event, "3:in2:$in2";
- push @event, "3:in3:$in3";
- push @event, "3:wake:$wake";
push @event, "3:temperature:$temperature";
- push @event, "3:state:T: $temperature I: " . $in0 . $in1 . $in2 . $in3 . " W: " . $wake;
+ if ($model eq 'Eltako_TF_RWB') {
+ # Eltako TF-RWB smoke detector
+ my $alarm = $db[1] & 16 ? 'off' : 'smoke-alarm';
+ if (!exists($hash->{helper}{lastEvent}) || $hash->{helper}{lastEvent} ne $alarm || ReadingsVal($name, 'alarm', '') eq 'dead_sensor') {
+ push @event, "3:alarm:$alarm";
+ $hash->{helper}{lastEvent} = $alarm;
+ }
+ push @event, "3:state:$alarm";
+ @{$hash->{helper}{alarmTimer}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
+ RemoveInternalTimer($hash->{helper}{alarmTimer});
+ InternalTimer(gettimeofday() + 1980, 'EnOcean_readingsSingleUpdate', $hash->{helper}{alarmTimer}, 0);
+ } else {
+ my $in0 = $db[1] & 1;
+ my $in1 = ($db[1] & 2) > 1;
+ my $in2 = ($db[1] & 4) > 2;
+ my $in3 = ($db[1] & 8) > 3;
+ my $wake = $db[1] & 16 ? 'high' : 'low';
+ push @event, "3:in0:$in0";
+ push @event, "3:in1:$in1";
+ push @event, "3:in2:$in2";
+ push @event, "3:in3:$in3";
+ push @event, "3:wake:$wake";
+ push @event, "3:state:T: $temperature I: " . $in0 . $in1 . $in2 . $in3 . " W: " . $wake;
+ }
} elsif ($st eq "digitalInput.04") {
# 3 digital inputs, 1 digital input 8 bit (EEP A5-30-04)
@@ -17498,7 +17517,8 @@ EnOcean_Delete($$)
shutTime and shutTimeCloses,
are set correctly.
If settingAccuracy is set to high, the run-time is sent in 1/10 increments.
- Set attr subType to manufProfile, manufID to 00D and attr model to Eltako_FSB14|FSB61|FSB70|TF manually.
+ Set attr subType to manufProfile, manufID to 00D and attr model to Eltako_FSB14|FSB61|FSB70|FSB_ACK manually.
+ If the attribute model is set to Eltako_FSB_ACK, with the status "open_ack" the readings position and anglePos are also updated.
Use the sensor type "Szenentaster/PC" for Eltako devices.
@@ -19905,6 +19925,21 @@ EnOcean_Delete($$)
+