FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 30 August 2016, 00:24:54

Titel: vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: justme1968 am 30 August 2016, 00:24:54
durch den thread hier: https://forum.fhem.de/index.php/topic,57174.msg485762.html#msg485762 (https://forum.fhem.de/index.php/topic,57174.msg485762.html#msg485762) ist aufgefallen das es aktuell keine möglichkeit gibt in im auführungsteil eines set den namen des device herauszufinden für den das set gerade ausgeführt wird. das wäre besonders im falle einer devspec angabe nützlich die mehr als ein device betrifft.

mit folgendem kleinen patch wird diese möglichkeit eingebaut:--- fhem.pl (revision 12086)
+++ fhem.pl (working copy)
@@ -1625,6 +1625,8 @@
   my @rets;
   foreach my $sdev (devspec2array($a[0], $cl)) {

+    $evalSpecials->{'%DEV'} = $sdev;
+
     $a[0] = $sdev;
     $defs{$sdev}->{CL} = $cl if($defs{$sdev});
     my $ret = DoSet(@a);


getestet mir direktem aufruf des set und auch aus einem notify. wo könnte es nebenwirkungen geben?

das ganze funktioniert nur für die {(...)} variante nicht für die [device:reading] variante. für letzteres ist mir noch keine elegante lösung eingefallen.
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: rudolfkoenig am 30 August 2016, 15:09:57
Habs eingebaut, und dabei noch auf $evalSpecials geprueft, da es nicht immer gesetzt ist.

Bemerkungen:
- das Feature macht nur in einem notify oder cmdalias Sinn, sonst ist evalSpecials nicht gesetzt, und man kriegt haessliche Fehlermeldungen ala "Global symbol "$DEV" requires explicit package name". Leider sieht man nicht mal die ganze Fehlermeldung, das muessten wir noch fixen.
- ich wollte eigentlich NAME verwenden, das ist aber mit dem Namen des triggers belegt.
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: justme1968 am 30 August 2016, 15:24:20
ja NAME geht nicht will es vom notify selber schon verwendet wird.

es geht auch ausserhalb vom notify mit einem reinen set wie z.b. set A|B {($DEV)}.

wenn $evalSpecials nicht gesetzt ist wird es ja durch die zuweisung gesetzt. d.h. innerhalb des notify gibt es $DEV zusätzlich zu den specials des notify und ausserhalb gibt es nur $DEV. das ist zumindest bei meiner perl version hier der fall.

Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: justme1968 am 30 August 2016, 15:25:02
sehe gerade du hast eine zusätzliche prüfung für $evalSpecials eingebaut. die war absichtlich nicht drin. siehe oben...
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: rudolfkoenig am 30 August 2016, 15:32:45
Ok, wieder was gelernt. Perl 5.16, 5.20 und 5.24 hat damit kein Problem, hoffentlich machen das aeltere perl Versionen auch mit.
Habe die Pruefung entfernt und eingecheckt.
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: justme1968 am 30 August 2016, 15:35:54
für ältere perl versionen könnte man bei nicht gesetztem $evalSpecials die zuweisung über $evalSpecials = { '%DEV' => ...} machen. ich habe nur kein alter perl zum testen da.

die beschreibung von $DEV in der commandref müsste noch angepasst werden oder?
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: justme1968 am 30 August 2016, 15:44:28
hab gerade noch ein perl 5.8.3 gefunden. damit geht es auch.

dann bleibt nur die doku oder ?
Titel: Antw:vorschlag: erweiterung EvalSpecials/ReplaceSetMagic um devspec device namen
Beitrag von: rudolfkoenig am 30 August 2016, 16:07:33
Hab sie angepasst.