Klärungsbedarf bei einem UserReading

Begonnen von Marko1976, 04 März 2026, 18:48:34

Vorheriges Thema - Nächstes Thema

Marko1976

Hallo, es dürfte wohl inzwischen allgemein Bekannt sein, dass Perl und Regex nicht mein Freund ist. Nun habe ich aber eine Sache, die ich mir gar nicht erklären kann und hoffe jemand kann mir erklären warum das so ist wie es ist.

Ich erstelle mit Hilfe des statistics-Moduls einen Delta für den Gesamtstromverbrauch. Dadurch erhalte ich ein Reading wie folgt:
Hour: 0.2 Day: 0.2 Month: 0.2 Year: 0.2 (since: 2026-03-04_18:18:58 )
Jetzt würde ich gerne die einzelnen Zeitbereiche in Einzelreadings trennen und habe mir dazu mit Hilfe des Forums und allgemeinen Internets folgendes UserReading gebastelt:
statEnergy_kWh_Month { ReadingsVal("$name","statEnergy_kWh","") =~ /Month\":\"([^\"]*)\"/; return $1 }
Interessanterweise wird das Reading "statEnergy_kWh_Month" jetzt aber mit dem Device-Namen des SmartMeter-Devices befüllt, nämlich:
FBDECT_Fritzbox_Actors_15282_0919488_1
Frage die ich nicht verstehe ist nun, wo kommt der Devicename her? In dem Reading das ich auftrenne kommt er ja überhaupt nicht vor, also wo hohlt das UserReading ihn her?

Hier noch das List des Device:
Internals:
  DEF        Fritzbox_Actors:15282_0919488_1 powerMeter
  FUUID      68eb9223-f33f-7706-ca1c-9d07c3148480fb8a
  FVERSION  10_FBDECT.pm:0.290260/2024-07-15
  Fritzbox_Actors_MSGCNT 880
  Fritzbox_Actors_TIME 2026-03-04 18:44:58
  IODev      Fritzbox_Actors
  LASTInputDev Fritzbox_Actors
  MSGCNT    880
  NAME      FBDECT_Fritzbox_Actors_15282_0919488_1
  NR        541
  STATE      534 W (1231.7 kWh)
  TYPE      FBDECT
  eventCount 880
  id        15282_0919488_1
  props      HANFUNUnit,powerMeter
  OLDREADINGS:
  READINGS:
    2026-03-04 18:44:58  AIN            15282 0919488-1
    2026-03-04 18:44:58  FBNAME          Bezug
    2026-03-04 18:44:58  FBPROP          HANFUNUnit,powerMeter
    2026-03-04 18:44:58  FBTYPE          FRITZ!Smart Energy 250
    2026-03-04 18:44:58  ID              2000
    2026-03-04 11:24:37  IODev          Fritzbox_Actors
    2026-02-17 01:27:08  battery        70 %
    2025-12-20 09:21:41  batteryLabel    SmartMeter am Stromzähler
    2026-02-17 01:27:08  batteryPercent  70
    2026-03-04 18:44:58  batteryState    ok
    2026-02-17 01:27:08  batterylow      0
    2025-12-20 09:22:15  batterytyp      2xMignon (AA)
    2026-03-04 18:44:58  energy          1231731 Wh
    2026-03-04 18:44:58  energy_kWh      1231.7
    2026-03-04 18:44:58  etsideviceid    20
    2026-03-04 18:44:58  fwversion      0.0
    2026-03-04 18:44:58  power          534.00 W
    2026-03-04 18:44:58  power_round    534
    2026-03-04 18:44:58  present        yes
    2026-03-04 18:44:58  statEnergy_kWh  Hour: 0.2 Day: 0.2 Month: 0.2 Year: 0.2 (since: 2026-03-04_18:18:58 )
    2026-03-04 18:44:58  statEnergy_kWh_Month FBDECT_Fritzbox_Actors_15282_0919488_1
    2026-03-04 18:44:58  statEnergy_kWh_Year FBDECT_Fritzbox_Actors_15282_0919488_1
    2026-03-04 18:44:58  statPower_roundDay Min: 449 Avg: 493 Max: 607 (since: 2026-03-04_18:19:28 )
    2026-03-04 18:44:58  statPower_roundHour Min: 449 Avg: 493 Max: 607 (since: 2026-03-04_18:19:28 )
    2026-03-04 18:44:58  statPower_roundMonth Min: 449 Avg: 493 Max: 607 (since: 2026-03-04_18:19:28 )
    2026-03-04 18:44:58  statPower_roundYear Min: 449 Avg: 493 Max: 607 (since: 2026-03-04_18:19:28 )
    2026-03-04 18:44:58  unittype        65281
    2026-02-17 01:27:08  voltage        0.000 V
  helper:
    _98_statistics statistics_SmartMeter
Attributes:
  alias      Sensor SmartMeter
  event-min-interval power:60,energy:300
  group      Batteriebetrieb,Sensor
  icon      gasmeter1
  room      FBDECT,Wohnung->Keller
  stateFormat power_round W (energy_kWh kWh)
  userReadings batteryState {if(ReadingsVal("$name","batteryPercent",'') >= 25) {return "ok"} elsif (ReadingsVal("$name","batteryPercent",'') => 10) {return "low"} else {return "dead"}},
energy_kWh {round(ReadingsNum("$name","energy",'') / 1000 ,1)},
power_round {round(ReadingsNum("$name","power",'') ,0 )},
statEnergy_kWh_Month { ReadingsVal("$name","statEnergy_kWh","") =~ /Month\":\"([^\"]*)\"/; return $1 },
statEnergy_kWh_Year { ReadingsVal("$name","statEnergy_kWh","") =~ /Year\":\"([^\"]*)\"/; return $1 },

Wie gesagt es geht mir augenblicklich nur um die Frage woher das Userreading den Devicenamen zieht wenn er kein Bestandteil des Readings ist.

betateilchen

#1
Tipp: wenn man mit regex nicht klarkommt, kann man auch darüber nachdenken, ob es andere - einfachere - Möglichkeiten gibt, zum Ergebnis zu kommen.

Beispielsweise so:

my @val = split(/ /,"Hour: 0.2 Day: 0.2 Month: 0.2 Year: 0.2 (since: 2026-03-04_18:18:58 )");
Das ergibt ein Array, aus dem Du die gesuchten Werte einfach entnehmen kannst:

$val[1] liefert den Wert für hour
$val[3] liefert den Wert für day
$val[5] liefert den Wert für month
$val[7] liefert den Wert für year
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!