mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
10_EnOcean: # EEP A5-08-01 ... A5-08-03 (lightTempOccupSensor.<01|02|03>), EEP A5-07-01, A5-07-02, A5-07-03 (occupSensor.<01|02|03>), EEP A5-06-01 (lightSensor.01): signOfLife function added
# EEP A5-10-02, A5-10-03, A5-10-06 (roomSensorControl.05), EEP A5-10-10, A5-10-12 (roomSensorControl.01): attr devMode added git-svn-id: https://svn.fhem.de/fhem/trunk@23703 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0a3e7e7bf8
commit
9e16fbde2e
@ -1519,7 +1519,7 @@ sub EnOcean_Get($@) {
|
|||||||
Log3 $name, 3, "EnOcean get $name $cmd";
|
Log3 $name, 3, "EnOcean get $name $cmd";
|
||||||
|
|
||||||
} elsif ($cmd eq "signal") {
|
} elsif ($cmd eq "signal") {
|
||||||
# trigger status massage of device
|
# trigger status message of device
|
||||||
$rorg = "D0";
|
$rorg = "D0";
|
||||||
$destinationID = $hash->{DEF} if ($destinationID eq 'F' x 8);
|
$destinationID = $hash->{DEF} if ($destinationID eq 'F' x 8);
|
||||||
shift(@a);
|
shift(@a);
|
||||||
@ -2575,7 +2575,12 @@ sub EnOcean_Set($@) {
|
|||||||
$data = sprintf "%02X%02X%02X%02X", $setpoint, $humidity, $actualTemp, $setCmd;
|
$data = sprintf "%02X%02X%02X%02X", $setpoint, $humidity, $actualTemp, $setCmd;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "Unknown argument " . $cmd . ", choose one of " . $cmdList . " setpoint:slider,0,1,255 setpointScaled switch:on,off teach:noArg"
|
if (AttrVal($name, 'devMode', 'master') eq 'master') {
|
||||||
|
return "Unknown argument " . $cmd . ", choose one of " . $cmdList . " setpoint:slider,0,1,255 setpointScaled switch:on,off teach:noArg"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Log3 $name, 3, "EnOcean set $name $cmd";
|
Log3 $name, 3, "EnOcean set $name $cmd";
|
||||||
|
|
||||||
@ -2710,7 +2715,12 @@ sub EnOcean_Set($@) {
|
|||||||
$data = sprintf "%02X%02X%02X%02X", $nightReduction, $setpointTemp, $actualTemp, $setCmd;
|
$data = sprintf "%02X%02X%02X%02X", $nightReduction, $setpointTemp, $actualTemp, $setCmd;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "Unknown argument " . $cmd . ", choose one of setpointTemp:slider,0,1,40 desired-temp nightReduction:0,1,2,3,4,5 teach:noArg"
|
if (AttrVal($name, 'devMode', 'master') eq 'master') {
|
||||||
|
return "Unknown argument " . $cmd . ", choose one of setpointTemp:slider,0,1,40 desired-temp nightReduction:0,1,2,3,4,5 teach:noArg"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -2879,7 +2889,12 @@ sub EnOcean_Set($@) {
|
|||||||
$data = sprintf "%02X%02X%02X%02X", $fanStage, $setpoint, $actualTemp, $setCmd;
|
$data = sprintf "%02X%02X%02X%02X", $fanStage, $setpoint, $actualTemp, $setCmd;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "Unknown argument " . $cmd . ", choose one of " . $cmdList . "setpoint:slider,0,1,255 fanStage:auto,0,1,2,3 setpointScaled switch:on,off teach:noArg"
|
if (AttrVal($name, 'devMode', 'master') eq 'master') {
|
||||||
|
return "Unknown argument " . $cmd . ", choose one of " . $cmdList . "setpoint:slider,0,1,255 fanStage:auto,0,1,2,3 setpointScaled switch:on,off teach:noArg"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -9808,7 +9823,7 @@ sub EnOcean_Parse($$) {
|
|||||||
|
|
||||||
} elsif ($st eq "lightSensor.01") {
|
} elsif ($st eq "lightSensor.01") {
|
||||||
# Light Sensor (EEP A5-06-01)
|
# Light Sensor (EEP A5-06-01)
|
||||||
# [Eltako FAH60, FAH63, FIH63, Thermokon SR65 LI, untested]
|
# [Eltako FAH60, FAH63, FIH63, Thermokon SR65 LI]
|
||||||
# $db[3] is the voltage where 0x00 = 0 V ... 0xFF = 5.1 V
|
# $db[3] is the voltage where 0x00 = 0 V ... 0xFF = 5.1 V
|
||||||
# $db[3] is the low illuminance for Eltako devices where
|
# $db[3] is the low illuminance for Eltako devices where
|
||||||
# min 0x00 = 0 lx, max 0xFF = 100 lx, if $db[2] = 0
|
# min 0x00 = 0 lx, max 0xFF = 100 lx, if $db[2] = 0
|
||||||
@ -9838,7 +9853,12 @@ sub EnOcean_Parse($$) {
|
|||||||
}
|
}
|
||||||
push @event, "3:brightness:$lux";
|
push @event, "3:brightness:$lux";
|
||||||
push @event, "3:state:$lux";
|
push @event, "3:state:$lux";
|
||||||
|
readingsDelete($hash, 'alarm');
|
||||||
|
if (AttrVal($name, "signOfLife", 'on') eq 'on') {
|
||||||
|
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
|
||||||
|
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
|
||||||
|
InternalTimer(gettimeofday() + AttrVal($name, "signOfLifeInterval", 110), 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{alarm}, 0);
|
||||||
|
}
|
||||||
} elsif ($st eq "lightSensor.02") {
|
} elsif ($st eq "lightSensor.02") {
|
||||||
# Light Sensor (EEP A5-06-02)
|
# Light Sensor (EEP A5-06-02)
|
||||||
# $db[3] is the voltage where 0x00 = 0 V ... 0xFF = 5.1 V
|
# $db[3] is the voltage where 0x00 = 0 V ... 0xFF = 5.1 V
|
||||||
@ -9941,6 +9961,13 @@ sub EnOcean_Parse($$) {
|
|||||||
@{$hash->{helper}{timer}{state}} = ($hash, 'state', 'off', 1, 5);
|
@{$hash->{helper}{timer}{state}} = ($hash, 'state', 'off', 1, 5);
|
||||||
InternalTimer(gettimeofday() + AttrVal($name, 'trackerWakeUpCycle', 30) * 1.1, 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{motion}, 0);
|
InternalTimer(gettimeofday() + AttrVal($name, 'trackerWakeUpCycle', 30) * 1.1, 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{motion}, 0);
|
||||||
InternalTimer(gettimeofday() + AttrVal($name, 'trackerWakeUpCycle', 30) * 1.1, 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{state}, 0);
|
InternalTimer(gettimeofday() + AttrVal($name, 'trackerWakeUpCycle', 30) * 1.1, 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{state}, 0);
|
||||||
|
} else {
|
||||||
|
readingsDelete($hash, 'alarm');
|
||||||
|
if (AttrVal($name, "signOfLife", 'on') eq 'on') {
|
||||||
|
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
|
||||||
|
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
|
||||||
|
InternalTimer(gettimeofday() + AttrVal($name, "signOfLifeInterval", 1320), 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{alarm}, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!exists($hash->{helper}{lastVoltage}) || $hash->{helper}{lastVoltage} != $db[3]) {
|
if (!exists($hash->{helper}{lastVoltage}) || $hash->{helper}{lastVoltage} != $db[3]) {
|
||||||
push @event, "3:battery:" . ($db[3] * 0.02 > 2.8 ? "ok" : "low");
|
push @event, "3:battery:" . ($db[3] * 0.02 > 2.8 ? "ok" : "low");
|
||||||
@ -10032,6 +10059,12 @@ sub EnOcean_Parse($$) {
|
|||||||
}
|
}
|
||||||
push @event, "3:brightness:$lux";
|
push @event, "3:brightness:$lux";
|
||||||
push @event, "3:motion:$motion";
|
push @event, "3:motion:$motion";
|
||||||
|
readingsDelete($hash, 'alarm');
|
||||||
|
if (AttrVal($name, "signOfLife", 'on') eq 'on') {
|
||||||
|
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
|
||||||
|
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
|
||||||
|
InternalTimer(gettimeofday() + AttrVal($name, "signOfLifeInterval", 1320), 'EnOcean_readingsSingleUpdate', $hash->{helper}{timer}{alarm}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
} elsif ($st eq "lightCtrlState.01") {
|
} elsif ($st eq "lightCtrlState.01") {
|
||||||
# Lighting Controller State (EEP A5-11-01)
|
# Lighting Controller State (EEP A5-11-01)
|
||||||
@ -15450,7 +15483,7 @@ EnOcean_roomCtrlPanel_00Snd($$$$$$$$)
|
|||||||
my $messagePart = 1;
|
my $messagePart = 1;
|
||||||
|
|
||||||
if ($mid == 0) {
|
if ($mid == 0) {
|
||||||
# general massage
|
# general message
|
||||||
($err, $response, $data, $logLevel) = EnOcean_roomCtrlPanel_00Cmd(undef, $hash, $mcf, $messagePart);
|
($err, $response, $data, $logLevel) = EnOcean_roomCtrlPanel_00Cmd(undef, $hash, $mcf, $messagePart);
|
||||||
EnOcean_SndRadio(undef, $hash, $packetType, "D2", $data, AttrVal($name, "subDef", "00000000"), "00", $hash->{DEF});
|
EnOcean_SndRadio(undef, $hash, $packetType, "D2", $data, AttrVal($name, "subDef", "00000000"), "00", $hash->{DEF});
|
||||||
if ($err) {
|
if ($err) {
|
||||||
@ -18724,6 +18757,7 @@ sub EnOcean_Delete($$) {
|
|||||||
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
||||||
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
||||||
setpointScaled.<br>
|
setpointScaled.<br>
|
||||||
|
The profile behaves like a master or slave, see <a href="#EnOcean_devMode">devMode</a>.<br>
|
||||||
The attr subType must be roomSensorControl.05. The attribute must be set manually.
|
The attr subType must be roomSensorControl.05. The attribute must be set manually.
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -18754,6 +18788,7 @@ sub EnOcean_Delete($$) {
|
|||||||
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
||||||
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
||||||
setpointScaled.<br>
|
setpointScaled.<br>
|
||||||
|
The profile behaves like a master or slave, see <a href="#EnOcean_devMode">devMode</a>.<br>
|
||||||
The attr subType must be roomSensorControl.05 and attr manufID must be 019. The attribute must be set manually.
|
The attr subType must be roomSensorControl.05 and attr manufID must be 019. The attribute must be set manually.
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -18783,6 +18818,7 @@ sub EnOcean_Delete($$) {
|
|||||||
is teached in, the temperature control of the FTR55* can be either blocked
|
is teached in, the temperature control of the FTR55* can be either blocked
|
||||||
or to a setpoint deviation of +/- 3 K be limited. For this use the optional parameter
|
or to a setpoint deviation of +/- 3 K be limited. For this use the optional parameter
|
||||||
[block] = lock|unlock, unlock is default.<br>
|
[block] = lock|unlock, unlock is default.<br>
|
||||||
|
The profile behaves like a master or slave, see <a href="#EnOcean_devMode">devMode</a>.<br>
|
||||||
The attr subType must be roomSensorControl.05 and attr manufID must be 00D.
|
The attr subType must be roomSensorControl.05 and attr manufID must be 00D.
|
||||||
The attributes must be set manually.
|
The attributes must be set manually.
|
||||||
</li>
|
</li>
|
||||||
@ -18815,6 +18851,7 @@ sub EnOcean_Delete($$) {
|
|||||||
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
attributes <a href="#scaleMax">scaleMax</a>, <a href="#scaleMin">scaleMin</a> and
|
||||||
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
<a href="#scaleDecimals">scaleDecimals</a> for the additional scaled setting
|
||||||
setpointScaled.<br>
|
setpointScaled.<br>
|
||||||
|
The profile behaves like a master or slave, see <a href="#EnOcean_devMode">devMode</a>.<br>
|
||||||
The attr subType must be roomSensorControl.01. The attribute must be set manually.
|
The attr subType must be roomSensorControl.01. The attribute must be set manually.
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -18839,6 +18876,7 @@ sub EnOcean_Delete($$) {
|
|||||||
primarily or from the attribute <a href="#actualTemp">actualTemp</a> if it is set.<br>
|
primarily or from the attribute <a href="#actualTemp">actualTemp</a> if it is set.<br>
|
||||||
If the attribute <a href="#EnOcean_setCmdTrigger">setCmdTrigger</a> is set to "refDev", a setpoint
|
If the attribute <a href="#EnOcean_setCmdTrigger">setCmdTrigger</a> is set to "refDev", a setpoint
|
||||||
command is sent when the reference device is updated.<br>
|
command is sent when the reference device is updated.<br>
|
||||||
|
The profile behaves like a master or slave, see <a href="#EnOcean_devMode">devMode</a>.<br>
|
||||||
The attr subType must be roomSensorControl.01 and attr manufID must be 00D. The attribute must be set manually.
|
The attr subType must be roomSensorControl.01 and attr manufID must be 00D. The attribute must be set manually.
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -21163,16 +21201,18 @@ sub EnOcean_Delete($$) {
|
|||||||
[Eltako FAH60, FAH63, FIH63, Thermokon SR65 LI]<br>
|
[Eltako FAH60, FAH63, FIH63, Thermokon SR65 LI]<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li>E/lx</li>
|
<li>E/lx</li>
|
||||||
|
<li>alarm: dead_sensor</li>
|
||||||
<li>brightness: E/lx (Sensor Range: 300 lx ... 30 klx, 600 lx ... 60 klx
|
<li>brightness: E/lx (Sensor Range: 300 lx ... 30 klx, 600 lx ... 60 klx
|
||||||
, Sensor Range for Eltako: E = 0 lx ... 100 lx, 300 lx ... 30 klx)</li>
|
, Sensor Range for Eltako: E = 0 lx ... 100 lx, 300 lx ... 30 klx)</li>
|
||||||
<li>voltage: U/V</li> (Sensor Range: U = 0 V ... 5.1 V)
|
<li>voltage: U/V</li> (Sensor Range: U = 0 V ... 5.1 V)
|
||||||
<li>state: E/lx</li>
|
<li>state: E/lx</li>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
Eltako devices only support Brightness.<br>
|
|
||||||
Please set the attribute model to Eltako_FAH60 if the sensor is from the production year 2015 or later.<br>
|
Please set the attribute model to Eltako_FAH60 if the sensor is from the production year 2015 or later.<br>
|
||||||
The attr subType must be lightSensor.01 and attr manufID must be 00D
|
The attr subType must be lightSensor.01 and attr manufID must be 00D
|
||||||
for Eltako Devices. This is done if the device was created by
|
for Eltako Devices. This is done if the device was created by
|
||||||
autocreate.
|
autocreate.<br>
|
||||||
|
<a href="#EnOcean_signOfLifeInterval">signOfLifeInterval</a> ([signOfLifeInterval] = 110 is default).<br>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
@ -21233,6 +21273,7 @@ sub EnOcean_Delete($$) {
|
|||||||
[EnOcean EOSW]<br>
|
[EnOcean EOSW]<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li>on|off</li>
|
<li>on|off</li>
|
||||||
|
<li>alarm: dead_sensor</li>
|
||||||
<li>battery: ok|low</li>
|
<li>battery: ok|low</li>
|
||||||
<li>button: pressed|released</li>
|
<li>button: pressed|released</li>
|
||||||
<li>current: I/µA (Sensor Range: I = 0 V ... 127.0 µA)</li>
|
<li>current: I/µA (Sensor Range: I = 0 V ... 127.0 µA)</li>
|
||||||
@ -21244,7 +21285,8 @@ sub EnOcean_Delete($$) {
|
|||||||
</ul><br>
|
</ul><br>
|
||||||
The attr subType must be occupSensor.<01|02>. This is done if the device was
|
The attr subType must be occupSensor.<01|02>. This is done if the device was
|
||||||
created by autocreate. Current is the solar panel current. Some values are
|
created by autocreate. Current is the solar panel current. Some values are
|
||||||
displayed only for certain types of devices.
|
displayed only for certain types of devices.<br>
|
||||||
|
<a href="#EnOcean_signOfLifeInterval">signOfLifeInterval</a> ([signOfLifeInterval] = 1320 is default).<br>
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
@ -21268,6 +21310,7 @@ sub EnOcean_Delete($$) {
|
|||||||
[untested]<br>
|
[untested]<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li>M: on|off E: E/lx U: U/V</li>
|
<li>M: on|off E: E/lx U: U/V</li>
|
||||||
|
<li>alarm: dead_sensor</li>
|
||||||
<li>battery: ok|low</li>
|
<li>battery: ok|low</li>
|
||||||
<li>brightness: E/lx (Sensor Range: E = 0 lx ... 1000 lx, over range)</li>
|
<li>brightness: E/lx (Sensor Range: E = 0 lx ... 1000 lx, over range)</li>
|
||||||
<li>errorCode: 251 ... 255</li>
|
<li>errorCode: 251 ... 255</li>
|
||||||
@ -21276,7 +21319,8 @@ sub EnOcean_Delete($$) {
|
|||||||
<li>state: M: on|off E: E/lx U: U/V</li>
|
<li>state: M: on|off E: E/lx U: U/V</li>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
The attr subType must be occupSensor.03. This is done if the device was
|
The attr subType must be occupSensor.03. This is done if the device was
|
||||||
created by autocreate.
|
created by autocreate.<br>
|
||||||
|
<a href="#EnOcean_signOfLifeInterval">signOfLifeInterval</a> ([signOfLifeInterval] = 1320 is default).<br>
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
@ -21284,6 +21328,7 @@ sub EnOcean_Delete($$) {
|
|||||||
[Eltako FABH63, FBx5B, FBH55, FBH63, FBH65x, FBHF65SB, FIBH63, Thermokon SR-MDS, PEHA 482 FU-BM DE]<br>
|
[Eltako FABH63, FBx5B, FBH55, FBH63, FBH65x, FBHF65SB, FIBH63, Thermokon SR-MDS, PEHA 482 FU-BM DE]<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li>M: on|off E: E/lx P: absent|present T: t/°C U: U/V</li>
|
<li>M: on|off E: E/lx P: absent|present T: t/°C U: U/V</li>
|
||||||
|
<li>alarm: dead_sensor</li>
|
||||||
<li>brightness: E/lx (Sensor Range: E = 0 lx ... 510, 1020, 1530 or 2048 lx)</li>
|
<li>brightness: E/lx (Sensor Range: E = 0 lx ... 510, 1020, 1530 or 2048 lx)</li>
|
||||||
<li>motion: on|off</li>
|
<li>motion: on|off</li>
|
||||||
<li>presence: absent|present</li>
|
<li>presence: absent|present</li>
|
||||||
@ -21294,7 +21339,9 @@ sub EnOcean_Delete($$) {
|
|||||||
Eltako and PEHA devices only support Brightness and Motion.<br>
|
Eltako and PEHA devices only support Brightness and Motion.<br>
|
||||||
The attr subType must be lightTempOccupSensor.<01|02|03> and attr
|
The attr subType must be lightTempOccupSensor.<01|02|03> and attr
|
||||||
manufID must be 00D for Eltako Devices. This is done if the device was
|
manufID must be 00D for Eltako Devices. This is done if the device was
|
||||||
created by autocreate. Set model to Eltako_TF manually for Eltako TF devices or to FBH55SB, FBH65SB, FBHF65SB.
|
created by autocreate. Set model to Eltako_TF manually for Eltako TF devices or to FBH55SB, FBH65SB, FBHF65SB.<br>
|
||||||
|
<a href="#EnOcean_signOfLifeInterval">signOfLifeInterval</a> ([signOfLifeInterval] = 1320 is default).<br>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user