FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Schneewa am 26 Februar 2023, 09:30:49

Titel: Variablen Zuordnung zum Event
Beitrag von: Schneewa am 26 Februar 2023, 09:30:49
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
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: TomLee am 26 Februar 2023, 09:53:37
Moin,

chop($EVTPART0)

https://perldoc.perl.org/functions/chop
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: Schneewa am 26 Februar 2023, 10:21:45
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")}

Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: TomLee am 26 Februar 2023, 11:20:35
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.
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: Beta-User am 26 Februar 2023, 11:30:52
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.
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: TomLee am 26 Februar 2023, 12:50:34
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")}
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: Schneewa am 26 Februar 2023, 16:52:04
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

Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: TomLee am 26 Februar 2023, 17:18:14
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")}
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: Benni am 26 Februar 2023, 21:28:40
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#
Titel: Antw:Variablen Zuordnung zum Event
Beitrag 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 ;) .
Titel: Antw:Variablen Zuordnung zum Event
Beitrag von: Benni am 27 Februar 2023, 15:27:59
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"}