FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cb2sela am 13 Februar 2020, 18:59:15

Titel: [GELÖST] Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: cb2sela am 13 Februar 2020, 18:59:15
Hallo zusammen,

ich versuche mich aktuell am Modul statistics und habs jetzt halbwegs soweit, dass fast alles geht.

Allerdings haben wir ja jetzt bereits Mitte Februar und ich bekomme es nicht hin, für die berechneten Monats- und Jahreswerte einen Offset / Preset vorzugeben, also meine Readings statZaehlerstandYear und statZaehlerstandMonth mit den mir bekannten Werten vorzubelegen.

Etwas in der Art
setreading MQTT2_Wasserzaehler statZaehlerstandYear 12414
setreading MQTT2_Wasserzaehler statZaehlerstandMonth 2069
setreading MQTT2_Wasserzaehler statZaehlerstandDay 179

geht leider nicht. Auch nicht nach einem set Statistik_Wasser resetStatistics all

Geht das irgendwie und wenn ja, wie?

Das Modul GasCalculator bietet ja zu diesem Zweck durchaus die Möglichkeit, die vergangenen Werte vorzubelegen.

Vielen Dank + Gruß
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: KölnSolar am 13 Februar 2020, 20:57:51
Geht meines Wissens nicht. Du könntest FHEM runterfahren, die fhem.save entsprechend editieren u. FHEM wieder starten.
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: cb2sela am 19 Februar 2020, 08:00:18
Danke für den Vorschlag. Ich habe das jetzt über mehrere Tage in mehreren Varianten immer wieder probiert, aber es funktioniert einfach nicht.

Letzter Versuch von gestern nochmal im Detail: FHEM heruntergefahren und die fhem.save editiert:


setstate ESPEasy_HAR_Strom 2020-02-18 17:34:02 statZaehlerstand Hour: 0.1200000000 Day: 4.8733330000 Month: 137.21 Year: 395.15 (since: 2020-01-01 )
setstate ESPEasy_HAR_Strom 2020-02-18 17:34:02 statZaehlerstandDay 4.8733330000
setstate ESPEasy_HAR_Strom 2020-02-17 23:59:55 statZaehlerstandDayLast 6.2466660000
setstate ESPEasy_HAR_Strom 2020-02-18 17:34:02 statZaehlerstandHour 0.1200000000
setstate ESPEasy_HAR_Strom 2020-02-18 16:59:55 statZaehlerstandHourLast 0.2000000000
setstate ESPEasy_HAR_Strom 2020-02-18 16:59:55 statZaehlerstandLast Hour: 0.000000000 Day: 0.0 Month: - Year: - (since: 2020-01-01_00:00:00 )
setstate ESPEasy_HAR_Strom 2020-02-18 17:34:02 statZaehlerstandMonth 137.21
setstate ESPEasy_HAR_Strom 2020-02-18 17:34:02 statZaehlerstandYear 395.15


FHEM wieder gestartet. Merkwürdigerweise hat er die Daten zuerst NICHT übernommen. Ich habe es dann nochmal probiert und er hat die Daten dann auch übernommen und es sah alles gut aus
(Man beachte exemplarisch das Reading statZaehlerstandYear):


     2020-02-18 17:30:03   Akt_Verbrauch   160.0
     2020-02-18 17:30:03   Count           4
     2020-02-18 17:30:03   Tagesverbrauch  4.873
     2020-02-18 17:30:03   Time            8046.00
     2020-02-18 17:30:03   Total           731.00
     2020-02-18 17:30:03   Zaehlerstand    27916.5266649995
     2020-02-18 17:34:02   presence        present
     2020-02-18 17:40:53   statZaehlerstand Hour: 0.1200000000 Day: 4.8733330000 Month: 137.2100000000 Year: 395.1500000000 (since: 2020-01-01 )
     2020-02-18 17:40:53   statZaehlerstandDay 4.8733330000
     2020-02-17 23:59:55   statZaehlerstandDayLast 6.2466660000
     2020-02-18 17:40:53   statZaehlerstandHour 0.1200000000
     2020-02-18 16:59:55   statZaehlerstandHourLast 0.2000000000
     2020-02-18 16:59:55   statZaehlerstandLast Hour: 0.000000000 Day: 0.0 Month: - Year: - (since: 2020-01-01_00:00:00 )
     2020-02-18 17:40:53   statZaehlerstandMonth 137.2100000000
     2020-02-18 17:40:53   statZaehlerstandYear 395.1500000000
     2020-02-18 17:40:53   state           present


Die Statistikwerte überleben allerdings genau einen Tageswechsel und dann ist wieder alles beim Alten. Heute Morgen haben wir wieder:


     2020-02-19 07:50:04   Akt_Verbrauch   320.0
     2020-02-19 07:50:04   Count           8
     2020-02-19 07:50:04   Tagesverbrauch  1.467
     2020-02-19 07:50:04   Time            6429.00
     2020-02-19 07:50:04   Total           220.00
     2020-02-19 07:50:04   Zaehlerstand    27919.4333319995
     2020-02-19 07:50:04   presence        present
     2020-02-19 07:50:04   statZaehlerstand Hour: 0.2466670000 Day: 1.4666670000 Month: 1.4666670000 Year: 1.4666670000 (since: 2020-02-19 )
     2020-02-19 07:50:04   statZaehlerstandDay 1.4666670000
     2020-02-18 23:59:55   statZaehlerstandDayLast 6.3133330000
     2020-02-19 07:50:04   statZaehlerstandHour 0.2466670000
     2020-02-19 06:59:55   statZaehlerstandHourLast 0.1666670000
     2020-02-19 06:59:55   statZaehlerstandLast Hour: 0.1666670000 Day: 6.3133330000 Month: - Year: - (since: 2020-01-01 )
     2020-02-19 07:50:04   statZaehlerstandMonth 1.4666670000
     2020-02-19 07:50:04   statZaehlerstandYear 1.4666670000
     2020-02-19 07:50:04   state           Cou: 8 Tim: 6429.00 Tot: 220.00


