FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: Wolle02 am 26 April 2026, 11:46:26

Titel: ReadingsNum erweitern
Beitrag von: Wolle02 am 26 April 2026, 11:46:26
Hallo zusammen, laut CommandRef gibt ReadingsNum die erste Zahl aus dem Readingswert zurück. Wäre es möglich die Funktion um einen Parameter zu erweitern, um die Stelle der Zahl zu definieren, die zurückgegeben werden soll?

Beispiel:
Reading: 0d 0h 0m 19s -> ReadingsNum(<devicename>,<reading>,<defaultvalue>,<round>,3) -> Rückgabewert: 19
Titel: Aw: ReadingsNum erweitern
Beitrag von: CoolTux am 26 April 2026, 13:19:41
Bau um das readingsNum ein split
Titel: Aw: ReadingsNum erweitern
Beitrag von: Guybrush am 26 April 2026, 15:48:27
"0d 0h 0m 19s" liefert doch bestimmt bereits nur die 19 oder garnix, weils nen string ist? aber das was cooltux schon schrieb ist wenn dann der weg. sowas in die funktion einzubauen halte ich für wenig sinnvoll
Titel: Aw: ReadingsNum erweitern
Beitrag von: betateilchen am 27 April 2026, 08:09:55
Zitat von: CoolTux am 26 April 2026, 13:19:41Bau um das readingsNum ein split

Nur mal interessehalber: was hat man denn zum Splitten, wenn ReadingsNum() bereits nur eine einzige Zahl zurückliefert?

Ich würde das mit einer regex lösen und die entsprechende group verwenden:

/(\d+)d.(\d+)h.(\d+)m.(\d+)s/
liefert vier Werte $1 $2 $3 $4 .
Titel: Aw: ReadingsNum erweitern
Beitrag von: Otto123 am 27 April 2026, 09:07:28
Zitat von: CoolTux am 26 April 2026, 13:19:41Bau um das readingsNum ein split
Als Demo für die FHEM Kommandozeile:
{ 0 + ( split ' ',ReadingsVal('name','reading','0d 0h 0m 19s') )[3] }
Klar viel aufwändiger als ein regex - aber damit kann ja nicht jeder :)

Perl extrahiert Zahlen vom linken Rand bis zum ersten ungültigen Zeichen eines Strings. Also man kann den Split direkt in der arithmetischen Operation verwenden, den dummy mit 0+ oder 1* braucht man nicht extra.
Titel: Aw: ReadingsNum erweitern
Beitrag von: JoWiemann am 27 April 2026, 09:39:57
Würde das mal noch in die Waagschale werfen:
my $result = $data =~ /.(\d\d)s/ ? $1 : 0;
Damit auch Fehler abgefangen werden.
Titel: Aw: ReadingsNum erweitern
Beitrag von: betateilchen am 27 April 2026, 12:52:23
Zitat von: Otto123 am 27 April 2026, 09:07:28Als Demo für die FHEM Kommandozeile:
{ 0 + ( split ' ',ReadingsVal('name','reading','0d 0h 0m 19s') )[3] }

Die Frage war aber nach ReadingsNum() nicht nach ReadingsVal().

Zitat von: CoolTux am 26 April 2026, 13:19:41Bau um das readingsNum ein split
Titel: Aw: ReadingsNum erweitern
Beitrag von: Otto123 am 27 April 2026, 13:15:53
Ich nahm die Empfehlung als "Versprecher" ;) - das es bei ReadingsNum() nix zu splitten gibt, hattest Du ja schon gesagt.
Titel: Aw: ReadingsNum erweitern
Beitrag von: CoolTux am 27 April 2026, 15:26:35
Stimmt, ich meinte es auch andersrum. Also erst splitten und dann readingsNum.
So sollte es gehen.