2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

00_TCM: changes see EnOcean forum

git-svn-id: https://svn.fhem.de/fhem/trunk@23389 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klaus.schauer 2020-12-20 17:12:42 +00:00
parent 551d31416a
commit fe49645fa3

View File

@ -2933,7 +2933,7 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -2952,7 +2952,7 @@ sub EnOcean_Set($@) {
# PID regulator active # PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop'; my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
} else { } else {
@ -2967,8 +2967,8 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
$updateState = 2; $updateState = 2;
@ -2991,7 +2991,7 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -3010,7 +3010,7 @@ sub EnOcean_Set($@) {
# PID regulator active # PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'on') eq 'on' ? 'start' : 'stop'; my $activatePID = AttrVal($name, 'pidCtrl', 'on') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
} else { } else {
@ -3024,8 +3024,8 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
$updateState = 2; $updateState = 2;
@ -3050,7 +3050,7 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -3069,7 +3069,7 @@ sub EnOcean_Set($@) {
# PID regulator active # PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop'; my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
} else { } else {
@ -3084,9 +3084,9 @@ sub EnOcean_Set($@) {
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm}); RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
$updateState = 2; $updateState = 2;
@ -4096,12 +4096,12 @@ sub EnOcean_Set($@) {
$updateState = 0; $updateState = 0;
} elsif ($ctrlFuncID == 1) { } elsif ($ctrlFuncID == 1) {
# off # off
CommandDeleteReading(undef, "$name scene"); readingsDelete($hash, "scene");
SetExtensionsCancel($hash); SetExtensionsCancel($hash);
$updateState = 0; $updateState = 0;
} elsif ($ctrlFuncID == 2) { } elsif ($ctrlFuncID == 2) {
# on # on
CommandDeleteReading(undef, "$name scene"); readingsDelete($hash, "scene");
SetExtensionsCancel($hash); SetExtensionsCancel($hash);
$updateState = 0; $updateState = 0;
} elsif ($ctrlFuncID == 3 || $ctrlFuncID == 4) { } elsif ($ctrlFuncID == 3 || $ctrlFuncID == 4) {
@ -4119,12 +4119,12 @@ sub EnOcean_Set($@) {
$ctrlParam3 = $rampTime & 0xFF; $ctrlParam3 = $rampTime & 0xFF;
$ctrlParam2 = ($rampTime & 0xFF00) >> 8; $ctrlParam2 = ($rampTime & 0xFF00) >> 8;
readingsSingleUpdate($hash, "rampTime", $rampTime, 1); readingsSingleUpdate($hash, "rampTime", $rampTime, 1);
CommandDeleteReading(undef, "$name scene"); readingsDelete($hash, "scene");
SetExtensionsCancel($hash); SetExtensionsCancel($hash);
$updateState = 0; $updateState = 0;
} elsif ($ctrlFuncID == 5) { } elsif ($ctrlFuncID == 5) {
# stop # stop
CommandDeleteReading(undef, "$name scene"); readingsDelete($hash, "scene");
SetExtensionsCancel($hash); SetExtensionsCancel($hash);
$updateState = 0; $updateState = 0;
} elsif ($ctrlFuncID == 6) { } elsif ($ctrlFuncID == 6) {
@ -4147,7 +4147,7 @@ sub EnOcean_Set($@) {
} }
$ctrlParam3 = $rampTime & 0xFF; $ctrlParam3 = $rampTime & 0xFF;
$ctrlParam2 = ($rampTime & 0xFF00) >> 8; $ctrlParam2 = ($rampTime & 0xFF00) >> 8;
CommandDeleteReading(undef, "$name scene"); readingsDelete($hash, "scene");
readingsSingleUpdate($hash, "rampTime", $rampTime, 1); readingsSingleUpdate($hash, "rampTime", $rampTime, 1);
SetExtensionsCancel($hash); SetExtensionsCancel($hash);
$updateState = 0; $updateState = 0;
@ -4383,8 +4383,8 @@ sub EnOcean_Set($@) {
} elsif ($cmd eq "stop") { } elsif ($cmd eq "stop") {
# stop # stop
# delete readings, as they are undefined # delete readings, as they are undefined
CommandDeleteReading(undef, "$name anglePos"); readingsDelete($hash, "anglePos");
CommandDeleteReading(undef, "$name position"); readingsDelete($hash, "position");
readingsSingleUpdate($hash, "endPosition", "not_reached", 1); readingsSingleUpdate($hash, "endPosition", "not_reached", 1);
readingsSingleUpdate($hash, "state", "stop", 1); readingsSingleUpdate($hash, "state", "stop", 1);
$shutCmd = 0; $shutCmd = 0;
@ -5836,7 +5836,7 @@ sub EnOcean_Set($@) {
} }
} elsif ($cmd eq "clearCmds") { } elsif ($cmd eq "clearCmds") {
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
} else { } else {
@ -5902,7 +5902,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "state", "T: $temperature H: $humidity SPT: $setpointTemp F: $fanSpeed"); readingsBulkUpdate($hash, "state", "T: $temperature H: $humidity SPT: $setpointTemp F: $fanSpeed");
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 1); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 1);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name setpointTemp $a[1]"; Log3 $name, 3, "EnOcean set $name setpointTemp $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -5926,7 +5926,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "setpointShiftMax", $setpointShiftMax); readingsBulkUpdate($hash, "setpointShiftMax", $setpointShiftMax);
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 2); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 2);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name setpointShiftMax $a[1]"; Log3 $name, 3, "EnOcean set $name setpointShiftMax $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -5944,7 +5944,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "setpointType", $setpointType); readingsBulkUpdate($hash, "setpointType", $setpointType);
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x80); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x80);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name setpointType $a[1]"; Log3 $name, 3, "EnOcean set $name setpointType $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -5963,7 +5963,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "state", "T: $temperature H: $humidity SPT: $setpointTemp F: $fanSpeed"); readingsBulkUpdate($hash, "state", "T: $temperature H: $humidity SPT: $setpointTemp F: $fanSpeed");
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 4); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 4);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name fanSpeed $a[1]"; Log3 $name, 3, "EnOcean set $name fanSpeed $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -5985,7 +5985,7 @@ sub EnOcean_Set($@) {
} }
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x20); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x20);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name cooling $a[1]"; Log3 $name, 3, "EnOcean set $name cooling $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -6007,7 +6007,7 @@ sub EnOcean_Set($@) {
} }
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x40); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x40);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name heating $a[1]"; Log3 $name, 3, "EnOcean set $name heating $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -6025,7 +6025,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "occupancy", $a[1]); readingsBulkUpdate($hash, "occupancy", $a[1]);
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 8); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 8);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name occupancy $a[1]"; Log3 $name, 3, "EnOcean set $name occupancy $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -6043,7 +6043,7 @@ sub EnOcean_Set($@) {
readingsBulkUpdate($hash, "window", $a[1]); readingsBulkUpdate($hash, "window", $a[1]);
readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x10); readingsBulkUpdate($hash, "waitingCmds", $waitingCmds |= 0x10);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
CommandDeleteReading(undef, "$name smartAckMailbox"); readingsDelete($hash, "smartAckMailbox");
Log3 $name, 3, "EnOcean set $name window $a[1]"; Log3 $name, 3, "EnOcean set $name window $a[1]";
shift(@a); shift(@a);
} else { } else {
@ -7827,7 +7827,7 @@ sub EnOcean_Parse($$) {
EnOcean_CommandSave(undef, undef); EnOcean_CommandSave(undef, undef);
} }
push @event, "3:state:" . ($db[0] & 1 ? "closed" : "open"); push @event, "3:state:" . ($db[0] & 1 ? "closed" : "open");
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
if (AttrVal($name, "signOfLife", 'off') eq 'on') { if (AttrVal($name, "signOfLife", 'off') eq 'on') {
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm}); RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5); @{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
@ -8034,7 +8034,7 @@ sub EnOcean_Parse($$) {
push @event, "3:energyStorage:$energyStorage"; push @event, "3:energyStorage:$energyStorage";
my $roomTemp = ReadingsVal($name, "roomTemp", 20); my $roomTemp = ReadingsVal($name, "roomTemp", 20);
if ($db[2] & 4) { if ($db[2] & 4) {
CommandDeleteReading(undef, "$name roomTemp"); readingsDelete($hash, "roomTemp");
} else { } else {
$roomTemp = $db[1] * 40 / 255; $roomTemp = $db[1] * 40 / 255;
push @event, "3:roomTemp:" . sprintf "%0.1f", $roomTemp; push @event, "3:roomTemp:" . sprintf "%0.1f", $roomTemp;
@ -8055,13 +8055,13 @@ sub EnOcean_Parse($$) {
my $functionSelect = 0; my $functionSelect = 0;
my $setpointSelect = 0; my $setpointSelect = 0;
my $setpointSet = ReadingsVal($name, "setpointSetRestore", ReadingsVal($name, "setpointSet", $setpoint)); my $setpointSet = ReadingsVal($name, "setpointSetRestore", ReadingsVal($name, "setpointSet", $setpoint));
CommandDeleteReading(undef, "$name setpointSetRestore"); readingsDelete($hash, "setpointSetRestore");
my $setpointTemp = ReadingsVal($name, "setpointTemp", 20); my $setpointTemp = ReadingsVal($name, "setpointTemp", 20);
my $setpointTempSet = ReadingsVal($name, "setpointTempSet", $setpointTemp); my $setpointTempSet = ReadingsVal($name, "setpointTempSet", $setpointTemp);
my $temperature = ReadingsVal($name, 'temperature', $roomTemp); my $temperature = ReadingsVal($name, 'temperature', $roomTemp);
if (!defined(AttrVal($name, "temperatureRefDev", undef))) { if (!defined(AttrVal($name, "temperatureRefDev", undef))) {
if ($db[2] & 4) { if ($db[2] & 4) {
CommandDeleteReading(undef, "$name temperature"); readingsDelete($hash, "temperature");
} else { } else {
$temperature = $roomTemp; $temperature = $roomTemp;
readingsSingleUpdate($hash, 'temperature', sprintf("%0.1f", $temperature), 1); readingsSingleUpdate($hash, 'temperature', sprintf("%0.1f", $temperature), 1);
@ -8093,7 +8093,7 @@ sub EnOcean_Parse($$) {
# ignore all commands # ignore all commands
if ($waitingCmds ne "summerMode") { if ($waitingCmds ne "summerMode") {
$waitingCmds = "no_change"; $waitingCmds = "no_change";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} }
if ($manufID eq '049') { if ($manufID eq '049') {
$wakeUpCycle = 28800; $wakeUpCycle = 28800;
@ -8103,7 +8103,7 @@ sub EnOcean_Parse($$) {
} }
readingsSingleUpdate($hash, 'wakeUpCycle', $wakeUpCycle, 1); readingsSingleUpdate($hash, 'wakeUpCycle', $wakeUpCycle, 1);
# set alarm timer # set alarm timer
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm}); RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'no_response_from_actuator', 1, 3); @{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'no_response_from_actuator', 1, 3);
InternalTimer(gettimeofday() + $wakeUpCycle * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0); InternalTimer(gettimeofday() + $wakeUpCycle * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
@ -8166,10 +8166,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit"; push @event, "3:maintenanceMode:valveOpend:runInit";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x20; $waitingCmds = 0x20;
@ -8191,15 +8191,15 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveClosed"; push @event, "3:maintenanceMode:valveClosed";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x10; $waitingCmds = 0x10;
} }
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
} elsif ($waitingCmds eq "runInit") { } elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator # deactivate PID regulator
@ -8213,10 +8213,10 @@ sub EnOcean_Parse($$) {
push @event, "3:maintenanceMode:runInit"; push @event, "3:maintenanceMode:runInit";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
push @event, "3:waitingCmds:$operationMode"; push @event, "3:waitingCmds:$operationMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x80; $waitingCmds = 0x80;
@ -8232,10 +8232,10 @@ sub EnOcean_Parse($$) {
push @event, "3:maintenanceMode:listSet"; push @event, "3:maintenanceMode:listSet";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
push @event, "3:waitingCmds:$operationMode"; push @event, "3:waitingCmds:$operationMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x40; $waitingCmds = 0x40;
@ -8254,9 +8254,9 @@ sub EnOcean_Parse($$) {
$db[2] = (40 - $temperature) * 255 / 40; $db[2] = (40 - $temperature) * 255 / 40;
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint"; push @event, "3:operationMode:setpoint";
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8288,7 +8288,7 @@ sub EnOcean_Parse($$) {
push @event, "3:setpointTemp:" . sprintf("%0.1f", $setpointTemp); push @event, "3:setpointTemp:" . sprintf("%0.1f", $setpointTemp);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpointTemp"; push @event, "3:operationMode:setpointTemp";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8303,10 +8303,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:summerMode"; push @event, "3:operationMode:summerMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
@ -8376,10 +8376,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit"; push @event, "3:maintenanceMode:valveOpend:runInit";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x20; $waitingCmds = 0x20;
@ -8391,10 +8391,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveClosed"; push @event, "3:maintenanceMode:valveClosed";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$functionSelect = 1; $functionSelect = 1;
$waitingCmds = 0x10; $waitingCmds = 0x10;
@ -8447,7 +8447,7 @@ sub EnOcean_Parse($$) {
} else { } else {
if ($db[0] & 0x80) { if ($db[0] & 0x80) {
# temperature measurement inactive # temperature measurement inactive
CommandDeleteReading(undef, "$name feedTemp"); readingsDelete($hash, "feedTemp");
} else { } else {
$feedTemp = $db[2] * 60 / 255 + 20; $feedTemp = $db[2] * 60 / 255 + 20;
push @event, "3:feedTemp:" . sprintf("%0.1f", $feedTemp); push @event, "3:feedTemp:" . sprintf("%0.1f", $feedTemp);
@ -8459,17 +8459,17 @@ sub EnOcean_Parse($$) {
push @event, "3:alarm:" . $failureCode{$db[1]}; push @event, "3:alarm:" . $failureCode{$db[1]};
$battery = "empty" if ($db[1] == 18); $battery = "empty" if ($db[1] == 18);
} else { } else {
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
} }
} else { } else {
if ($db[0] & 0x80) { if ($db[0] & 0x80) {
# temperature measurement inactive # temperature measurement inactive
CommandDeleteReading(undef, "$name roomTemp"); readingsDelete($hash, "roomTemp");
} else { } else {
# room temperature # room temperature
$roomTemp = sprintf("%0.1f", ($db[1] * 20 / 255 + 10)); $roomTemp = sprintf("%0.1f", ($db[1] * 20 / 255 + 10));
push @event, "3:roomTemp:$roomTemp"; push @event, "3:roomTemp:$roomTemp";
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
} }
} }
if (!defined(AttrVal($name, "temperatureRefDev", undef))) { if (!defined(AttrVal($name, "temperatureRefDev", undef))) {
@ -8514,7 +8514,7 @@ sub EnOcean_Parse($$) {
} elsif ($summerMode eq 'on') { } elsif ($summerMode eq 'on') {
if ($waitingCmds ne "summerMode") { if ($waitingCmds ne "summerMode") {
$waitingCmds = "no_change"; $waitingCmds = "no_change";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} }
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8553,10 +8553,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit"; push @event, "3:maintenanceMode:valveOpend:runInit";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 1; $waitingCmds = 1;
} elsif ($waitingCmds eq "valveCloses") { } elsif ($waitingCmds eq "valveCloses") {
@ -8571,14 +8571,14 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveClosed"; push @event, "3:maintenanceMode:valveClosed";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 3; $waitingCmds = 3;
} }
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
} elsif ($waitingCmds eq "runInit") { } elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator # deactivate PID regulator
@ -8587,10 +8587,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit"; push @event, "3:maintenanceMode:runInit";
push @event, "3:operationMode:off"; push @event, "3:operationMode:off";
CommandDeleteReading(undef, "$name setpointSet"); readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 2; $waitingCmds = 2;
} elsif ($waitingCmds eq "setpoint") { } elsif ($waitingCmds eq "setpoint") {
@ -8605,10 +8605,10 @@ sub EnOcean_Parse($$) {
} else { } else {
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint"; push @event, "3:operationMode:setpoint";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8629,9 +8629,9 @@ sub EnOcean_Parse($$) {
push @event, "3:setpointTemp:$setpointTemp"; push @event, "3:setpointTemp:$setpointTemp";
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpointTemp"; push @event, "3:operationMode:setpointTemp";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8642,10 +8642,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:summerMode"; push @event, "3:operationMode:summerMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
@ -8660,10 +8660,10 @@ sub EnOcean_Parse($$) {
} else { } else {
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint"; push @event, "3:operationMode:setpoint";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8683,9 +8683,9 @@ sub EnOcean_Parse($$) {
push @event, "3:setpointTemp:$setpointTemp"; push @event, "3:setpointTemp:$setpointTemp";
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpointTemp"; push @event, "3:operationMode:setpointTemp";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} }
@ -8696,10 +8696,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:summerMode"; push @event, "3:operationMode:summerMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
#CommandDeleteReading(undef, "$name setpointTemp"); #readingsDelete($hash, "setpointTemp");
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
#CommandDeleteReading(undef, "$name waitingCmds"); #readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} else { } else {
@ -8737,11 +8737,11 @@ sub EnOcean_Parse($$) {
if ($db[0] & 0x80) { if ($db[0] & 0x80) {
$feedTemp = $db[1] / 2; $feedTemp = $db[1] / 2;
push @event, "3:feedTemp:" . sprintf "%0.1f", $db[1] / 2; push @event, "3:feedTemp:" . sprintf "%0.1f", $db[1] / 2;
CommandDeleteReading(undef, "$name roomTemp"); readingsDelete($hash, "roomTemp");
} else { } else {
$roomTemp = $db[1] / 2; $roomTemp = $db[1] / 2;
push @event, "3:roomTemp:" . sprintf "%0.1f", $db[1] / 2; push @event, "3:roomTemp:" . sprintf "%0.1f", $db[1] / 2;
CommandDeleteReading(undef, "$name feedTemp"); readingsDelete($hash, "feedTemp");
} }
my $setpoint = $db[3]; my $setpoint = $db[3];
push @event, "3:setpoint:$setpoint"; push @event, "3:setpoint:$setpoint";
@ -8753,7 +8753,7 @@ sub EnOcean_Parse($$) {
my $functionSelect = 0; my $functionSelect = 0;
my $setpointSelect = 0; my $setpointSelect = 0;
my $setpointSet = ReadingsVal($name, "setpointSetRestore", ReadingsVal($name, "setpointSet", $setpoint)); my $setpointSet = ReadingsVal($name, "setpointSetRestore", ReadingsVal($name, "setpointSet", $setpoint));
CommandDeleteReading(undef, "$name setpointSetRestore"); readingsDelete($hash, "setpointSetRestore");
my $setpointTemp = ReadingsVal($name, "setpointTemp", 20); my $setpointTemp = ReadingsVal($name, "setpointTemp", 20);
my $setpointTempSet = ReadingsVal($name, "setpointTempSet", $setpointTemp); my $setpointTempSet = ReadingsVal($name, "setpointTempSet", $setpointTemp);
my %setpointTempOffset = (0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 0x7B => -5, 0x7C => -4, 0x7D => -3, 0x7E => -2, 0x7F => -1); my %setpointTempOffset = (0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 0x7B => -5, 0x7C => -4, 0x7D => -3, 0x7E => -2, 0x7F => -1);
@ -8774,7 +8774,7 @@ sub EnOcean_Parse($$) {
my $temperature = ReadingsVal($name, 'temperature', $roomTemp); my $temperature = ReadingsVal($name, 'temperature', $roomTemp);
if (!defined(AttrVal($name, "temperatureRefDev", undef))) { if (!defined(AttrVal($name, "temperatureRefDev", undef))) {
if ($db[0] & 0x80) { if ($db[0] & 0x80) {
CommandDeleteReading(undef, "$name temperature"); readingsDelete($hash, "temperature");
} else { } else {
$temperature = $roomTemp; $temperature = $roomTemp;
readingsSingleUpdate($hash, 'temperature', sprintf("%0.1f", $temperature), 1); readingsSingleUpdate($hash, 'temperature', sprintf("%0.1f", $temperature), 1);
@ -8806,13 +8806,13 @@ sub EnOcean_Parse($$) {
# ignore all commands # ignore all commands
if ($waitingCmds ne "summerMode") { if ($waitingCmds ne "summerMode") {
$waitingCmds = "no_change"; $waitingCmds = "no_change";
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} }
$wakeUpCycle = 28800; $wakeUpCycle = 28800;
} }
readingsSingleUpdate($hash, 'wakeUpCycle', $wakeUpCycle, 1); readingsSingleUpdate($hash, 'wakeUpCycle', $wakeUpCycle, 1);
# set alarm timer # set alarm timer
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
if ($waitingCmds ne "standby") { if ($waitingCmds ne "standby") {
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm}); RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'no_response_from_actuator', 1, 3); @{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'no_response_from_actuator', 1, 3);
@ -8898,9 +8898,9 @@ sub EnOcean_Parse($$) {
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint"; push @event, "3:operationMode:setpoint";
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} elsif ($waitingCmds eq "setpointTemp") { } elsif ($waitingCmds eq "setpointTemp") {
@ -8919,8 +8919,8 @@ sub EnOcean_Parse($$) {
push @event, "3:setpointTemp:" . sprintf("%0.1f", $setpointTemp); push @event, "3:setpointTemp:" . sprintf("%0.1f", $setpointTemp);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpointTemp"; push @event, "3:operationMode:setpointTemp";
#CommandDeleteReading(undef, "$name setpointTempSet"); #readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} elsif ($waitingCmds eq "summerMode") { } elsif ($waitingCmds eq "summerMode") {
@ -8933,10 +8933,10 @@ sub EnOcean_Parse($$) {
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:summerMode"; push @event, "3:operationMode:summerMode";
#CommandDeleteReading(undef, "$name setpointSet"); #readingsDelete($hash, "setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); readingsDelete($hash, "setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$waitingCmds = 0; $waitingCmds = 0;
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
@ -9211,7 +9211,6 @@ sub EnOcean_Parse($$) {
} elsif ($st eq "vocSensor.01") { } elsif ($st eq "vocSensor.01") {
# Gas Sensor, VOC Sensor (EEP A5-09-05, A5-09-0C) # Gas Sensor, VOC Sensor (EEP A5-09-05, A5-09-0C)
# [untested]
# $db[3]_bit_7 ... $db[2]_bit_0 is the VOC concentration where 0 = 0 ppb ... 65535 = 65535 ppb # $db[3]_bit_7 ... $db[2]_bit_0 is the VOC concentration where 0 = 0 ppb ... 65535 = 65535 ppb
# $db[1] is the VOC identification # $db[1] is the VOC identification
# $db[0]_bit_1 ... $db[0]_bit_0 is the scale multiplier # $db[0]_bit_1 ... $db[0]_bit_0 is the scale multiplier
@ -9270,7 +9269,7 @@ sub EnOcean_Parse($$) {
push @event, "3:vocName:unknown"; push @event, "3:vocName:unknown";
} }
push @event, "3:concentration:$vocConc"; push @event, "3:concentration:$vocConc";
push @event, "3:concentrationUnit:" . $db[0] & 4 ? 'ug/m3' : 'ppb'; push @event, "1:concentrationUnit:" . ($db[0] & 4 ? 'ug/m3' : 'ppb');
push @event, "3:state:$vocConc"; push @event, "3:state:$vocConc";
} elsif ($st eq "particlesSensor.01") { } elsif ($st eq "particlesSensor.01") {
@ -9792,7 +9791,7 @@ sub EnOcean_Parse($$) {
push @event, "3:humidity:$humi"; push @event, "3:humidity:$humi";
push @event, "3:temperature:$temp"; push @event, "3:temperature:$temp";
push @event, "3:telegramType:" . ($db[0] & 1 ? "event" : "heartbeat"); push @event, "3:telegramType:" . ($db[0] & 1 ? "event" : "heartbeat");
CommandDeleteReading(undef, "$name alarm"); readingsDelete($hash, "alarm");
if (AttrVal($name, "signOfLife", 'off') eq 'on') { if (AttrVal($name, "signOfLife", 'off') eq 'on') {
RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm}); RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
@{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5); @{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'dead_sensor', 1, 5);
@ -9878,7 +9877,7 @@ sub EnOcean_Parse($$) {
push @event, "3:temperature:$temperature"; push @event, "3:temperature:$temperature";
} else { } else {
$temperature = '-'; $temperature = '-';
CommandDeleteReading(undef, "$name temperature"); readingsDelete($hash, "temperature");
} }
my $brightness; my $brightness;
if ($db[0] & 1) { if ($db[0] & 1) {
@ -9886,7 +9885,7 @@ sub EnOcean_Parse($$) {
push @event, "3:brightness:$brightness"; push @event, "3:brightness:$brightness";
} else { } else {
$brightness = '-'; $brightness = '-';
CommandDeleteReading(undef, "$name brightness"); readingsDelete($hash, "brightness");
} }
my $energyStorage = sprintf "%d", ($db[0] >> 4) * 100 / 15; my $energyStorage = sprintf "%d", ($db[0] >> 4) * 100 / 15;
my $battery; my $battery;
@ -11770,7 +11769,7 @@ sub EnOcean_Parse($$) {
$blinkInterval = $blinkInterval =~ m/^\d+$/ ? $blinkInterval : 0; $blinkInterval = $blinkInterval =~ m/^\d+$/ ? $blinkInterval : 0;
CommandDeleteReading(undef, "$name .*Set"); CommandDeleteReading(undef, "$name .*Set");
} }
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
$data = sprintf "80%02X%04X%02X", $waitingCmds, $updateInterval, $blinkInterval; $data = sprintf "80%02X%04X%02X", $waitingCmds, $updateInterval, $blinkInterval;
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});
#EnOcean_multisensor_01Snd($ctrl, $hash, $packetType); #EnOcean_multisensor_01Snd($ctrl, $hash, $packetType);
@ -12309,14 +12308,14 @@ sub EnOcean_Parse($$) {
if ($airQuatity <= 100) { if ($airQuatity <= 100) {
push @event, "3:airQuality1:$airQuatity"; push @event, "3:airQuality1:$airQuatity";
} else { } else {
CommandDeleteReading(undef, "$name airQuality1"); readingsDelete($hash, "airQuality1");
} }
push @event, "3:deviceMode:" . ($db[9] & 0x80 ? 'slave' : 'master'); push @event, "3:deviceMode:" . ($db[9] & 0x80 ? 'slave' : 'master');
$airQuatity = $db[9] & 0x7F; $airQuatity = $db[9] & 0x7F;
if ($airQuatity <= 100) { if ($airQuatity <= 100) {
push @event, "3:airQuality2:$airQuatity"; push @event, "3:airQuality2:$airQuatity";
} else { } else {
CommandDeleteReading(undef, "$name airQuality2"); readingsDelete($hash, "airQuality2");
} }
my $outdoorTemp = ($db[8] & 0xFE) >> 1; my $outdoorTemp = ($db[8] & 0xFE) >> 1;
#$outdoorTemp -= $outdoorTemp if ($outdoorTemp & 0x40); #$outdoorTemp -= $outdoorTemp if ($outdoorTemp & 0x40);
@ -12410,7 +12409,7 @@ sub EnOcean_Parse($$) {
push @event, "3:loadLink:" . ($db[1] & 16 ? "connected" : "disconnected"); push @event, "3:loadLink:" . ($db[1] & 16 ? "connected" : "disconnected");
push @event, "3:loadOperation:3-wire"; push @event, "3:loadOperation:3-wire";
push @event, "3:loadState:" . ($db[1] & 64 ? "on" : "off"); push @event, "3:loadState:" . ($db[1] & 64 ? "on" : "off");
CommandDeleteReading(undef, "$name getParam"); readingsDelete($hash, "getParam");
} elsif ($getParam == 7) { } elsif ($getParam == 7) {
if ($db[0] & 4) { if ($db[0] & 4) {
push @event, "3:devTempState:warning"; push @event, "3:devTempState:warning";
@ -12425,17 +12424,17 @@ sub EnOcean_Parse($$) {
} else { } else {
push @event, "3:devTemp:" . $db[1]; push @event, "3:devTemp:" . $db[1];
} }
CommandDeleteReading(undef, "$name getParam"); readingsDelete($hash, "getParam");
} elsif ($getParam == 9) { } elsif ($getParam == 9) {
push @event, "3:voltage:" . sprintf("%.2f", (hex(substr($data, 4, 4)) * 0.01)); push @event, "3:voltage:" . sprintf("%.2f", (hex(substr($data, 4, 4)) * 0.01));
CommandDeleteReading(undef, "$name getParam"); readingsDelete($hash, "getParam");
} elsif ($getParam == 0x81) { } elsif ($getParam == 0x81) {
$hash->{READINGS}{serialNumber}{VAL} = substr($data, 4, 4); $hash->{READINGS}{serialNumber}{VAL} = substr($data, 4, 4);
$hash->{READINGS}{getParam}{VAL} = 0x82; $hash->{READINGS}{getParam}{VAL} = 0x82;
EnOcean_SndRadio(undef, $hash, $packetType, "D1", "033182", AttrVal($name, "subDef", "00000000"), "00", $hash->{DEF}); EnOcean_SndRadio(undef, $hash, $packetType, "D1", "033182", AttrVal($name, "subDef", "00000000"), "00", $hash->{DEF});
} elsif ($getParam == 0x82) { } elsif ($getParam == 0x82) {
push @event, "3:serialNumber:" . $hash->{READINGS}{serialNumber}{VAL} . substr($data, 4, 4); push @event, "3:serialNumber:" . $hash->{READINGS}{serialNumber}{VAL} . substr($data, 4, 4);
CommandDeleteReading(undef, "$name getParam"); readingsDelete($hash, "getParam");
} }
} }
} elsif ($manufID eq "046") { } elsif ($manufID eq "046") {
@ -14629,7 +14628,7 @@ sub EnOcean_Notify(@) {
$modules{EnOcean}{defptr}{$attr{$name}{remoteID}} = $hash; $modules{EnOcean}{defptr}{$attr{$name}{remoteID}} = $hash;
} }
if (AttrVal($name ,"subType", "") eq "roomCtrlPanel.00") { if (AttrVal($name ,"subType", "") eq "roomCtrlPanel.00") {
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} }
if (exists $attr{$name}{subType}) { if (exists $attr{$name}{subType}) {
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
@ -14657,7 +14656,7 @@ sub EnOcean_Notify(@) {
$modules{EnOcean}{defptr}{$attr{$name}{remoteID}} = $hash; $modules{EnOcean}{defptr}{$attr{$name}{remoteID}} = $hash;
} }
if (AttrVal($name ,"subType", "") eq "roomCtrlPanel.00") { if (AttrVal($name ,"subType", "") eq "roomCtrlPanel.00") {
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} }
if (exists $attr{$name}{subType}) { if (exists $attr{$name}{subType}) {
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
@ -15202,7 +15201,6 @@ sub EnOcean_calcPID($) {
my $dPortion = ReadingsVal($name, 'p_d', ""); my $dPortion = ReadingsVal($name, 'p_d', "");
my $stateStr = ""; my $stateStr = "";
readingsDelete($hash, 'pidAlarm'); readingsDelete($hash, 'pidAlarm');
#CommandDeleteReading(undef, "$name pidAlarm");
my $deltaOld = ReadingsVal($name, 'delta', 0); my $deltaOld = ReadingsVal($name, 'delta', 0);
my $delta = ""; my $delta = "";
my $deltaGradient = $hash->{helper}{deltaGradient} ? $hash->{helper}{deltaGradient} : 0; my $deltaGradient = $hash->{helper}{deltaGradient} ? $hash->{helper}{deltaGradient} : 0;
@ -15552,9 +15550,7 @@ EnOcean_roomCtrlPanel_00Snd($$$$$$$$)
} }
# generate command to Room Control Panel (EEP D2-10-xx) # generate command to Room Control Panel (EEP D2-10-xx)
sub sub EnOcean_roomCtrlPanel_00Cmd($$$$) {
EnOcean_roomCtrlPanel_00Cmd($$$$)
{
my ($ctrl, $hash, $mcf, $messagePart) = @_; my ($ctrl, $hash, $mcf, $messagePart) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $data = "0000"; my $data = "0000";
@ -15581,22 +15577,22 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
if (defined ReadingsVal($name, "setpointComfortTempSet", undef)) { if (defined ReadingsVal($name, "setpointComfortTempSet", undef)) {
$db1 = ReadingsVal($name, "setpointComfortTempSet", 0) * 255 / 40; $db1 = ReadingsVal($name, "setpointComfortTempSet", 0) * 255 / 40;
$db0 = $db0 | 1; $db0 = $db0 | 1;
CommandDeleteReading(undef, "$name setpointComfortTempSet"); readingsDelete($hash, "setpointComfortTempSet");
} }
if (defined ReadingsVal($name, "setpointEconomyTempSet", undef)) { if (defined ReadingsVal($name, "setpointEconomyTempSet", undef)) {
$db2 = ReadingsVal($name, "setpointEconomyTempSet", 0) * 255 / 40; $db2 = ReadingsVal($name, "setpointEconomyTempSet", 0) * 255 / 40;
$db0 = $db0 | 2; $db0 = $db0 | 2;
CommandDeleteReading(undef, "$name setpointEconomyTempSet"); readingsDelete($hash, "setpointEconomyTempSet");
} }
if (defined ReadingsVal($name, "setpointPreComfortTempSet", undef)) { if (defined ReadingsVal($name, "setpointPreComfortTempSet", undef)) {
$db3 = ReadingsVal($name, "setpointPreComfortTempSet", 0) * 255 / 40; $db3 = ReadingsVal($name, "setpointPreComfortTempSet", 0) * 255 / 40;
$db0 = $db0 | 4; $db0 = $db0 | 4;
CommandDeleteReading(undef, "$name setpointPreComfortTempSet"); readingsDelete($hash, "setpointPreComfortTempSet");
} }
if (defined ReadingsVal($name, "setpointBuildingProtectionTempSet", undef)) { if (defined ReadingsVal($name, "setpointBuildingProtectionTempSet", undef)) {
$db4 = ReadingsVal($name, "setpointBuildingProtectionTempSet", 0) * 255 / 40; $db4 = ReadingsVal($name, "setpointBuildingProtectionTempSet", 0) * 255 / 40;
$db0 = $db0 | 8; $db0 = $db0 | 8;
CommandDeleteReading(undef, "$name setpointBuildingProtectionTempSet"); readingsDelete($hash, "setpointBuildingProtectionTempSet");
} }
$data = sprintf "%02X%02X%02X%02X%02X%02X", $db5, $db4, $db3, $db2, $db1, $db0; $data = sprintf "%02X%02X%02X%02X%02X%02X", $db5, $db4, $db3, $db2, $db1, $db0;
# clear command # clear command
@ -15688,7 +15684,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
if (defined ReadingsVal($name, "setpointTempSet", undef)) { if (defined ReadingsVal($name, "setpointTempSet", undef)) {
$db1 = ReadingsVal($name, "setpointTempSet", 0) * 255 / 40; $db1 = ReadingsVal($name, "setpointTempSet", 0) * 255 / 40;
$db2 |= 2; $db2 |= 2;
CommandDeleteReading(undef, "$name setpointTempSet"); readingsDelete($hash, "setpointTempSet");
} }
my $heatingSet; my $heatingSet;
@ -15707,7 +15703,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
$heatingSet = 3; $heatingSet = 3;
} }
$db2 |= $heatingSet << 4; $db2 |= $heatingSet << 4;
CommandDeleteReading(undef, "$name heatingSet"); readingsDelete($hash, "heatingSet");
my $coolingSet; my $coolingSet;
if (defined ReadingsVal($name, "coolingSet", undef)) { if (defined ReadingsVal($name, "coolingSet", undef)) {
@ -15725,7 +15721,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
$coolingSet = 3; $coolingSet = 3;
} }
$db2 |= $coolingSet << 6; $db2 |= $coolingSet << 6;
CommandDeleteReading(undef, "$name coolingSet"); readingsDelete($hash, "coolingSet");
my $roomCtrlModeSet; my $roomCtrlModeSet;
if (defined ReadingsVal($name, "roomCtrlModeSet", undef)) { if (defined ReadingsVal($name, "roomCtrlModeSet", undef)) {
@ -15743,7 +15739,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
$roomCtrlModeSet = 3; $roomCtrlModeSet = 3;
} }
$db2 |= $roomCtrlModeSet << 2; $db2 |= $roomCtrlModeSet << 2;
CommandDeleteReading(undef, "$name roomCtrlModeSet"); readingsDelete($hash, "roomCtrlModeSet");
my $windowSet; my $windowSet;
if (defined ReadingsVal($name, "windowSet", undef)) { if (defined ReadingsVal($name, "windowSet", undef)) {
@ -15761,7 +15757,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
$windowSet = 3; $windowSet = 3;
} }
$db4 |= $windowSet; $db4 |= $windowSet;
CommandDeleteReading(undef, "$name windowSet"); readingsDelete($hash, "windowSet");
my $fanSpeedModeSet; my $fanSpeedModeSet;
if (defined ReadingsVal($name, "fanSpeedModeSet", undef)) { if (defined ReadingsVal($name, "fanSpeedModeSet", undef)) {
@ -15770,12 +15766,12 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
$fanSpeedModeSet = ReadingsVal($name, "fanSpeedMode", 0); $fanSpeedModeSet = ReadingsVal($name, "fanSpeedMode", 0);
} }
$db4 |= 64 if ($fanSpeedModeSet eq "local"); $db4 |= 64 if ($fanSpeedModeSet eq "local");
CommandDeleteReading(undef, "$name fanSpeedModeSet"); readingsDelete($hash, "fanSpeedModeSet");
if (defined ReadingsVal($name, "fanSpeedSet", undef)) { if (defined ReadingsVal($name, "fanSpeedSet", undef)) {
$db5 = ReadingsVal($name, "fanSpeedSet", 0); $db5 = ReadingsVal($name, "fanSpeedSet", 0);
$db4 |= 128; $db4 |= 128;
CommandDeleteReading(undef, "$name fanSpeedSet"); readingsDelete($hash, "fanSpeedSet");
} }
$data = sprintf "%02X%02X%02X%02X%02X%02X%02X%02X", $db7, $db6, $db5, $db4, $db3, $db2, $db1, $db0; $data = sprintf "%02X%02X%02X%02X%02X%02X%02X%02X", $db7, $db6, $db5, $db4, $db3, $db2, $db1, $db0;
@ -15884,7 +15880,7 @@ EnOcean_roomCtrlPanel_00Cmd($$$$)
} }
if ($waitingCmds == 0) { if ($waitingCmds == 0) {
CommandDeleteReading(undef, "$name waitingCmds"); readingsDelete($hash, "waitingCmds");
} else { } else {
readingsSingleUpdate($hash, "waitingCmds", $waitingCmds, 0); readingsSingleUpdate($hash, "waitingCmds", $waitingCmds, 0);
} }
@ -16358,8 +16354,7 @@ sub EnOcean_ReadingScaled($$$$)
} }
# Reorganize Strings # Reorganize Strings
sub EnOcean_ReorgList($) sub EnOcean_ReorgList($) {
{
my ($list) = @_; my ($list) = @_;
my @list = split("[ \t][ \t]*", $list); my @list = split("[ \t][ \t]*", $list);
my %list; my %list;
@ -16369,15 +16364,13 @@ sub EnOcean_ReorgList($)
} }
# EnOcean_Set called from sub InternalTimer() # EnOcean_Set called from sub InternalTimer()
sub EnOcean_TimerSet($) sub EnOcean_TimerSet($) {
{
my ($par) = @_; my ($par) = @_;
EnOcean_Set($par->{hash}, @{$par->{timerCmd}}); EnOcean_Set($par->{hash}, @{$par->{timerCmd}});
} }
# #
sub EnOcean_InternalTimer($$$$$) sub EnOcean_InternalTimer($$$$$) {
{
my ($modifier, $tim, $callback, $hash, $waitIfInitNotDone) = @_; my ($modifier, $tim, $callback, $hash, $waitIfInitNotDone) = @_;
my $mHash = {}; my $mHash = {};
my $timerName = "$hash->{NAME}_$modifier"; my $timerName = "$hash->{NAME}_$modifier";
@ -16399,8 +16392,7 @@ sub EnOcean_InternalTimer($$$$$)
} }
# #
sub EnOcean_RemoveInternalTimer($$) sub EnOcean_RemoveInternalTimer($$) {
{
my ($modifier, $hash) = @_; my ($modifier, $hash) = @_;
my $mHash = {}; my $mHash = {};
my $timerName = "$hash->{NAME}_$modifier"; my $timerName = "$hash->{NAME}_$modifier";
@ -16418,8 +16410,7 @@ sub EnOcean_RemoveInternalTimer($$)
} }
# #
sub EnOcean_observeInit($$@) sub EnOcean_observeInit($$@) {
{
#init observe #init observe
my ($ctrl, $hash, @cmdValue) = @_; my ($ctrl, $hash, @cmdValue) = @_;
my ($err, $name) = (undef, $hash->{NAME}); my ($err, $name) = (undef, $hash->{NAME});
@ -16456,8 +16447,7 @@ sub EnOcean_observeInit($$@)
} }
# #
sub EnOcean_observeParse($$@) sub EnOcean_observeParse($$@) {
{
# observe acknowledge # observe acknowledge
my ($ctrl, $hash, @cmdValue) = @_; my ($ctrl, $hash, @cmdValue) = @_;
my ($err, $name) = (undef, $hash->{NAME}); my ($err, $name) = (undef, $hash->{NAME});
@ -16515,8 +16505,7 @@ sub EnOcean_observeParse($$@)
} }
# #
sub EnOcean_observeRepeat($) sub EnOcean_observeRepeat($) {
{
#timer expires without acknowledgment telegram, repeat command #timer expires without acknowledgment telegram, repeat command
my ($functionHash) = @_; my ($functionHash) = @_;
my $hash = $functionHash->{hash}; my $hash = $functionHash->{hash};
@ -16736,15 +16725,14 @@ sub EnOcean_RLTResult($$$$) {
readingsBulkUpdate($hash, 'rssiMasterAvg', (sprintf "%0.1f", $rssiMasterAvg / $msgCntr)); readingsBulkUpdate($hash, 'rssiMasterAvg', (sprintf "%0.1f", $rssiMasterAvg / $msgCntr));
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
} else { } else {
CommandDeleteReading(undef, "$name msgLost"); readingsDelete($hash, "msgLost");
CommandDeleteReading(undef, "$name rssiMasterAvg"); readingsDelete($hash, "rssiMasterAvg");
} }
return ($err, $logLevel, $response); return ($err, $logLevel, $response);
} }
# #
sub EnOcean_energyManagement_01Parse($@) sub EnOcean_energyManagement_01Parse($@) {
{
my ($hash, @db) = @_; my ($hash, @db) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
# [drLevel] = 15 : no requests for reduction in power consumptions # [drLevel] = 15 : no requests for reduction in power consumptions
@ -16793,7 +16781,7 @@ sub EnOcean_energyManagement_01Parse($@)
$month = $month < 10 ? $ month = "0". $month : $month; $month = $month < 10 ? $ month = "0". $month : $month;
readingsBulkUpdate($hash, "timeout", "$year-$month-$day $hour:$min:$sec"); readingsBulkUpdate($hash, "timeout", "$year-$month-$day $hour:$min:$sec");
} else { } else {
CommandDeleteReading(undef, "$name timeout"); readingsDelete($hash, "timeout");
} }
if ($randomStart eq "yes" && ReadingsVal($name, "level", 15) == 15) { if ($randomStart eq "yes" && ReadingsVal($name, "level", 15) == 15) {
readingsBulkUpdate($hash, "state", "waiting_for_start"); readingsBulkUpdate($hash, "state", "waiting_for_start");
@ -16811,8 +16799,7 @@ sub EnOcean_energyManagement_01Parse($@)
} }
# #
sub EnOcean_demandResponseExec($) sub EnOcean_demandResponseExec($) {
{
my ($functionHash) = @_; my ($functionHash) = @_;
my $function = $functionHash->{function}; my $function = $functionHash->{function};
my $hash = $functionHash->{hash}; my $hash = $functionHash->{hash};
@ -16862,8 +16849,7 @@ sub EnOcean_demandResponseExec($)
} }
# #
sub EnOcean_demandResponseTimeout($) sub EnOcean_demandResponseTimeout($) {
{
my ($functionHash) = @_; my ($functionHash) = @_;
my $function = $functionHash->{function}; my $function = $functionHash->{function};
my $hash = $functionHash->{hash}; my $hash = $functionHash->{hash};
@ -16872,7 +16858,7 @@ sub EnOcean_demandResponseTimeout($)
my $data; my $data;
my $timeoutLevel = AttrVal($name, "demandRespTimeoutLevel", "max"); my $timeoutLevel = AttrVal($name, "demandRespTimeoutLevel", "max");
RemoveInternalTimer($functionHash); RemoveInternalTimer($functionHash);
CommandDeleteReading(undef, "$name timeout"); readingsDelete($hash, "timeout");
my $drLevel = 15; my $drLevel = 15;
my $powerUsage = 100; my $powerUsage = 100;
my $powerUsageLevel = "max"; my $powerUsageLevel = "max";