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

10_EnOcean: PID: readings parameter variable

git-svn-id: https://svn.fhem.de/fhem/trunk@22959 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klaus.schauer 2020-10-12 15:20:29 +00:00
parent 81c2c243a8
commit 408def515c

View File

@ -1,13 +1,4 @@
# $Id$ # $Id$
# 2020-09-28
# Added new EEP:
# Remote Management:
# EEP changed: environmentApp: windStrength calculation corrected, readings renamed
# GP changed:
# Secure:
# EnOcean_Notify():
# EnOcean_Attr():
# commandref: further explanations added
package main; package main;
use strict; use strict;
@ -1128,7 +1119,7 @@ sub EnOcean_Define($$) {
# device specific actions # device specific actions
if (exists($attr{$name}{subType}) && $attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if (exists($attr{$name}{subType}) && $attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# pid parameter # pid parameter
@{$hash->{helper}{calcPID}} = (undef, $hash, 'defined', ''); @{$hash->{helper}{calcPID}} = (undef, $hash, 'defined', '', 'temperature', 'setpoint', 'Temp');
$hash->{helper}{stopped} = 0; $hash->{helper}{stopped} = 0;
#delete $hash->{helper}{adjust}; #delete $hash->{helper}{adjust};
} }
@ -2847,7 +2838,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
@ -2866,7 +2857,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# 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'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
@ -2881,7 +2872,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
@ -2905,7 +2896,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
@ -2924,7 +2915,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# 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'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
@ -2938,7 +2929,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd"; Log3 $name, 3, "EnOcean set $name $cmd";
@ -2964,7 +2955,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]"; Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a); shift(@a);
@ -2983,7 +2974,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# 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'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp"; Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a); shift(@a);
@ -2998,7 +2989,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd); readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0); readingsEndUpdate($hash, 0);
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
CommandDeleteReading(undef, "$name alarm"); CommandDeleteReading(undef, "$name alarm");
@ -8012,7 +8003,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') { if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open # valve will be closed if the window is open
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8028,7 +8019,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "valveOpens") { } elsif ($waitingCmds eq "valveOpens") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8067,14 +8058,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 0x10; $waitingCmds = 0x10;
} }
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") { } elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8093,7 +8084,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "liftSet") { } elsif ($waitingCmds eq "liftSet") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8112,7 +8103,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") { } elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100; $setpointSet = 100;
$db[2] = 0x20; $db[2] = 0x20;
@ -8134,7 +8125,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") { } elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
$db[2] = 0x20; $db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8145,11 +8136,11 @@ sub EnOcean_Parse($$)
} else { } else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') { if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint); $setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else { } else {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature # setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40; $setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4; $setpointSelect = 4;
@ -8165,7 +8156,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") { } elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8182,7 +8173,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100; $setpointSet = 100;
$db[2] = 0x20; $db[2] = 0x20;
@ -8201,7 +8192,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") { } elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
$db[2] = 0x20; $db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8212,11 +8203,11 @@ sub EnOcean_Parse($$)
} else { } else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') { if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet); $setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else { } else {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature # setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40; $setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4; $setpointSelect = 4;
@ -8231,7 +8222,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") { } elsif ($operationMode eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = $setpointSummerMode; $setpointSet = $setpointSummerMode;
$db[2] = (40 - $temperature) * 255 / 40; $db[2] = (40 - $temperature) * 255 / 40;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8241,7 +8232,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveOpend:runInit") { } elsif ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
$db[2] = 0x20; $db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8256,7 +8247,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveClosed") { } elsif ($maintenanceMode eq "valveClosed") {
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 0; $setpointSet = 0;
$db[2] = 0x20; $db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8419,7 +8410,7 @@ sub EnOcean_Parse($$)
if ($waitingCmds eq "valveOpens") { if ($waitingCmds eq "valveOpens") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit"; push @event, "3:maintenanceMode:valveOpend:runInit";
@ -8446,14 +8437,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 3; $waitingCmds = 3;
} }
# stop PID regulator # stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet"); CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp"); CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") { } elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit"; push @event, "3:maintenanceMode:runInit";
@ -8466,7 +8457,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") { } elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8486,7 +8477,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") { } elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit"; push @event, "3:maintenanceMode:runInit";
@ -8494,7 +8485,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2; $waitingCmds = 2;
} else { } else {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint); $setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
$setpointTemp = $setpointTempSet; $setpointTemp = $setpointTempSet;
push @event, "3:setpointTemp:$setpointTemp"; push @event, "3:setpointTemp:$setpointTemp";
@ -8508,7 +8499,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") { } elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
@ -8521,7 +8512,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8541,7 +8532,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") { } elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") { if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
@ -8549,7 +8540,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2; $waitingCmds = 2;
} else { } else {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet); $setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
push @event, "3:setpointTemp:$setpointTemp"; push @event, "3:setpointTemp:$setpointTemp";
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
@ -8562,7 +8553,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") { } elsif ($operationMode eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100; $setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
@ -8724,7 +8715,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') { if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open # valve will be closed if the window is open
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8739,7 +8730,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "runInit") { } elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8752,7 +8743,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "standby") { } elsif ($waitingCmds eq "standby") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8766,7 +8757,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") { } elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($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"); CommandDeleteReading(undef, "$name setpointTemp");
@ -8777,11 +8768,11 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") { } elsif ($waitingCmds eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') { if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint); $setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else { } else {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature # setpoint temperature
$setpointSet = int($setpointTempSet * 2); $setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4; $setpointSelect = 4;
@ -8796,7 +8787,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") { } elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') { if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
} }
@ -8812,7 +8803,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") { } elsif ($operationMode eq "setpoint") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($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";
$waitingCmds = 0; $waitingCmds = 0;
@ -8820,11 +8811,11 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") { } elsif ($operationMode eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') { if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator # activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet); $setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else { } else {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature # setpoint temperature
$setpointSet = int($setpointTempSet * 2); $setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4; $setpointSelect = 4;
@ -8837,7 +8828,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") { } elsif ($operationMode eq "summerMode") {
# deactivate PID regulator # deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = $setpointSummerMode; $setpointSet = $setpointSummerMode;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1); readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off"; push @event, "3:maintenanceMode:off";
@ -13781,9 +13772,9 @@ sub EnOcean_Attr(@)
if (!defined $attrVal){ if (!defined $attrVal){
} elsif (lc($attrVal) eq "on") { } elsif (lc($attrVal) eq "on") {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature'); EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} elsif (lc($attrVal) eq "off") { } elsif (lc($attrVal) eq "off") {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
} else { } else {
$err = "attribute-value [$attrName] = $attrVal wrong"; $err = "attribute-value [$attrName] = $attrVal wrong";
} }
@ -14406,9 +14397,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior # control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') { if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature'); EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else { } else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
} }
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') { } elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef); @{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14432,9 +14423,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior # control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') { if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature'); EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else { } else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
} }
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') { } elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef); @{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14460,9 +14451,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) { if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior # control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') { if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature'); EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else { } else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature'); EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
} }
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') { } elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef); @{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14781,11 +14772,11 @@ EnOcean_Encapsulation($$$$)
} }
# set PID regulator # set PID regulator
sub EnOcean_setPID($$$$$) { sub EnOcean_setPID($$$$$$$) {
my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @_; my ($ctrl, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my ($err, $response, $logLevel) = (undef, 'start', 5); my ($err, $response, $logLevel) = (undef, 'start', 5);
@{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust, $actualVar); @{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar);
if ($cmd eq 'stop' || AttrVal($name, 'pidCtrl', 'on') eq 'off') { if ($cmd eq 'stop' || AttrVal($name, 'pidCtrl', 'on') eq 'off') {
$hash->{helper}{stopped} = 1; $hash->{helper}{stopped} = 1;
readingsSingleUpdate($hash, "pidState", 'stopped', 0); readingsSingleUpdate($hash, "pidState", 'stopped', 0);
@ -14803,7 +14794,7 @@ sub EnOcean_setPID($$$$$) {
# calc valve setpoint (PID regulator) # calc valve setpoint (PID regulator)
sub EnOcean_calcPID($) { sub EnOcean_calcPID($) {
my ($pidParam) = @_; my ($pidParam) = @_;
my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @$pidParam; my ($ctrl, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar) = @$pidParam;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my ($err, $response, $logLevel, $setpoint) = (undef, $cmd, 5, 0); my ($err, $response, $logLevel, $setpoint) = (undef, $cmd, 5, 0);
my $reUINT = '^([\\+]?\\d+)$'; # uint without whitespaces my $reUINT = '^([\\+]?\\d+)$'; # uint without whitespaces
@ -14814,9 +14805,9 @@ sub EnOcean_calcPID($) {
#my $sensor = $name; #my $sensor = $name;
#my $reading = $actualVar; #my $reading = $actualVar;
my $regexp = $reFloat; my $regexp = $reFloat;
my $actuation = ""; my $actuation = "";
my $actuationDone = ReadingsVal($name,'setpointSet', ReadingsVal($name, 'setpoint', "")); my $actuationDone = ReadingsVal($name, $actuationVar . 'Set', ReadingsVal($name, $actuationVar, ""));
my $actuationCalc = ReadingsVal($name, 'setpointCalc', ""); my $actuationCalc = ReadingsVal($name, $actuationVar . 'Calc', "");
my $actuationCalcOld = $actuationCalc; my $actuationCalcOld = $actuationCalc;
my $actorTimestamp = $hash->{helper}{actorTimestamp} ? $hash->{helper}{actorTimestamp} : FmtDateTime(gettimeofday() - 3600 * 24); my $actorTimestamp = $hash->{helper}{actorTimestamp} ? $hash->{helper}{actorTimestamp} : FmtDateTime(gettimeofday() - 3600 * 24);
my $desired = ''; my $desired = '';
@ -14831,7 +14822,7 @@ sub EnOcean_calcPID($) {
readingsDelete($hash, 'pidAlarm'); readingsDelete($hash, 'pidAlarm');
#CommandDeleteReading(undef, "$name 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;
my $calcReq = 0; my $calcReq = 0;
@ -14870,19 +14861,19 @@ sub EnOcean_calcPID($) {
last; last;
} }
$desired = ReadingsVal( $name, 'setpointTempSet', ReadingsVal($name, 'setpointTemp', "")); $desired = ReadingsVal( $name, 'setpoint' . $desiredVar . 'Set', ReadingsVal($name, 'setpoint' . $desiredVar, ""));
if ( !$sensorStr && !$stateStr ) { if (!$sensorStr && !$stateStr) {
$stateStr = "alarm"; $stateStr = "alarm";
$err = 'no_temperature_value'; $err = 'no_temperature_value';
} }
# sensor alive # sensor alive
if ( $sensorStr && $sensorTS ) { if ($sensorStr && $sensorTS) {
my $timeDiff = EnOcean_TimeDiff($sensorTS); my $timeDiff = EnOcean_TimeDiff($sensorTS);
$sensorIsAlive = 1 if ( $timeDiff <= $hash->{helper}{sensorTimeout} ); $sensorIsAlive = 1 if ($timeDiff <= $hash->{helper}{sensorTimeout});
$sensorStr =~ m/$regexp/; $sensorStr =~ m/$regexp/;
$sensorValue = $1; $sensorValue = $1;
$sensorValue = "" if ( !defined($sensorValue) ); $sensorValue = "" if (!defined($sensorValue));
} }
# sensor dead # sensor dead
@ -15029,13 +15020,13 @@ sub EnOcean_calcPID($) {
readingsBulkUpdate($hash, 'p_p', $pPortion) if ($pPortion ne ""); readingsBulkUpdate($hash, 'p_p', $pPortion) if ($pPortion ne "");
readingsBulkUpdate($hash, 'p_d', $dPortion) if ($dPortion ne ""); readingsBulkUpdate($hash, 'p_d', $dPortion) if ($dPortion ne "");
readingsBulkUpdate($hash, 'p_i', $iPortion) if ($iPortion ne ""); readingsBulkUpdate($hash, 'p_i', $iPortion) if ($iPortion ne "");
readingsBulkUpdate($hash, 'setpointCalc', $actuationCalc) if ($actuationCalc ne ""); readingsBulkUpdate($hash, $actuationVar . 'Calc', $actuationCalc) if ($actuationCalc ne "");
if ($actuationByThreshold) { if ($actuationByThreshold) {
readingsBulkUpdate($hash, 'setpointSet', $actuation) if ($actuation ne ""); readingsBulkUpdate($hash, $actuationVar . 'Set', $actuation) if ($actuation ne "");
$setpoint = $actuation; $setpoint = $actuation;
$actuationDone = $actuation; $actuationDone = $actuation;
} else { } else {
readingsBulkUpdate($hash, 'setpointSet', $actuationDone) if ($actuationDone ne ""); readingsBulkUpdate($hash, $actuationVar . 'Set', $actuationDone) if ($actuationDone ne "");
$setpoint = $actuationDone; $setpoint = $actuationDone;
} }
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
@ -15051,7 +15042,7 @@ sub EnOcean_calcPID($) {
readingsBulkUpdate($hash, 'pidAlarm', $err) if (defined $err); readingsBulkUpdate($hash, 'pidAlarm', $err) if (defined $err);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
Log3($name, 5, "EnOcean $name EnOcean_calcPID Cmd: $cmd pidState: $stateStr T: $sensorValue SP: $setpoint SPT: $desired"); Log3($name, 5, "EnOcean $name EnOcean_calcPID Cmd: $cmd pidState: $stateStr T: $sensorValue SP: $setpoint SPT: $desired");
@{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef, $actualVar); @{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef, $actualVar, $actuationVar, $desiredVar);
RemoveInternalTimer($hash->{helper}{calcPID}); RemoveInternalTimer($hash->{helper}{calcPID});
InternalTimer(gettimeofday() + $hash->{helper}{calcInterval} * 1.02, "EnOcean_calcPID", $hash->{helper}{calcPID}, 0); InternalTimer(gettimeofday() + $hash->{helper}{calcInterval} * 1.02, "EnOcean_calcPID", $hash->{helper}{calcPID}, 0);
return ($err, $logLevel, $response); return ($err, $logLevel, $response);