diff --git a/fhem/FHEM/10_KNX.pm b/fhem/FHEM/10_KNX.pm
index 89bebedf5..b2bac0765 100644
--- a/fhem/FHEM/10_KNX.pm
+++ b/fhem/FHEM/10_KNX.pm
@@ -28,6 +28,7 @@
# ABU 20180613 fixed scaling algo part 2
# ABU 20180624 no set-option for listenoly- or get-devices, warning for illegal EVAL
# ABU 20180626 fixed last changes
+# ABU 20180706 changed eval, removed stateCopy
package main;
@@ -235,10 +236,9 @@ KNX_Initialize($) {
"do_not_notify:1,0 " . #supress any notification (including log)
"showtime:1,0 " . #shows time instead of received value in state
"answerReading:1,0 " . #allows FHEM to answer a read telegram
- "stateRegex " . #modifies state value
- "stateCmd " . #modify state value
- "putCmd " . #called when the KNX bus asks for a -put reading
- "stateCopy " . #backup content of state in this reading (only for received telegrams)
+ "stateRegex:textField-long " .#modifies state value
+ "stateCmd:textField-long " . #modify state value
+ "putCmd:textField-long " . #called when the KNX bus asks for a -put reading
"format " . #supplies post-string
"listenonly:1,0 " . #DEPRECATED
"readonly:1,0 " . #DEPRECATED
@@ -989,8 +989,7 @@ KNX_Set($@) {
my $cmdAttr = AttrVal($name, "stateCmd", undef);
if (defined ($cmdAttr) and !($cmdAttr eq ""))
{
- $state = eval $cmdAttr;
- Log3 ($name, 2, "set name: Eval error - $@") if $@;
+ $state = KNX_eval ($hash, $targetGadName, $state, $cmdAttr);
Log3 ($name, 5, "set name: $name - state replaced via command, result: state:$state");
}
@@ -1233,8 +1232,8 @@ KNX_Parse($$) {
my $cmdAttr = AttrVal($deviceName, "stateCmd", undef);
if (defined ($cmdAttr) and !($cmdAttr eq ""))
{
- $state = eval $cmdAttr;
- Log3 ($deviceName, 2, "parse device hash (wpi): Eval error - $@") if $@;
+
+ $state = KNX_eval ($deviceHash, $gadName, $state, $cmdAttr);
Log3 ($deviceName, 5, "parse device hash (wpi): $deviceHash name: $deviceName - state replaced via command $cmdAttr - state: $state");
}
#reassign original name...
@@ -1280,23 +1279,14 @@ KNX_Parse($$) {
if (defined ($cmdAttr) and !($cmdAttr eq ""))
{
my $orgValue = $value;
- my $gad = $gadName;
-
- #backup kontext
- my $orgHash = $hash;
- $hash = $deviceHash;
-
- eval $cmdAttr;
- Log3 ($deviceName, 2, "parse device hash (r): Eval error - $@") if $@;
+
+ $value = KNX_eval ($hash, $gadName, $value, $cmdAttr);
if ($orgValue ne $value)
{
Log3 ($deviceName, 5, "parse device hash (r): $deviceHash name: $deviceName - put replaced via command $cmdAttr - value: $value");
readingsSingleUpdate($deviceHash, $putString, $value,1);
}
-
- #restore kontext
- $hash = $orgHash;
}
###/
@@ -1549,6 +1539,26 @@ KNX_limit ($$$$) {
return $retVal;
}
+#Private function to encode KNX-Message according DPT
+#############################
+sub
+KNX_eval ($$$$) {
+ my ($hash, $gadName, $state, $evalString) = @_;
+ my $name = $hash->{NAME};
+ my $retVal = undef;
+
+ Log3 ($name, 5, "Enter eval...name: $name, gadName: $gadName, evalString: \n$evalString\n");
+
+ $retVal = eval $evalString;
+
+ Log3 ($name, 2, "set name: Eval error - $@") if $@;
+ Log3 ($name, 5, "Exit eval...result: $retVal");
+
+ $retVal = "ERROR" if (not defined ($retVal));
+
+ return $retVal;
+}
+
#Private function to encode KNX-Message according DPT
#############################
sub
@@ -2137,7 +2147,6 @@ The answer from the bus-device is not shown in the toolbox, but is treated like
room
showtime
sortby
-stateCopy
stateFormat
supressReading
timestamp-on-change-reading
@@ -2156,12 +2165,12 @@ The answer from the bus-device is not shown in the toolbox, but is treated like