Wenn man das Forum nach statistics und fhem.save durchsucht findet man mehrere fehlgeschlagene Versuche.

Es wäre doch schön, wenn man das irgendwie sauber hinkriegen könnte.

Ggf. kann uns auch der Modulentwickler erleuchten?
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: KölnSolar am 19 Februar 2020, 08:36:30
Du hast nicht alle Daten "erwischt". Speziell vermutlich die Internals des statistics devices selbst. Du kannst z.B. im details-view unter raw definition gucken. Dort siehst Du dann mit dem vorangestellten Punkt die Internals, die auch zu ändern sind, damit es funktioniert.
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: cb2sela am 19 Februar 2020, 09:08:04
Hm. Beim statistics-device gibt es nur ein einziges hidden reading. Das könnte ich natürlich noch zurücksetzen, aber vom Namen her verspreche ich mir nicht so viel davon.

Soll .ESPEasy_HAR_Strom:Zaehlerstand LastValue dann auf den Jahresanfangswert oder was sollte da rein? Augenblicklich steht es so:


defmod Statistik_Stromverbrauch statistics ESPEasy_HAR_Strom
attr Statistik_Stromverbrauch deltaReadings Zaehlerstand
attr Statistik_Stromverbrauch ignoreDefaultAssignments 1
attr Statistik_Stromverbrauch singularReadings ESPEasy_HAR_Strom:Zaehlerstand:Delta:Hour|ESPEasy_HAR_Strom:Zaehlerstand:Delta:Day|ESPEasy_HAR_Strom:Zaehlerstand:Delta:Month|ESPEasy_HAR_Strom:Zaehlerstand:Delta:Year

setstate Statistik_Stromverbrauch Updated stats for: ESPEasy_HAR_Strom
setstate Statistik_Stromverbrauch 2020-02-19 09:00:25 .ESPEasy_HAR_Strom:Zaehlerstand LastValue: 27919.6066649995 ShowDate: 5 DecPlaces: 10
setstate Statistik_Stromverbrauch 2020-02-18 17:41:56 monitoredDevicesESPEasy ESPEasy_HAR_Strom
setstate Statistik_Stromverbrauch 2020-02-19 08:59:55 nextPeriodChangeCalc 2020-02-19 09:59:55
setstate Statistik_Stromverbrauch 2020-02-19 09:00:25 state Updated stats for: ESPEasy_HAR_Strom


Vielen Dank.
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: KölnSolar am 20 Februar 2020, 07:03:23
Ja Du hast recht, das wars nicht. :'(

Da einzige, was mir noch auffällt ist, dass ja offensichtlich die meisten statistics-readings neu angelegt wurden.
Zitat(since: 2020-02-19 )
Vielleicht wg. Inkosistenz Deiner Daten ? Ich würde sie zumindest konsistent anlegen.

Was anderes fällt mir leider auch nicht mehr ein.  :'(
Titel: Antw:Statistics Anfangswerte / Offset für Monat und Jahr
Beitrag von: cb2sela am 20 Februar 2020, 18:38:55
Trotzdem vielen Dank für die Hilfe.

Nach den vielen fehlgeschlagenen Versuchen habe ich einen richtigen Hass auf das statistics Modul entwickelt und falls jemand durch die Suche mal auf diesen Thread aufmerksam wird präsentiere ich noch kurz meine Lösung.

Ich habe die wundervolle Funktion get mit den Parametern delta-d oder delta-h entdeckt. Damit ermittle ich meine Werte direkt aus den Filelogs. Das ganze wird von einem at jeweils kurz vor der vollen Stunde aufgerufen. Damit bin ich nun mega-glücklich und habe außerdem nicht 5 Dutzend  ;) überflüssige Readings, die ich gar nicht haben wollte.


sub statistik_manuell {
        my ($sec,$min,$hour,$day,$mon,$year) = localtime();
my $datestampStartOfDay = sprintf ("%04d-%02d-%02d_00:00:00", $year+1900, $mon+1, $day );
my $datestampnow= sprintf ("%04d-%02d-%02d_%02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec );
my $cmd = "";
my $result = "";
my $match = "";

# Wasserzaehler
$cmd = "get FileLog_MQTT2_Wasserzaehler - - $datestampStartOfDay $datestampnow 4:Zaehlerstand:0:delta-d";
$result = fhem ("$cmd");
$result =~ m/\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2} (\S+)/;
$match = $1;
# Die laufende Zaehlervariable immer aktualisieren. Diese wird nicht ins Filelog geschrieben
fhem "setreading MQTT2_Wasserzaehler runningDay $match";
# Um 23:59 loggen von sumDay ins FileLog
if ($datestampnow =~ m/\d\d\d\d-\d\d-\d\d_23:59:\d\d/) {
fhem "setreading MQTT2_Wasserzaehler sumDay $match";
}

# Weitere Zaehler analog ...

}