Hi all
eine kurze Frage an die Experten
ich würde gern bei einem notify den Namen von $EVTPART0 übergeben - jedoch ohne ":"
ist dies möglich?
besten Dank
Moin,
chop($EVTPART0)
https://perldoc.perl.org/functions/chop
vielen dank für die schnelle Antwort
jetzt habe ich leider noch ein Problem
Ich würde gerne die Variablen zusammenführen - leider scheitere daran - anbei ein Bsp.:
Smartmeter_Haupt:Strom_L[1-3]:state:.* {my $wert=chop($EVTPART0);fhem("set "Smartmeter_Haupt_"$wert"_SPS" $EVTPART1")}
Mein Vorschlag mit chop ist nicht richtig, wenn ich es selbst verstanden habe ::) zeig ich ein Beispiel für das zweite Problem, wenn nicht jemand anderes bis dahin einen Vorschlag macht.
chop passt schon, die neue Variable braucht man aber in der Form nicht.
Den set-Text sollte man m.E. außerhalb des fhem-Aufrufs zusammenbauen.
Zitat... die neue Variable braucht man aber in der Form nicht.
Ich verstehe es so das die Variable schon gebraucht wird.
Was mir unklar ist wie das mit dem state in dem Suchmuster zu verstehen ist?
Meine Verdacht, das ist nicht richtig definiert und sollte so aussehen ?:
{Smartmeter_Haupt:Strom_L[1-3]:.* {chop($EVTPART0);my $v = $NAME.'_'.$EVTPART0.'_SPS';fhem("set $v $EVTPART1")}
Hi TomLee
ja, das state ist sicher nicht notwendig bzw. nicht richtig - ;)
das Ergebnis sollte sein
fhem("set Smartmeter_Haupt_StromL1_SPS $EVTPART1")
fhem("set Smartmeter_Haupt_StromL2_SPS $EVTPART1")
fhem("set Smartmeter_Haupt_StromL3_SPS $EVTPART1")
derzeit ist mein notify - 3x
Smartmeter_Haupt:StromL1:.* {fhem "set Smartmeter_Haupt_StromL1_SPS ".ReadingsVal("Smartmeter_Haupt","StromL1",0.0)}
leider werden die Werte noch nicth dort hingeschrieben
Es gibt mehrere Varianten da jetzt ranzugehen, musst du wissen, ich kenne die Devices nicht, ob du Einfluss auf die Readingnamen hast.
Es einfachste erscheint mir die Devicenamen der drei Devices Smartmeter_Haupt_StromL[1-3]_SPS anzupassen, auf Smartmeter_Haupt_Strom_L[1-3]_SPS.
Dann sollte mein Vorschlag greifen, wenn ich nix übersehe.
Du hast meinen gezeigten Ausführungsteil gar nicht nachvollzogen, der greift auch wenn die Readings StromL[1-3] heissen.
Hier noch ein ein Zeichen kürzeres Beispiel, das zeigt, wie man das verketten auch ohne Quotes und die Punkte umsetzen kann:
Smartmeter_Haupt:Strom_L[1-3]:.* {chop($EVTPART0);my $v = "${NAME}_${EVTPART0}_SPS";fhem("set $v $EVTPART1")}
Wenn die bisherigen 3 notify funktioniert haben, sollte es sich so mit einem notify machen lassen:
Smartmeter_Haupt:StromL[1-3]:.* {fhem 'set Smartmeter_Haupt_'.chop($EVTPART0).'_SPS '.ReadingsNum($NAME,chop($EVTPART0),0)}
alternativ, wenn der neue Wert sowieso in $EVTPART1 zur Verfügung steht, sollte auch das da funktionieren:
Smartmeter_Haupt:StromL[1-3]:.* {fhem 'set Smartmeter_Haupt_'.chop($EVTPART0).'_SPS '.$EVTPART1}
Man könnte jetzt natürlich noch das chop-Ergebnis noch einer Variablen zuweisen und die dann in der concatenation verwenden, macht es aber im besten fall nur etwas leichter lesbar.
gb#
@Benni: chop() gibt das abgeschnittene Zeichen zurück....Der benötigte Rest steht in der Ausgangsvariablen ;) .
Zitat von: Beta-User am 26 Februar 2023, 22:44:32
@Benni: chop() gibt das abgeschnittene Zeichen zurück....Der benötigte Rest steht in der Ausgangsvariablen ;) .
Ups! Vielleicht hätte ich doch testen sollen, wenn man mit Grippekram im Bett liegt ist Perl vllt. auch nicht die beste Medizin :D
Smartmeter_Haupt:StromL[1-3]:.* {chop $EVTPART0;fhem "set Smartmeter_Haupt_${EVTPART0}_SPS $EVTPART1"}