Hauptmenü

Stromverbrauch pro Stunde

Begonnen von Nogga, 25 Januar 2024, 21:05:53

Vorheriges Thema - Nächstes Thema

Nogga

Ich bin jetzt kein Neuling in FHEM, stehe aber irgendwie auf dem Schlauch wie ich Nachfolgendes am Besten erreichen kann:

Ich möchte gerne meinen Stromverbrauch in kWh pro Stunde des Tages haben. Und zwar für jeden Tag aufs Neue.

Hintergrund: ich möchte gerne ein paar Tage monitoren um damit zu wissen, wie sich mein Stromverbrauch über den Tag verteilt. Später möchte ich dann meinen PV-Speicher, bzw. die Ladung aus dem Netz gezielt nutzen (Tibber = günstige Zeitfenster zum Laden).

zur Verfügung habe ich sowohl den Momentan-Verbrauch sekündlich (in Watt), als auch den Zählerstand im Sekundentakt (in kWh).
Die Werte habe ich in Devices und schreibe sie auch in eine MariaDB Datenbank.
D.h. mir würden auch ein paar clevere SQL-Statements durchaus genügen...

Any idea/Tipps?

betateilchen

Einmal pro Stunde den Stromverbrauch in kWh loggen und die Differenz zur Stunde vorher ermitteln.

Das sollte doch sogar mit Hilfe des statistics-Moduls möglich sein?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Oder den Zählerstand in kWh in der DB loggen und mit einem DbRep-Device auswerten.

attr <DbRep> aggregation     hour
attr <DbRep> timestamp_begin current_day_begin
attr <DbRep> timestamp_end   current_day_end
attr <DbRep> device          xxxx
attr <DbRep> reading         xxxx

Der Befehl zum Auswerten ist dann:

set <DbRep> diffValue

Andere Auswertungen sind dann natürlich auch problemlos umsetzbar.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

kamp

Ich habe mir einen S0 Powermeter Zähler mit einem Pico selbst gebaut und habe hier auch das Thema "Verbrauch berechnen" behandeln müssen. Kannst dir ja mal ansehen, ob du da vom Code was brauchen kannst: https://git.kmpr.at/kamp/pico-s0-powermeter

DasQ

Es gibt noch einige Lösungen via ESP und tasmota

Hier hat das einer sehr sauber und akribisch umgesetzt.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Aurel_B

Ich mache das mit einem "Userreading" pro Zähler und einem "at", welches um 23:59:55 läuft. Grundidee: im at speichere ich den aktuellen Gesamtverbrauch. Das Userreading zeigt dann die Differenz zwischen dem gespeicherten Gesamtverbrauch und dem jetzigen Gesamtverbrauch == Bezug seit der letzten Speicherung. Diese Differenz speichere ich dann kurz vor Mitternacht als Tagesverbrauch zusammen mit dem neuen aktuellen Gesamtverbrauch.

Zuerst das Userreading:

Bezug_heute_kwh:Bezug_kwh.* {ReadingsVal($name,"Bezug_kwh",0)-ReadingsVal($name,"Bezug_Stand_gestern_kwh",0)}
Dann das at:

*23:59:55 {

# Für jeden Zähler Bezug abspeichern
foreach my $Zaehler ( 'EG', '1Stock', '2Stock' ) {
    # Aktueller Tagesbezug speichern in DB und als neuer "Tagesbezug gestern"
    fhem('set dblog addLog Stromzaehler_'.$Zaehler.':Bezug_heute_kwh.* !useExcludes');
    my $aktuell = ReadingsVal('Stromzaehler_'.$Zaehler, 'Bezug_kwh', 0);
    fhem('setreading Stromzaehler_'.$Zaehler.' Bezug_Stand_gestern_kwh '.$aktuell);
}
}
.

Das sieht dann so aus:

Du darfst diesen Dateianhang nicht ansehen.

(etwas ausführlicher weil wir Hoch-/Niedertarif haben und ich diese auch noch unterscheide).

Und PS: jetzt sehe ich gerade im Screenshot, dass das at gestern und vorgestern Abend (24 & 25.1) nicht gelaufen ist. Das hat damit zu tun, dass FHEM gerade instabil läuft und immer wieder abstürzt. Das ist ein wenig die Herausforderung mit dem "at" zu einem bestimmten Zeitpunkt....

Nogga

Wow ihr seid klasse! Ich les mich mal durch die Varianten durch und melde mich zurück mit dem Ergebnis!

Guybrush

ich mach das ganz einfach über ein AT. Hier mal anhand meines Gaszählers als Beispiel:

*00:00:00 {
  fhem("set Heizung.Gas.Zaehlerstand:Reset reset");

  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  $year += 1900;

  my $timestamp = strftime("%F %T", localtime(timelocal(0, 0, 0, $mday, $mon, $year) - 1));
 
  fhem("setreading Heizung.Gas.Zaehlerstand $timestamp usageDay ".(ReadingsNum("Heizung.Gas.Zaehlerstand", "Gesamt",0) - ReadingsNum("Heizung.Gas.Zaehlerstand", "Tag",0) ));
  fhem("setreading Heizung.Gas.Zaehlerstand $timestamp Tag ".ReadingsVal("Heizung.Gas.Zaehlerstand","Gesamt",0));
}

damit hat man dann immer den Tagesverbrauch um 23:59:59 . So passen dann auch Charts und andere darauf basierende Auswertungen

tomhead

#8
Aus meiner Sicht ist das einfachste, das statistics Modul zu nutzen, es auf den Zählerstand per deltaReadings anzuwenden und dann einfach immer den Wert xyz_DayLast in ein Log zu schreiben. Da der Wert über das statistics Modul nur einmal pro Tag um kurz vor Mitternacht ermittelt bzw. geschrieben wird, braucht man dann nicht mal ein at anlegen.

Also in etwa so:
define Statistik_Stromzaehler statistics Stromzaehler_Modbus
attr Statistik_Stromzaehler deltaReadings kW_total_consumption
attr Statistik_Stromzaehler singularReadings Stromzaehler_Modbus:(kW_total_consumption):Delta:(Year|Month|Hour|Day)|

Stromzaehler_Modbus wäre dann hier in dem Beispiel das Stromzähler Device, kW_total_consumption das reading vom Zählerstand, und dann den durch das statistics Modul erzeugten Wert statKW_total_consumptionDayLast im Stromzähler Device logen.