Autor Thema: eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden  (Gelesen 286 mal)

Offline Andi291

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1088
Servus!

Ich habe die Eval-Funktionen gekapselt. bei putCmd und stateCmd steht nun folgender Kontext zur Verfügung:

$hash
$name
$gadName
$state

$state ersetzt $value bei putCmd

PutCmd braucht leichte Anpassungen.

Bisher:
attr myDev putCmd $value = "Mein Prefix " . $value;
Neu:
attr myDev putCmd return "Mein Prefix " . $state;
Grüße, Andi

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1437
Danke für die Vereinheitlichung, finde das durchaus konsequenter, gerade auch im Hinblick auf sonst übliche FHEM-Konstrukte.
Somit sollte es auch künftig weniger Supportbedarf produzieren! ;-)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1437
Hallo Andi,

kann es sein dass dadurch auch "$rdString" nicht mehr in stateCmd geht?

bekomme seit einem de rletzten Updates das hier im Log.
"$rdString" requires explicit package name (did you forget to declare "my $rdString"?) at (eval 17698) line 9.
Was kann ich stattdessen nehmen?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline Andi291

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1088
Ja.

Es steht nur noch dieser Kontext zur Verfügung:

$hash
$name
$gadName
$state

Über hash und gadName kannst Du Dich zurück hangeln...

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1437
Hallo Andi,
Leider funktioniert das bei mir nicht durchgängig.

wenn ich in putCmd "$name" nutzen möchte, bekomme ich den Namen des IO-Devices, in mienem Fall "KNX" zurück. nicht jedoch den Namen des aktuellen Devices.
Ich habe extra FHEM komplett neu gestartet, um eventuelle Einflüsse von diesem Problem auszuschließen: https://forum.fhem.de/index.php/topic,90865.0.html

Um das zu prüfen, habe ich diese Zeile
                                Log3 $deviceName, 5, "KNX Eval putCmd: Name: $deviceName  hashName: ". $hash->{NAME};direkt über
$value = KNX_eval ($hash, $gadName, $value, $cmdAttr); (bei mir aktuell zeile 1291, da ich DPT3.007 ergänzt habe!)
hinzugefügt mit dem Ergebnis:

5: KNX Eval putCmd: Name: knx.Testdevice  hashName: KNX.


Als Workaround habe ich KNX_eval um einen optionalen Parameter ergänzt
KNX_eval ($$$$;$) {
        my ($hash, $gadName, $state, $evalString,$newname) = @_;
        $name = $newname if $newname ne "";

Und den Aufruf in Zeile 1291 um die Übergabe des Devicenamens ergänzt.
$value = KNX_eval ($hash, $gadName, $value, $cmdAttr, $deviceName);
sG
Joe.
« Letzte Änderung: Heute um 16:44:18 von JoeALLb »
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1437
Anbei noch als Patch

--- /10_KNX.pm 2018-09-25 16:08:04.000000000 +0200
+++ /10_KNX.name.pm 2018-09-25 16:31:14.000000000 +0200
@@ -1284,7 +1284,7 @@
  {
  my $orgValue = $value;
 
- $value = KNX_eval ($hash, $gadName, $value, $cmdAttr);
+ $value = KNX_eval ($hash, $gadName, $value, $cmdAttr, $deviceName);
 
  #if ($orgValue ne $value)
  #try to fix: answer only, if eval was successful
@@ -1548,9 +1548,10 @@
 #Private function to encode KNX-Message according DPT
 #############################
 sub
-KNX_eval ($$$$) {
- my ($hash, $gadName, $state, $evalString) = @_;
+KNX_eval ($$$$;$) {
+        my ($hash, $gadName, $state, $evalString,$newname) = @_;
  my $name = $hash->{NAME};
+        $name = $newname if length($newname) > 1;
  my $retVal = undef;
 
  Log3 ($name, 5, "Enter eval...name: $name, gadName: $gadName, evalString: \n$evalString\n");
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

 

decade-submarginal