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 3600
auf 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
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.
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
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}
Warum man extra ein Logfile anlegt, in das nur jede Stunde ein Wert geschrieben wird, bleibt für mich ein Rätsel.
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;}
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
Danke, alles funktioniert wie es soll. Userreading wird erzeugt und nur ein Eintrag im Logfile
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.