From 4aea89fd8c940e609f28361d37f5a4ebb70fc937 Mon Sep 17 00:00:00 2001
From: "klaus.schauer" <>
Date: Mon, 28 Sep 2020 17:49:27 +0000
Subject: [PATCH] 10_EnOcean: environmentApp: windStrength calculation
corrected, readings renamed
git-svn-id: https://svn.fhem.de/fhem/trunk@22876 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/10_EnOcean.pm | 342 ++++++++++++++++------------------------
1 file changed, 135 insertions(+), 207 deletions(-)
diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm
index 25b8bc06b..19226ccea 100755
--- a/fhem/FHEM/10_EnOcean.pm
+++ b/fhem/FHEM/10_EnOcean.pm
@@ -1,4 +1,13 @@
# $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;
use strict;
@@ -2838,7 +2847,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@@ -2857,7 +2866,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@@ -2872,7 +2881,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd";
@@ -2896,7 +2905,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@@ -2915,7 +2924,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'on') eq 'on' ? 'start' : 'stop';
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@@ -2929,7 +2938,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd";
@@ -2955,7 +2964,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@@ -2974,7 +2983,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@@ -2989,7 +2998,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
CommandDeleteReading(undef, "$name alarm");
@@ -8003,7 +8012,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8019,7 +8028,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "valveOpens") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8058,14 +8067,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 0x10;
}
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8084,7 +8093,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "liftSet") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8103,7 +8112,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
$db[2] = 0x20;
@@ -8125,7 +8134,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8136,11 +8145,11 @@ sub EnOcean_Parse($$)
} else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
# setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4;
@@ -8156,7 +8165,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8173,7 +8182,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
$db[2] = 0x20;
@@ -8192,7 +8201,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8203,11 +8212,11 @@ sub EnOcean_Parse($$)
} else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
# setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4;
@@ -8222,7 +8231,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = $setpointSummerMode;
$db[2] = (40 - $temperature) * 255 / 40;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8232,7 +8241,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8247,7 +8256,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveClosed") {
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 0;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8410,7 +8419,7 @@ sub EnOcean_Parse($$)
if ($waitingCmds eq "valveOpens") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit";
@@ -8437,14 +8446,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 3;
}
# stop PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit";
@@ -8457,7 +8466,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8477,7 +8486,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit";
@@ -8485,7 +8494,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2;
} else {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
$setpointTemp = $setpointTempSet;
push @event, "3:setpointTemp:$setpointTemp";
@@ -8499,7 +8508,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@@ -8512,7 +8521,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@@ -8532,7 +8541,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@@ -8540,7 +8549,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2;
} else {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
push @event, "3:setpointTemp:$setpointTemp";
push @event, "3:maintenanceMode:off";
@@ -8553,7 +8562,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@@ -8715,7 +8724,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8730,7 +8739,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8743,7 +8752,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "standby") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8757,7 +8766,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint";
CommandDeleteReading(undef, "$name setpointTemp");
@@ -8768,11 +8777,11 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
# setpoint temperature
$setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4;
@@ -8787,7 +8796,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@@ -8803,7 +8812,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint";
$waitingCmds = 0;
@@ -8811,11 +8820,11 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
# setpoint temperature
$setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4;
@@ -8828,7 +8837,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
- ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef);
+ ($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
$setpointSet = $setpointSummerMode;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@@ -10274,7 +10283,7 @@ sub EnOcean_Parse($$)
my $isRaining = $db[0] & 2 ? "yes" : "no";
my @windStrength = (0.2, 1.5, 3.3, 5.4, 7.9, 10.7, 13.8, 17.1, 20.7, 24.4, 28.4, 32.6);
my $windStrength = 0;
- while($windSpeed > $windStrength[$windStrength] && $windStrength <= @windStrength + 1) {
+ while($windSpeed > $windStrength[$windStrength] && $windStrength < @windStrength) {
$windStrength ++;
}
push @event, "3:dayNight:$dayNight";
@@ -10331,8 +10340,8 @@ sub EnOcean_Parse($$)
} elsif ($identifier == 5) {
# Direction exchange (EEP A5-13-05)
my $elevation = $db[3] - 90;
- push @event, "3:elevation:$elevation";
- push @event, "3:azimuth:" . hex(substr($data, 2, 4));
+ push @event, "3:sunElevation:$elevation";
+ push @event, "3:sunAzimuth:" . hex(substr($data, 2, 4));
my $twilight = ($elevation + 12) / 18 * 100;
$twilight = 0 if ($twilight < 0);
$twilight = 100 if ($twilight > 100);
@@ -13772,9 +13781,9 @@ sub EnOcean_Attr(@)
if (!defined $attrVal){
} elsif (lc($attrVal) eq "on") {
- EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef));
+ EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
} elsif (lc($attrVal) eq "off") {
- EnOcean_setPID(undef, $hash, 'stop', undef);
+ EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
} else {
$err = "attribute-value [$attrName] = $attrVal wrong";
}
@@ -14397,9 +14406,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
- EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef));
+ EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
} else {
- EnOcean_setPID(undef, $hash, 'stop', undef);
+ EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@@ -14423,9 +14432,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
- EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef));
+ EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
} else {
- EnOcean_setPID(undef, $hash, 'stop', undef);
+ EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@@ -14451,9 +14460,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
- EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef));
+ EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
} else {
- EnOcean_setPID(undef, $hash, 'stop', undef);
+ EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@@ -14772,11 +14781,11 @@ EnOcean_Encapsulation($$$$)
}
# set PID regulator
-sub EnOcean_setPID($$$$) {
- my ($ctrl, $hash, $cmd, $adjust) = @_;
+sub EnOcean_setPID($$$$$) {
+ my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @_;
my $name = $hash->{NAME};
my ($err, $response, $logLevel) = (undef, 'start', 5);
- @{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust);
+ @{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust, $actualVar);
if ($cmd eq 'stop' || AttrVal($name, 'pidCtrl', 'on') eq 'off') {
$hash->{helper}{stopped} = 1;
readingsSingleUpdate($hash, "pidState", 'stopped', 0);
@@ -14794,7 +14803,7 @@ sub EnOcean_setPID($$$$) {
# calc valve setpoint (PID regulator)
sub EnOcean_calcPID($) {
my ($pidParam) = @_;
- my ($ctrl, $hash, $cmd, $adjust) = @$pidParam;
+ my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @$pidParam;
my $name = $hash->{NAME};
my ($err, $response, $logLevel, $setpoint) = (undef, $cmd, 5, 0);
my $reUINT = '^([\\+]?\\d+)$'; # uint without whitespaces
@@ -14802,53 +14811,45 @@ sub EnOcean_calcPID($) {
my $reINT = '^([\\+,\\-]?\\d+$)'; # int
my $reFloatpos = '^([\\+]?\\d+\\.?\d*$)'; # gleitpunkt positiv float
my $reFloat = '^([\\+,\\-]?\\d+\\.?\d*$)'; # float
- my $sensor = $name;
- my $reading = 'temperature';
+ #my $sensor = $name;
+ #my $reading = $actualVar;
my $regexp = $reFloat;
- my $DEBUG_Sensor = AttrVal( $name, 'pidDebugSensor', '0' ) eq '1';
- my $DEBUG_Actuation = AttrVal( $name, 'pidDebugActuation', '0' ) eq '1';
- my $DEBUG_Delta = AttrVal( $name, 'pidDebugDelta', '0' ) eq '1';
- my $DEBUG_Calc = AttrVal( $name, 'pidDebugCalc', '0' ) eq '1';
- my $DEBUG_Update = AttrVal( $name, 'pidDebugUpdate', '0' ) eq '1';
- my $DEBUG = $DEBUG_Sensor || $DEBUG_Actuation || $DEBUG_Calc || $DEBUG_Delta || $DEBUG_Update;
my $actuation = "";
my $actuationDone = ReadingsVal($name,'setpointSet', ReadingsVal($name, 'setpoint', ""));
my $actuationCalc = ReadingsVal($name, 'setpointCalc', "");
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 $sensorStr = ReadingsVal($name, 'temperature', "");
+ my $sensorStr = ReadingsVal($name, $actualVar, "");
my $sensorValue = "";
- my $sensorTS = ReadingsTimestamp($name, 'temperature', undef);
+ my $sensorTS = ReadingsTimestamp($name, $actualVar, undef);
my $sensorIsAlive = 0;
- my $iPortion = ReadingsVal( $name, 'p_i', 0 );
- my $pPortion = ReadingsVal( $name, 'p_p', "" );
- my $dPortion = ReadingsVal( $name, 'p_d', "" );
+ my $iPortion = ReadingsVal($name, 'p_i', 0);
+ my $pPortion = ReadingsVal($name, 'p_p', "");
+ my $dPortion = ReadingsVal($name, 'p_d', "");
my $stateStr = "";
- CommandDeleteReading(undef, "$name pidAlarm");
- my $deltaOld = ReadingsVal( $name, 'delta', 0 );
+ readingsDelete($hash, 'pidAlarm');
+ #CommandDeleteReading(undef, "$name pidAlarm");
+ my $deltaOld = ReadingsVal($name, 'delta', 0);
my $delta = "";
- my $deltaGradient = ( $hash->{helper}{deltaGradient} ) ? $hash->{helper}{deltaGradient} : 0;
- my $calcReq = 0;
+ my $deltaGradient = $hash->{helper}{deltaGradient} ? $hash->{helper}{deltaGradient} : 0;
+ my $calcReq = 0;
- # ---------------- check conditions
+ # check conditions
while (1) {
- # --------------- retrive values from attributes
+ # retrive values from attributes
my $wakeUpCycle = AttrVal($name, 'wakeUpCycle', ReadingsVal($name, 'wakeUpCycle', 300));
my $pidCycle = $wakeUpCycle / 3;
$pidCycle = 10 if ($pidCycle < 10);
$hash->{helper}{actorInterval} = 10;
#$hash->{helper}{actorThreshold} = 0;
- $hash->{helper}{actorThreshold} = AttrVal($name, 'pidActorTreshold', 1);
+ $hash->{helper}{actorThreshold} = AttrVal($name, 'pidActorTreshold', 1);
$hash->{helper}{actorKeepAlive} = $pidCycle;
$hash->{helper}{actorValueDecPlaces} = 0;
$hash->{helper}{actorErrorAction} = AttrVal($name, 'pidActorErrorAction', 'freeze');
- $hash->{helper}{actorErrorPos} = AttrVal($name, 'pidActorErrorPos', 0);
+ $hash->{helper}{actorErrorPos} = AttrVal($name, 'pidActorErrorPos', 0);
$hash->{helper}{calcInterval} = $pidCycle;
- $hash->{helper}{deltaTreshold} = AttrVal($name, 'pidDeltaTreshold', 0);
+ $hash->{helper}{deltaTreshold} = AttrVal($name, 'pidDeltaTreshold',0);
if (AttrVal($name, 'measurementCtrl', 'enable') eq 'enable') {
$hash->{helper}{sensorTimeout} = $wakeUpCycle * 4;
} else {
@@ -14870,31 +14871,18 @@ sub EnOcean_calcPID($) {
}
$desired = ReadingsVal( $name, 'setpointTempSet', ReadingsVal($name, 'setpointTemp', ""));
- #my $desired = ReadingsVal( $name, $hash->{helper}{desiredName}, "" );
-
- # sensor found
- #PID20_Log $hash, 2, "--------------------------" if ($DEBUG);
- #PID20_Log $hash, 2, "S1 sensorStr:$sensorStr sensorTS:$sensorTS" if ($DEBUG_Sensor);
if ( !$sensorStr && !$stateStr ) {
$stateStr = "alarm";
$err = 'no_temperature_value';
}
# sensor alive
- if ( $sensorStr && $sensorTS )
- {
+ if ( $sensorStr && $sensorTS ) {
my $timeDiff = EnOcean_TimeDiff($sensorTS);
$sensorIsAlive = 1 if ( $timeDiff <= $hash->{helper}{sensorTimeout} );
$sensorStr =~ m/$regexp/;
$sensorValue = $1;
$sensorValue = "" if ( !defined($sensorValue) );
- #PID20_Log $hash, 2,
- # "S2 timeOfDay:"
- # . gettimeofday()
- # . " timeDiff:$timeDiff sensorTimeout:"
- # . $hash->{helper}{sensorTimeout}
- # . " --> sensorIsAlive:$sensorIsAlive"
- # if ($DEBUG_Sensor);
}
# sensor dead
@@ -14910,22 +14898,14 @@ sub EnOcean_calcPID($) {
}
# check delta threshold
- $delta = ( $desired ne "" && $sensorValue ne "" ) ? $desired - $sensorValue : "";
- $calcReq = 1 if ( !$stateStr && $delta ne "" && ( abs($delta) >= abs( $hash->{helper}{deltaTreshold} ) ) );
-
- #PID20_Log $hash, 2,
- # "D1 desired[" . ( $desired ne "" ) ? sprintf( "%.1f", $desired )
- # : "" . "] - sensorValue: [" . ( $sensorValue ne "" ) ? sprintf( "%.1f", $sensorValue )
- # : "" . "] = delta[" . ( $delta ne "" ) ? sprintf( "%.2f", $delta )
- # : "" . "] calcReq:$calcReq"
- # if ($DEBUG_Delta);
+ $delta = ($desired ne "" && $sensorValue ne "") ? $desired - $sensorValue : "";
+ $calcReq = 1 if (!$stateStr && $delta ne "" && (abs($delta) >= abs($hash->{helper}{deltaTreshold})));
#request for calculation
- # ---------------- calculation request
if ($calcReq) {
# reverse action requested
- my $workDelta = ( $hash->{helper}{reverseAction} == 1 ) ? -$delta : $delta;
- my $deltaOld = -$deltaOld if ( $hash->{helper}{reverseAction} == 1 );
+ my $workDelta = ($hash->{helper}{reverseAction} == 1) ? -$delta : $delta;
+ my $deltaOld = -$deltaOld if ($hash->{helper}{reverseAction} == 1);
# calc p-portion
$pPortion = $workDelta * $hash->{helper}{factor_P};
@@ -14936,16 +14916,15 @@ sub EnOcean_calcPID($) {
# calc i-portion respecting windUp
# freeze i-portion if windUp is active
my $isWindup = $actuationCalcOld
- && ( ( $workDelta > 0 && $actuationCalcOld > $actorLimitUpper )
- || ( $workDelta < 0 && $actuationCalcOld < $actorLimitLower ) );
+ && (($workDelta > 0 && $actuationCalcOld > $actorLimitUpper)
+ || ($workDelta < 0 && $actuationCalcOld < $actorLimitLower));
$hash->{helper}{adjust} = $adjust if(defined $adjust);
if (defined $hash->{helper}{adjust}) {
- $iPortion = $hash->{helper}{adjust} - ( $pPortion + $dPortion );
- $iPortion = $actorLimitUpper if ( $iPortion > $actorLimitUpper );
- $iPortion = $actorLimitLower if ( $iPortion < $actorLimitLower );
- #PID20_Log $hash, 5, "adjust request with:" . $hash->{helper}{adjust} . " ==> p_i:$iPortion";
+ $iPortion = $hash->{helper}{adjust} - ($pPortion + $dPortion);
+ $iPortion = $actorLimitUpper if ($iPortion > $actorLimitUpper);
+ $iPortion = $actorLimitLower if ($iPortion < $actorLimitLower);
delete $hash->{helper}{adjust};
- } elsif ( !$isWindup ) # integrate only if no windUp
+ } elsif (!$isWindup) # integrate only if no windUp
{
# normalize the intervall to minute=60 seconds
$iPortion = $iPortion + $workDelta * $hash->{helper}{factor_I} * $hash->{helper}{calcInterval} / 60;
@@ -14955,39 +14934,22 @@ sub EnOcean_calcPID($) {
$hash->{helper}{isWindUP} = $isWindup;
# check callback for iPortion
- my $iportionCallBeforeSetting = AttrVal( $name, 'pidIPortionCallBeforeSetting', undef );
- if ( defined($iportionCallBeforeSetting) && exists &$iportionCallBeforeSetting )
- {
- #PID20_Log $hash, 5, 'start callback ' . $iportionCallBeforeSetting . ' with iPortion:' . $iPortion;
+ my $iportionCallBeforeSetting = AttrVal($name, 'pidIPortionCallBeforeSetting', undef);
+ if (defined($iportionCallBeforeSetting) && exists &$iportionCallBeforeSetting) {
no strict "refs";
- $iPortion = &$iportionCallBeforeSetting( $name, $iPortion );
+ $iPortion = &$iportionCallBeforeSetting($name, $iPortion);
use strict "refs";
- #PID20_Log $hash, 5, 'return value of ' . $iportionCallBeforeSetting . ':' . $iPortion;
}
# calc actuation
$actuationCalc = $pPortion + $iPortion + $dPortion;
-
- #PID20_Log $hash, 2, "P1 delta:" . sprintf( "%.2f", $delta ) . " isWindup:$isWindup" if ($DEBUG_Calc);
-
- #PID20_Log $hash, 2,
- # "P2 pPortion:"
- # . sprintf( "%.2f", $pPortion )
- # . " iPortion:"
- # . sprintf( "%.2f", $iPortion )
- # . " dPortion:"
- # . sprintf( "%.2f", $dPortion )
- # . " actuationCalc:"
- # . sprintf( "%.2f", $actuationCalc )
- # if ($DEBUG_Calc);
}
- # ---------------- acutation request
- my $noTrouble = ( $desired ne "" && $sensorIsAlive );
+ # acutation request
+ my $noTrouble = ($desired ne "" && $sensorIsAlive);
# check actor fallback in case of sensor fault
if (!$sensorIsAlive && ($hash->{helper}{actorErrorAction} eq "errorPos")) {
- #$stateStr .= "- force pid-output to errorPos";
$err .= ':actuator_in_errorPos';
$actuationCalc = $hash->{helper}{actorErrorPos};
$actuationCalc = "" if ( !defined($actuationCalc) );
@@ -14997,25 +14959,19 @@ sub EnOcean_calcPID($) {
$actuation = $actuationCalc;
# limit $actuation
- $actuation = $actorLimitUpper if ( $actuation ne "" && ( $actuation > $actorLimitUpper ) );
- $actuation = $actorLimitLower if ( $actuation ne "" && ( $actuation < $actorLimitLower ) );
+ $actuation = $actorLimitUpper if ($actuation ne "" && ($actuation > $actorLimitUpper));
+ $actuation = $actorLimitLower if ($actuation ne "" && ($actuation < $actorLimitLower));
# check if round request
my $fmt = "%." . $hash->{helper}{actorValueDecPlaces} . "f";
- $actuation = sprintf( $fmt, $actuation ) if ( $actuation ne "" );
- my $actuationDiff = abs( $actuation - $actuationDone )
- if ( $actuation ne "" && $actuationDone ne "" );
- #PID20_Log $hash, 2,
- # "A1 act:$actuation actDone:$actuationDone "
- # . " actThreshold:"
- # . $hash->{helper}{actorThreshold}
- # . " actDiff:$actuationDiff"
- # if ($DEBUG_Actuation);
+ $actuation = sprintf($fmt, $actuation) if ($actuation ne "");
+ my $actuationDiff = abs($actuation - $actuationDone)
+ if ($actuation ne "" && $actuationDone ne "");
# check threshold-condition for actuation
my $rsTS = $actuationDone ne "" && $actuationDiff >= $hash->{helper}{actorThreshold};
- # ...... special handling if acutation is in the black zone between actorLimit and (actorLimit - actorThreshold)
+ # special handling if acutation is in the black zone between actorLimit and (actorLimit - actorThreshold)
# upper range
my $rsUp =
$actuationDone ne ""
@@ -15031,27 +14987,16 @@ sub EnOcean_calcPID($) {
&& $actuation <= $actorLimitLower;
# upper or lower limit are exceeded
- my $rsLimit = $actuationDone ne "" && ( $actuationDone < $actorLimitLower || $actuationDone > $actorLimitUpper );
-
- my $actuationByThreshold = (( $rsTS || $rsUp || $rsDown) && $noTrouble);
- #PID20_Log $hash, 2, "A2 rsTS:$rsTS rsUp:$rsUp rsDown:$rsDown noTrouble:$noTrouble"
- # if ($DEBUG_Actuation);
+ my $rsLimit = $actuationDone ne "" && ($actuationDone < $actorLimitLower || $actuationDone > $actorLimitUpper);
+ my $actuationByThreshold = (($rsTS || $rsUp || $rsDown) && $noTrouble);
# check time condition for actuation
my $actTimeDiff = EnOcean_TimeDiff($actorTimestamp); # $actorTimestamp is valid in each case
- my $actuationByTime = ($noTrouble) && ( $actTimeDiff > $hash->{helper}{actorInterval} );
- #PID20_Log $hash, 2,
- # "A3 actTS:$actorTimestamp"
- # . " actTimeDiff:"
- # . sprintf( "%.2f", $actTimeDiff )
- # . " actInterval:"
- # . $hash->{helper}{actorInterval}
- # . "-->actByTime:$actuationByTime "
- # if ($DEBUG_Actuation);
+ my $actuationByTime = ($noTrouble) && ($actTimeDiff > $hash->{helper}{actorInterval});
# check keep alive condition for actuation
- my $actuationKeepAliveReq = ( $actTimeDiff >= $hash->{helper}{actorKeepAlive} )
- if ( defined($actTimeDiff) && $actuation ne "" );
+ my $actuationKeepAliveReq = ($actTimeDiff >= $hash->{helper}{actorKeepAlive})
+ if (defined($actTimeDiff) && $actuation ne "");
# build total actuation request
my $actuationReq = (
@@ -15061,19 +15006,11 @@ sub EnOcean_calcPID($) {
|| $actuationDone eq "" # startup condition
) && $actuation ne ""; # acutation is initialized
- #PID20_Log $hash, 2,
- # "A4 (actByTh:$actuationByThreshold && actByTime:$actuationByTime)"
- # . "||actKeepAlive:$actuationKeepAliveReq"
- # . "||rsLimit:$rsLimit=actnReq:$actuationReq"
- # if ($DEBUG_Actuation);
-
- # ................ perform output to actor
- #if ($actuationReq) {
+ # perform output to actor
if ($cmd =~ m/^start|actuator$/) {
# check calback for actuation
- my $actorCallBeforeSetting = AttrVal( $name, 'pidActorCallBeforeSetting', undef );
+ my $actorCallBeforeSetting = AttrVal($name, 'pidActorCallBeforeSetting', undef);
if (defined($actorCallBeforeSetting) && exists(&$actorCallBeforeSetting)) {
- #PID20_Log $hash, 5, 'start callback ' . $actorCallBeforeSetting . ' with actuation:' . $actuation;
no strict "refs";
$actuation = &$actorCallBeforeSetting($name, $actuation);
use strict "refs";
@@ -15086,8 +15023,8 @@ sub EnOcean_calcPID($) {
}
readingsBeginUpdate($hash);
- #readingsBulkUpdate( $hash, $hash->{helper}{desiredName}, $desired ) if ( $desired ne "" );
- #readingsBulkUpdate( $hash, $hash->{helper}{measuredName}, $sensorValue ) if ( $sensorValue ne "" );
+ #readingsBulkUpdate($hash, $hash->{helper}{desiredName}, $desired) if ($desired ne "");
+ #readingsBulkUpdate($hash, $hash->{helper}{measuredName}, $sensorValue) if ($sensorValue ne "");
readingsBulkUpdate($hash, 'delta', $delta ) if ($delta ne "");
readingsBulkUpdate($hash, 'p_p', $pPortion) if ($pPortion ne "");
readingsBulkUpdate($hash, 'p_d', $dPortion) if ($dPortion ne "");
@@ -15101,35 +15038,26 @@ sub EnOcean_calcPID($) {
readingsBulkUpdate($hash, 'setpointSet', $actuationDone) if ($actuationDone ne "");
$setpoint = $actuationDone;
}
- readingsEndUpdate( $hash, 1 );
-
+ readingsEndUpdate($hash, 1);
last;
- } # end while
+ }
- # ........ update statePID.
+ # update statePID.
$stateStr = 'idle' if ($stateStr eq '' && !$calcReq);
$stateStr = 'processing' if ($stateStr eq '' && $calcReq);
- #PID20_Log $hash, 2, "C1 stateStr:$stateStr calcReq:$calcReq" if ($DEBUG_Calc);
-
- #......... timer setup
- #my $next = gettimeofday() + $hash->{helper}{calcInterval};
- #RemoveInternalTimer($name); # prevent multiple timers for same hash
- #InternalTimer( $next, "PID20_Calc", $name, 1 );
-
- #PID20_Log $hash, 2, "InternalTimer next:".FmtDateTime($next)." PID20_Calc name:$name DEBUG_Calc:$DEBUG_Calc";
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'pidState', $stateStr);
readingsBulkUpdate($hash, 'pidAlarm', $err) if (defined $err);
readingsEndUpdate($hash, 1);
Log3($name, 5, "EnOcean $name EnOcean_calcPID Cmd: $cmd pidState: $stateStr T: $sensorValue SP: $setpoint SPT: $desired");
- @{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef);
+ @{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef, $actualVar);
RemoveInternalTimer($hash->{helper}{calcPID});
InternalTimer(gettimeofday() + $hash->{helper}{calcInterval} * 1.02, "EnOcean_calcPID", $hash->{helper}{calcPID}, 0);
return ($err, $logLevel, $response);
}
-# sent message to Multisnesor Window Handle (EEP D2-06-01)
+# sent message to Multisensor Window Handle (EEP D2-06-01)
sub
EnOcean_multisensor_01Snd($$$)
{
@@ -17996,11 +17924,11 @@ EnOcean_Delete($$)
Security features
set <IODev> teach <t/s>