[gelöst] Teil eines Readings in eine Variable

Begonnen von TWART016, 18 April 2020, 21:50:32

Vorheriges Thema - Nächstes Thema

Otto123

#15
my $var4=(split("_",$var1))[-1];ist doch eigentlich:
my $var4=@arr[-1];
Warum das Array erzeugen und dann nie verwenden sondern immer wieder erzeugen?

Zu was ist die folgende Aktion gut?
if ($var1 =~ /pm25_average/) {
my $varA=(split("_",$var1))[-1];
my $varB=(split("_",$var1))[-2];
my $var4=$varB ."_" .$varA;

fhem ("set Telegram msg test 01: $var4");
};
Wenn §var1 pm25_average enthält wird es zerlegt und hinten wieder zusammengesetzt damit wieder pm25_average draus wird? Was ist da außer Stromverbrauch passiert? :D

Was hältst Du stattdessen von der zusätzlichen Zeile
$var4=$var1 if ($var1 =~ /pm25_average/);

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frank

Zitat(Punkt, Minus, Underscore, Slash  @all bitte mich verbessern wenn ich die Regex in goodReadingName falsch lese)
die "perl-ecke" zeigte die tage, dass mit versteckten readings fast alles möglich ist.  ;)

oder zb einfach 2 underscore hintereinander. das kann man auch gut über regex zerlegen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

TWART016

Zitat von: Wzut am 20 April 2020, 07:58:41
wenn du $var4 meinst -> das my weg lassen :)

Für mich sieht das aber alles recht gruselig aus, u.a. verstehe ich halt nicht wo bei der ganzen Aktion der tiefere Sinn liegt.
Besonderes der Abschnitt  ReadingsVal($var2,$out,"") , der letzten Atmezug des Toten ?
Deswegen würde ich das gerne verbessern ;) Korrekt, der letzte Wert des Readings.

Zitat von: Wzut am 20 April 2020, 07:58:41
Aber anyway, das Kernproblem ist doch hier der vom Modul fest vorrgebene Unterstrich _ als Trennzeichen zwischen Device_Reading.
Leider sind in FHEM die Anzahl der Sonderzeichen für so einen Trenner stark begrenzt, IMHO kommen da heute nur in Frage  . - _ /
(Punkt, Minus, Underscore, Slash  @all bitte mich verbessern wenn ich die Regex in goodReadingName falsch lese)
Man könnte 98_readingsWatcher auch ein neues Attribut spendieren mit dem der User festlegt wer von den vier möglichen Kandiaten benutzt wird.
Das wäre möglich, oder ein Reading, bei dem man das tote Reading in Verbindung mit dem Device sieht.


Zitat von: Otto123 am 20 April 2020, 09:01:31
my $var4=@arr[-1];
Warum das Array erzeugen und dann nie verwenden sondern immer wieder erzeugen?
Das wird unten bei $out verwendet.

Zitat von: Otto123 am 20 April 2020, 09:01:31
Zu was ist die folgende Aktion gut?
if ($var1 =~ /pm25_average/) {
my $varA=(split("_",$var1))[-1];
my $varB=(split("_",$var1))[-2];
my $var4=$varB ."_" .$varA;

fhem ("set Telegram msg test 01: $var4");
};
Wenn §var1 pm25_average enthält wird es zerlegt und hinten wieder zusammengesetzt damit wieder pm25_average draus wird? Was ist da außer Stromverbrauch passiert? :D
Wenn das Reading den Wert "pm25_average" enthält, wird Reading mit den letzten beiden Unterstrichen zusammen gebaut:
pm25_average
Davor war es ja nur average.


Zitat von: Otto123 am 20 April 2020, 09:01:31
Was hältst Du stattdessen von der zusätzlichen Zeile
$var4=$var1 if ($var1 =~ /pm25_average/);
Anstelle der ganz if?


Wzut

Zitat von: frank am 20 April 2020, 09:18:48
oder zb einfach 2 underscore hintereinander. das kann man auch gut über regex zerlegen.
stimmt soweit hatte ich gar nicht gedacht. Ich habe dem Modul jetzt das neue Attribut delimiter verpasst, mögliche Werte - -- _ __ , default wie bisher _
Denke damit müsste jeder in irgend einer Art glücklich werden.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

sorry aber Du musst meinen Text aufmerksamer lesen, eigentlich kann man den verstehen  :o
Hier die DEF mit meinen Hinweisen eingearbeitet, vielleicht versteht man es so ;)
readingsWatcher:.*:.timeout {
fhem ("set Telegram msg $EVENT");
my $var1="$EVTPART0";
my @arr=split('_',$var1);
my $var2=join('_',@arr[0..$#arr-1]);
my $var4=@arr[-1];

$var4=$var1 if ($var1 =~ /pm25_average/);
fhem ("set Telegram msg test 02: $var4");

my $out=(split(':',$var4))[0];
fhem ("set Telegram msg $var2:$out ". ReadingsVal($var2,$out,""));
}

Oder ich habe was übersehen. :-\

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TWART016

Zitat von: Wzut am 20 April 2020, 13:23:46
stimmt soweit hatte ich gar nicht gedacht. Ich habe dem Modul jetzt das neue Attribut delimiter verpasst, mögliche Werte - -- _ __ , default wie bisher _
Denke damit müsste jeder in irgend einer Art glücklich werden.

Danke, so konnte ich es nun lösen.