Variablen Zuordnung zum Event

Begonnen von Schneewa, 26 Februar 2023, 09:30:49

Vorheriges Thema - Nächstes Thema

Schneewa

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

TomLee


Schneewa

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")}


TomLee

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.

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

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")}

Schneewa

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


TomLee

#7
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")}

Benni

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#

Beta-User

@Benni: chop() gibt das abgeschnittene Zeichen zurück....Der benötigte Rest steht in der Ausgangsvariablen ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Benni

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"}