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
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
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.
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.
Ich habe keinen anderen Leser gefunden der den MBUS Key (AES Verschlüsselung) unterstützt.
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;;
}
}
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.
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.
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
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?
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.
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 mit
event-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.
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.
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
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.
Also anstatt den Liveverbrauch zu loggen und entsprechend zu Mitteln würdest du vorschlagen den Gesamtzähler zu loggen und dann rückrechnen?
Da muss ich mir erstmal Gedanken machen wie ich das am besten umsetze. Mehr als einfache doifs hab ich noch nicht gemacht. Danke für deine Hinweise.
Ich habe mir überlegt von Filelog auf DBLog (separater Raspberry SQL Server) zu wechseln.
Ja, wenn Du die Möglichkeiten hast, das auszuwerten!
Denn das sind die spannenden Fragen: "Wie viel braucht mein Haus, wenn wir im Urlaub sind?". "Was ist das Minimum des Verbrauchs, und WTF ist der letzte Woche um 4 Watt gestiegen?".
Ich habe da mal abstrakt etwas programmiert, was man für alle möglichen Zähler nutzen kann. Die Datenmenge beim Visualisieren und Loggen ist immer die gleiche, egal ob du einmal pro Minute oder einmal pro Sekunde deine Daten bekommst. Es reicht die Angabe des Readings mit dem Zählerstand.
https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler
Moin,
ich werfe da auch noch mal was in den Ring ;-)
Alle verwendeten Komponenten basieren auf standard FHEM Devices, es gibt bei mir also kein eigenes Modul.
Die PV-Leistungsprognose kann auch separat verwendet werden und z.B. in ein Dummy schreiben.
Ich empfehle DbLog zum Daten sammeln und die Visualisierung mit Grafana.
MySQL verwende ich in 64 Bit direkt von Oracle als Docker Container.
Auch FHEM und Grafana sind als Container verwendet, damit ich nicht alles selber installieren muss.
Alle Starkverbraucher werden automatisch nach der Leistungsprognose koordiniert.
Tatsächliche Verbräuche berechne ich aus den Zählerständen und nicht aus den momentan Werten.
Für meine Zwecke reicht ein Intervall von 1 Minute und ein Schreiben ins DbLog bei event-on-change-reading, auch da erkennt man die Verbrauchssünder sehr gut.
Im Screenshot mal die Statistiken.
Für dieses Jahr komme ich schon auf eine Autarkie von 81% und da ist bereits der halbe Winter und ein BEV mit drin :-)
VG
Christian
Zitat von: xeenon am 19 September 2022, 17:43:50
[code
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
Der Zähler gibt mir keine Durchschnittswerte durch, nur Livewerte. Wobei ich noch nicht alle verstehe.
Obis_Kennziffern (https://www.messstellenbetrieb-bock.de/Obis_Kennziffern.php)
Vielen Dank für eure Antworten.
Ich habe jetzt auf eine externe MariaDB DBLog umgestellt. Ich werde jetzt ein wenig spielen und rühre mich noch mal, falls ich noch Fragen habe.
Viele Grüße