FHEM Forum

FHEM - Hausautomations-Systeme => KNX/EIB => Thema gestartet von: Andi291 am 06 Juli 2018, 21:11:59

Titel: eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: Andi291 am 06 Juli 2018, 21:11:59
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
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 07 Juli 2018, 06:58:28
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! ;-)
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 12 Juli 2018, 09:43:41
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
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: Andi291 am 12 Juli 2018, 20:04:23
Ja.

Es steht nur noch dieser Kontext zur Verfügung:

$hash
$name
$gadName
$state

Über hash und gadName kannst Du Dich zurück hangeln...
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 25 September 2018, 15:52:21
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.
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 25 September 2018, 16:45:31
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");
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: Andi291 am 25 September 2018, 20:45:00
Ne, das nehm ich noch nicht auf. Du reichst hier redundante und nicht eindeutige Daten durch. Zudem ist Deine Analyse nicht vollständig:
Mit dem Log VOR dem Aufruf von KNX-Eval befindest Du Dich noch im falschen Kontext (frag mich jetzt bitte nicht warum, ist aber so). Den Fehler hab ich auch zuerst gemacht-

Was fördert der Logeintrag in KNX-Eval im NIO Fall?
Ich meine den:

Log3 ($name, 5, "Enter eval...name: $name, gadName: $gadName, evalString: \n$evalString\n");

Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 26 September 2018, 08:15:22
Gar nichts, das ist in meinem Log nicht eingetragen, weil ich nur vom Device verbose auf 5 gesetzt habe, nicht vom TUL-Device. Da hier der Name jedoch vom TUL-Device benutzt wird, erscheint es als verbose-5 eintrag von diesem und wird mir eben nicht ausgegeben.

sG Joe
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: JoeALLb am 26 September 2018, 08:20:52
Nachtrag: Natürlich kann ich ja einfach auch das TUL-Device auf verbose 5 stellen:

Ergebnis;:
5: Enter eval...name: KNX, gadName: testGAD, evalString: [...]
KNX ist mein TUL-Device, also das falsche Device!


Dass die Daten redundant sind, mag sein. Es mag auch bestimmt eine bessere Lösung geben, aber mit meinen Perlkenntnissen habe ich nur das zustande gebracht!
Da das Ergebnis so stimmt, nutze ich im Moment diesen Patch ;-)


sG
Joe
Titel: Antw:eval: Variablen nun einheitlich verfügbar - putCmd muss leicht angepasst werden
Beitrag von: Andi291 am 26 September 2018, 20:15:11
...Grübel...

OK, ich reparier's. Da ist was anderes faul...