Stromzähler vernünftig aufzeichnen und visualisieren

Begonnen von xeenon, 19 September 2022, 15:30:23

Vorheriges Thema - Nächstes Thema

xeenon

Hallo Zusammen,

ich habe es endlich geschafft meinen Stromzähler TD-3511 auszulesen. Dazu habe ich mir den AMIS Leser bestellt und mittels MQTT mit FHEM verbunden.

Ich weiß zwar nicht warum erst nach 3 Tagen, einfach so, endlich der Autocreate hingehauen hat, aber jetzt bin ich gücklich.

Nun habe ich folgende Probleme:

Die Übertragung findet sekündlich statt. Es kommen zur Zeit 9 Readings rein, wovon aber 4 bei 0 stagnieren (noch habe ich keine PV Anlage und Rückspeisung, wird sich aber demnächst ändern).

Zur Zeit logge ich nur ein Wert, und zwar den momentanen Verbrauch. Aber auch das sind 86400 Einträge pro Tag, nur für diesen einen Wert.

Da komm ich zu meinem Problem: diese "Flut" an Daten, ist das ein Problem für FHEM und die Hardware (SD Karte)? Ich denke schon. Ich könnte mir vorstellen, dass dann ein Diagramm FHEM massiv ausbremst.

Ein weiteres Problem ist, wenn ich nur jede Minute logge verfälscht das den Wert mit der Zeit massiv. Ich dachte da dran einen Wert erst dann zu loggen wenn er sich um 10% ändert. Aber auch da habe ich keine Ahnung ob das Sinn macht.

Eine Entlastung der Hardware wäre vielleicht möglich wenn man die Logs auf eine HDD auslagert, wobei dann auch wieder die Performance ein Problem werden könnte.
Wie loggt und visualisiert ihr denn so eure Zähler?
Ich hätte gerne, dass der durchschnittliche Verbrauch angezeigt wird. Die Auflösung weiß ich noch nicht.

Später möchte ich dann darauf aufbauen und z.B. die Speisung in Akku, Abnahme und Speisung ins Netz visualisieren.

Dankeschön und viele Grüße

Gisbert

Hallo xeenon,

kannst bei deinem physischem MQTT-Device das Interval nicht höher setzen, bspw. auf 15 Sekunden?
Im Fhem-Device solltest du das Attribut event-on-change-reading .* setzen. Damit sollte ebenfalls die Anzahl der Events und Readings drastisch reduziert werden.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

xeenon

Tatsächlich ist es so, dass der Wert sich jede Sekunde ändert. Ans chance Event habe ich zuerst gedacht.

Die IR Schnittstelle vom Zähler sendet jede Sekunde, das gibt der Leser 1:1 weiter. Daran kann ich leider nichts ändern.

KölnSolar

AMIS Leser sagt mir nichts. Der Zähler müsste sich doch auch mit simplem IR-Lesekopf und serieller Schnittstelle auslesen und per OBIS-Modul verarbeiten lassen. Dort lässt sich ein Lese-Intervall einstellen.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

xeenon

Ich habe keinen anderen Leser gefunden der den MBUS Key (AES Verschlüsselung) unterstützt.

bartman121

naja, du schreibst, dass 9 readings reinkommen, welche denn?

Wenn du zum Beispiel den Zählerstand bekommst, dann kann du durchaus mit event-min-interval arbeiten und den Wert nur alle X-Sekunden zulassen.

Die durchschnittliche Leistung lässt sich aus dem Zählerstand berechnen, nicht anders macht das der Zähler.

Ich mach das bei mir so:
oldreadings STROM_Total_in,UR_Current_Timestamp

dann ein bisschen UserReadings :o)
UR_Count_Diff:STROM_Total_in:.* {
my $current = ReadingsNum($name,"STROM_Total_in",0);;
my $previous = OldReadingsNum($name,"STROM_Total_in",0);;
my $diff = $current - $previous;;

if (abs($diff)<3) {
return round($current - $previous,3);;
}
else {
return 0;;
}
},
UR_Current_Timestamp:STROM_Total_in:.* {
use Date::Parse;;
my $timestamp_time = ReadingsVal($name,"STROM_TimeStamp_time","000000");;

while (length($timestamp_time) < 6) {
$timestamp_time = "0".$timestamp_time;;
}


my $timestamp_date = ReadingsVal($name,"STROM_TimeStamp_date","0000000");;

$timestamp_date = substr($timestamp_date,1,6);;

my $time_str = "20".$timestamp_date."T".$timestamp_time."Z";

return str2time($time_str);;
},
UR_Current_Power:STROM_Total_in:.* {
my $power;
$power = ReadingsNum($name,"UR_Count_Diff",0) * 1000;
my $current = ReadingsNum($name,"UR_Current_Timestamp",0);;
my $previous = OldReadingsNum($name,"UR_Current_Timestamp",0);;

my $diff_in_seconds = $current - $previous;;

if ($diff_in_seconds < 1000){

return round($power*3600/$diff_in_seconds,3);;
}
else {
return 0;;
}
}




xeenon

#6
Internals:
   CID        esp8266_03dba1
   DEF        esp8266_03dba1
   FUUID      6327642f-f33f-194a-8e20-c106d597b4e82845
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     80
   NAME       MQTT2_esp8266_03dba1
   NR         444
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 76
   myBroker_CONN myBroker_192.168.188.164_54080
   myBroker_MSGCNT 80
   myBroker_TIME 2022-09-19 17:40:14
   READINGS:
     2022-09-19 17:38:03   IODev           myBroker
     2022-09-19 17:40:14   out_1.128.0     0
     2022-09-19 17:40:14   out_1.7.0       1475
     2022-09-19 17:40:14   out_1.8.0       17968721
     2022-09-19 17:40:14   out_2.7.0       0
     2022-09-19 17:40:14   out_2.8.0       0
     2022-09-19 17:40:14   out_3.7.0       511
     2022-09-19 17:40:14   out_3.8.1       499539
     2022-09-19 17:40:14   out_4.7.0       191
     2022-09-19 17:40:14   out_4.8.1       6852164
