Wie im Logfile das Dezimaltrennzeichen Punkt gegen Komma ersetzen

Begonnen von bajogger, 11 September 2023, 21:55:56

Vorheriges Thema - Nächstes Thema

bajogger

Ich habe einen Shelly Pro 3EM als Stromzähler im Einsatz.
Der Shelly zeigt in einem Reading "Total_Energy" den verbrauchten Strom. Dieses Reading schreibe ich in ein Logfile
/opt/fhem/userlog/StromConsum.log StromZaehler:Total_Energy:.*Ursprünglich im Minutentakt. Das habe ich durch
attr StromZaehler interval 3600auf stündlich geändert. Das Logfile importiere ich danach in ein Excelfile. Dabei ist das Dezimaltrennzeichen, Punkt, lästig.
Auf der Suche hier im Forum bin ich auf die Möglichkeit gestoßen ein Userreading zu erstellen das Komma verwendet.
Total_Energi { my $val = (ReadingsVal("StromZaehler", "Total_Energy", 0)); $val =~ s/\./,/; return $val;}Funktioniert soweit auch. Das neue Reading (Total_Energi) zeigt nun das Komma als Trennzeichen.

Mein Problem:
Versuche jetzt das neue Reading zu loggen. Leider steht dies nun immer 3-5x im Logfile.
Das ursprüngliche Reading (Total_Energy) wurde sauber im Stundentakt geloggt.
Im Device werden beide Readings mit einem zeitlichen Abstand von 3Sek angezeigt.
Das eigentliche Reading immer z.B. 23:59:00 / Das umformatierte Userreading z.B. 23:59:03

Scheinbar wird dabei mehrfach das Loggen ausgelöst.
Weis jemand wie ich das verhindere bzw wie das besser/richtig mache. Kann man eventuell erst beim Loggen auf Komma formatieren
FHEM auf Raspberry Pi, CUL 433 und CUL 866,
Diverse IT Empfänger für Rolladen und Licht, IPCam Instar 2905

RalfRog

#1
Das userreading wird mehrfach erzeugt weil ein Trigger fehlt, jetzt wird es bei jedem Event vom Device aktualisiert.

ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:

    <reading>[:<trigger>] [<modifier>] { <perl code> }

Füge den entsprechenden Trigger für den Energiewert hinzu
Total_Energi:Total_Energy { my $val = (ReadingsVal("StromZaehler", "Total_Energy", 0)); $val =~ s/\./,/; return $val;}

Zur Manipulation beim loggen kann ich nichts sagen.
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

bajogger

Danke, dein Hinweis leuchtet ein. Leider hat es nicht funktioniert.

um 22:59:00 wurde das Ursprungs Reading "Total_Energy" aktualisiert.
Das UserReading wurde aber nicht aktualisiert. Keine Reaktion
FHEM auf Raspberry Pi, CUL 433 und CUL 866,
Diverse IT Empfänger für Rolladen und Licht, IPCam Instar 2905

betateilchen

#3
Zitatmy $val = (ReadingsVal("StromZaehler", "Total_Energy", 0));

in rot = völlig sinnlose Klammern... wie kommt man auf sowas?

Zitat von: bajogger am 11 September 2023, 23:13:05Das UserReading wurde aber nicht aktualisiert. Keine Reaktion

Natürlich nicht, die Syntax ist ja auch falsch. Lies die commandref, verstehe sie und mach es dann richtig.
Dann wird es auch funktionieren.

attr StromZaehler userReadings Total_Energi:Total_Energy:.* {my $val = ReadingsNum($name, "Total_Energy", 0);; $val =~ s/\./,/;; return $val}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Warum man extra ein Logfile anlegt, in das nur jede Stunde ein Wert geschrieben wird, bleibt für mich ein Rätsel.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

bajogger

