FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Nogga am 25 Januar 2024, 21:05:53

Titel: Stromverbrauch pro Stunde
Beitrag von: Nogga am 25 Januar 2024, 21:05:53
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?
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: betateilchen am 25 Januar 2024, 22:00:00
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?
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: DS_Starter am 25 Januar 2024, 22:06:28
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.
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: kamp am 26 Januar 2024, 09:41:12
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
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: DasQ am 26 Januar 2024, 09:47:56
Es gibt noch einige Lösungen via ESP und tasmota

Hier (https://ottelo.jimdofree.com/stromz%C3%A4hler-auslesen-tasmota/) hat das einer sehr sauber und akribisch umgesetzt.
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: Aurel_B am 26 Januar 2024, 11:38:54
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:

Readings.jpg

(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....
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: Nogga am 26 Januar 2024, 21:47:00
Wow ihr seid klasse! Ich les mich mal durch die Varianten durch und melde mich zurück mit dem Ergebnis!
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: Guybrush am 26 Januar 2024, 21:57:17
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
Titel: Aw: Stromverbrauch pro Stunde
Beitrag von: tomhead am 26 Januar 2024, 22:35:37
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.