Attributes:
   event-on-change-reading .*
   readingList esp8266_03dba1:amis/out:.* { json2nameValue($EVENT, 'out_', $JSONMAP) }
   room       MQTT2_DEVICE


Der Zähler gibt mir keine Durchschnittswerte durch, nur Livewerte. Wobei ich noch nicht alle verstehe.

Natürlich könnte ich mit dem Event min die Daten verringern. Und das klingt auch gut, alle 15 Sekunden ist vernünftig, denke ich.

KölnSolar

Ah, verschlüsselt. Dann geht es natürlich nicht.  :'(

Wie lauten denn die topics ? Von den 9 brauchst Du vermutlich nur 3(Leistung,Zählerstände Bezug/Einspeisung).Edit: Das 1.128.0 brauchst Du nicht. Blindleistungswerte 3.7.0, 3.8.1,4.7.0,4.8.1  wohl auch nicht.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Gisbert

Hallo xeenon,

merkwürdig, dass du das Interval nicht ändern kannst.
Ein weiterer Gedanke: warum subskribierst du nicht ausschließlich die Readings, die du wirklich benötigst? Im Zweifelsfall ist das nur der Zählerstand, der sekündlich neu reinkommt.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

xeenon

#9
ZitatZur Zeit logge ich nur ein Wert, und zwar den momentanen Verbrauch. Aber auch das sind 86400 Einträge pro Tag, nur für diesen einen Wert.

Dem Zählerstand Brauch ich nicht sekundenaktuell, da reicht mir tatsächlich stündlich. Aktuell logge ich nur den Liveverbrauch, reduziert auf 1/4 Minute

Wenn meine PV Anlage fertiggestellt ist kommt mehr dazu, aber das zieht sich noch einige Monate.

Mich interessiert eben wir ihr das macht. Was loggt ihr mit und was interessiert euch?

gvzdus

Ich schreibe es "auf Platte", im 1min/5min/1h-Intervall, suche nach Minima, um zu gucken, ob bei meiner Hütte im Standby was hinzugekommen ist.
Da ich PV habe, wird darüber eine Reihe von Dingen gesteuert: Most important: MQTT-Feed über FHEM an die OpenWB, aber auch Heizkreispumpe, Tiefkühlschrank und "Sonnenschein-Bierkühlschrank".
Und eine Farbleuchte, die signalisiert, ob gerade PV-Überschuss für Waschmaschine etc. da ist.

DetlefR

Die vollständige Syntax von event-on-change-reading lautet.
Zitatattr <device> event-on-change-reading reading1[:threshold][,reading2[:threshold]...n]
Das sollte dann nicht mitevent-on-change-reading .*eingestellt werden, sondern für jedes Reading einzeln.
Wenn du den Schwellwert so groß wählst, dass eigentlich nie etwas passiert, dann kannst du mit event-min-interval den gewünschten Log Interval einstellen.

KölnSolar

ZitatMich interessiert eben wir ihr das macht. Was loggt ihr mit und was interessiert euch?
Momentanleistung(bei mir je Phase).
- Anhand bekannter Muster sehe ich, was gerade im Haus so läuft bzw. am Anfang ist es hilfreich die "bösen" Verbraucher zu identifizieren.
- Mit den Erzeugungsdaten Ermittlung des tatsächlichen Verbrauchs
- Steuerung von Geräten mache ich nicht automatisch(das mache ich eher manuell: bekannte größere Verbraucher werden bei entsprechendem PV-Überschuss eingesetzt
   (hab zwar auch eine Signalisierung in FHEM, aber die Erfahrung zeigt, dass Wetterbericht u. Fensterblick hilfreicher sind  ;))
Zählerstände
- Tagesverläufe Verbrauch im Vergleich mit Differenzierung erzeugter/bezogener Strom.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Gisbert

Ich logge im Fhem-Device (physisches Device ist ein Shelly 3EM, echt geiles Teil) den Zählerstand im 10 Sekundentakt und werte den Verbrauch mit dem ElectricityCalculator-Modul aus - das war's.
Damit sehe ich den Tagesverbrauch und den Momentanverbrauch. Das dazugehörige Diagramm hänge ich an.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

bartman121

das wichtige reading ist out_1.8.0, das ist dein Zählerstand in Wh, also bei Dir im List waren es 17968721Wh, oder halt 17968,721kWh.

Hinsichtlich der sekündlichen Datenübermittlung, bei einer momentan-Leistung von 3,6kW verbrauchst du in einer Sekunde eine Wh, das ist die letzte Stelle im Reading. ...

verbrauchst du weniger gibt es nur dumme Sprünge, weil in der einen Sekunde nichts hochgezählt hat, also Verbrauch 0 und der nächsten Sekunde hat es hochgezählt, also Verbrauch 1Wh. Selbst Energiversorgern reichen 15Min-Mittelwerte zur Bestimmung eines Lastganges.

schaffst du es aus den gelieferten Info die UserReadings selbst zu bauen oder benötigst du noch Infos?

Für Stunden-,Tages- und Monatswerte eignet sich dann das statistics-Modul.