Internals:
  DEF        192.168.178.77
  FUUID      64e5db93-f33f-33ad-3303-72738819bd53140b
  INTERVAL  3600
  NAME      StromZaehler
  NR        343
  SHELLY    SPEM-003CEBEU
  SHELLYID  shellypro3em-3ce90e6e9ef0
  STATE      Zaehlerstand 159.5372 kWh / Tagesverbrauch 6.99 kWh
  TCPIP      192.168.178.77
  TYPE      Shelly
  eventCount 7932
  units      1
  OLDREADINGS:
  READINGS:
    2023-09-11 22:49:09  Active_Power_A  18.5 W
    2023-09-11 22:49:09  Active_Power_B  183.5 W
    2023-09-11 22:49:09  Active_Power_C  52.4 W
    2023-09-11 22:49:09  Active_Power_T  254.4 W
    2023-09-11 22:59:00  Active_Power_calculated 365.4 W ( 1314864 Ws = 365.24 Wh in 3598 s )
    2023-09-11 22:59:02  Active_Power_integrated 254.4  W
    2023-09-11 22:49:09  Apparent_Power_A 44 VA
    2023-09-11 22:49:09  Apparent_Power_B 284 VA
    2023-09-11 22:49:09  Apparent_Power_C 73 VA
    2023-09-11 22:49:09  Apparent_Power_T 402 VA
    2023-09-11 22:49:09  Current_A      0.195 A
    2023-09-11 22:49:09  Current_B      1.255 A
    2023-09-11 22:49:09  Current_C      0.326 A
    2023-09-11 22:49:09  Current_T      1.775 A
    2023-09-11 21:49:09  Power_Factor_A  0.63 (capacitive)
    2023-09-11 22:49:09  Power_Factor_B  0.74 (capacitive)
    2023-09-11 22:49:09  Power_Factor_C  0.77 (capacitive)
    2023-09-11 22:59:00  Purchased_Energy_A 22.4226 kWh
    2023-09-11 22:59:00  Purchased_Energy_B 85.8667 kWh
    2023-09-11 22:59:00  Purchased_Energy_C 51.3606 kWh
    2023-09-11 22:59:00  Purchased_Energy_T 159.6500 kWh
    2023-08-25 15:46:00  Returned_Energy_A 0.0 kWh
    2023-08-25 15:46:00  Returned_Energy_B 0.0 kWh
    2023-08-25 15:46:00  Returned_Energy_C 0.1128 kWh
    2023-08-25 15:46:00  Returned_Energy_T 0.1128 kWh
    2023-09-10 23:59:30  TagesVerbrauch  6.67330000000001
    2023-09-10 23:59:50  TagesVerbrauchKor 6.99 kWh
    2023-09-11 22:49:09  Total_Energi    159,1719 kWh
    2023-09-11 22:59:00  Total_Energy    159.5372 kWh
    2023-09-11 22:49:09  Voltage_A      227.3 V
    2023-09-11 22:49:09  Voltage_B      226.8 V
    2023-09-11 22:49:09  Voltage_C      226.8 V
    2023-09-11 00:00:00  VorTagsZaehler  151.9994 kWh
    2023-08-26 04:10:03  cloud          enabled(connected)
    2023-09-11 21:59:04  errors          OK
    2023-09-09 05:59:03  firmware        v0.14.1(update possible to v1.0.2-beta3)
    2023-09-11 21:59:04  inttemp        46.8 °C
    2023-09-07 14:59:02  network        <html>connected to <a href="http://192.168.178.77">192.168.178.77</a> (Wifi)</html>
    2023-09-07 13:58:35  network_disconnects 4
    2023-09-11 22:59:02  network_rssi    -74 dB
    2023-08-25 09:20:05  network_ssid    FRITZ!Box 7490
    2023-09-11 19:59:03  state          OK
    2023-09-11 22:59:02  timestamp      2023-09-11 22:59:02
    2023-09-11 20:59:03  webhook_cnt    0
    2023-09-11 20:59:03  webhook_ver    0
  helper:
    Energymeter_F 159537.15
    Energymeter_P 159649.98
    Energymeter_R 112.83
    a_Active_Power 18.5
    active_energy_last 365.24000000002
    b_Active_Power 183.5
    c_Active_Power 52.4
    power      0
    powerCnt  0
    timestamp_last 1694465942
Attributes:
  ShellyName StromZaehler
  group      Shelly
  interval  3600
  model      shellypro3em
  room      Favorit,Shelly
  showunits  normal2
  stateFormat Zaehlerstand Total_Energy / Tagesverbrauch TagesVerbrauchKor
  userReadings Total_Energi:Total_Energy { my $val = (ReadingsVal("StromZaehler", "Total_Energy", 0)); $val =~ s/\./,/; return $val;}
FHEM auf Raspberry Pi, CUL 433 und CUL 866,
Diverse IT Empfänger für Rolladen und Licht, IPCam Instar 2905

bajogger

ZitatWarum man extra ein Logfile anlegt, in das nur jede Stunde ein Wert geschrieben wird, bleibt für mich ein Rätsel.

Dadurch entsteht eine Textdatei (Logdatei) mit stündlichen Verbrauchswerten welche ich in Excel zur Weiterverarbeitung importiere
FHEM auf Raspberry Pi, CUL 433 und CUL 866,
Diverse IT Empfänger für Rolladen und Licht, IPCam Instar 2905

bajogger

Danke, alles funktioniert wie es soll. Userreading wird erzeugt und nur ein Eintrag im Logfile
FHEM auf Raspberry Pi, CUL 433 und CUL 866,
Diverse IT Empfänger für Rolladen und Licht, IPCam Instar 2905

RalfRog

Oh sorry, natürlich

Zitat von: betateilchen am 11 September 2023, 23:18:47Natürlich nicht, die Syntax ist ja auch falsch. Lies die commandref, verstehe sie und mach es dann richtig.
Dann wird es auch funktionieren.
attr StromZaehler userReadings Total_Energi:Total_Energy:.* {my $val = ReadingsNum($name, "Total_Energy", 0);; $val =~ s/\./,/;; return $val}

Der Trigger wird als RegEx auf das Event interpretiert, da reicht der Readingname nicht.
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen