Hauptmenü

Summieren von Daten

Begonnen von Matthias_1968, 13 Februar 2017, 19:07:23

Vorheriges Thema - Nächstes Thema

Matthias_1968

Habe zwar nicht viel geschafft, aber die Daten die ich brauche werden erstmal summiert und einen Trigger der immer um 1 hoch zählt ist auf drin.
attr SonnenStatus userReadings TagesVerbrauch {return ReadingsVal("SonnenStatus","TagesVerbrauch",0) + ReadingsVal("SonnenStatus","Verbrauch",0)},  TagesProduktion {return ReadingsVal("SonnenStatus","TagesProduktion",0) + ReadingsVal("SonnenStatus","Produktion",0)}, TagesBezug {return ReadingsVal("SonnenStatus","TagesBezug",0) + ReadingsVal("SonnenStatus","Bezug",0)}, TagesRichtung {return ReadingsVal("SonnenStatus","TagesRichtung",0) + ReadingsVal("SonnenStatus","Richtung",0)}, MI_Trigger {return ReadingsVal("SonnenStatus","MI_Trigger",0) + 1}


Jetzt kommt wieder mein Knackpunkt: Wie bekomme ich es hin, das die Daten pro Minute (jeder 12. MI_Trigger oder nach 60 Sekunden?) summiert werden?
- Soll ich DOIF nehmen?
- Was gibt es sonst für Möglichkeiten?

Danke

Thorsten Pferdekaemper

Hi,
hier hat mal jemand was für gleitende Mittelwerte gemacht; https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen
Das müsste man eigentlich an Summenbildung anpassen können. Du müsstest nur diese Zeile hier rauswerfen:

if("$cnt" > 0){$avg = sprintf("%0.1f", $cum/$cnt)};

..und ersetzen durch

return $cum;
.
Gruß,
   Thorsten
FUIP

Matthias_1968

Super,
werde ich mir gleich mal anschauen.

Danke!

Matthias_1968


Ich habe mal den Code auf das nötigste eingedampft um erstmal was übersichtliches zum laufen zu bekommen.
Das Script summiert soweit und es wird ein Mittelwert gezogen, leider immer alle 5 Sekunden und nicht wie im MinutenVerbrauch angegeben nach 60.

define SonnenStatus HTTPMOD http://192.168.2.11:8080/api/v1/status 5
attr SonnenStatus userattr reading01Name reading01Regex
attr SonnenStatus event-on-update-reading .*
attr SonnenStatus group SonnenBatterie
attr SonnenStatus icon measure_photovoltaic_inst
attr SonnenStatus reading01Name Verbrauch
attr SonnenStatus reading01Regex Consumption_W":([\d\.]+)
attr SonnenStatus room Sonnenbatterie
attr SonnenStatus userReadings TagesVerbrauch {return ReadingsVal("SonnenStatus","TagesVerbrauch",0) + ReadingsVal("SonnenStatus","Verbrauch",0)}, MinutenVerbrauch {return ReadingsVal("SonnenStatus","MinutenVerbrauch",0) + ReadingsVal("SonnenStatus","Verbrauch",0)}, MinutenVerbrauch.av {movingAverage("SonnenStatus","MinutenVerbrauch",60)}, MITrigger {return ReadingsVal("SonnenStatus","MITrigger",0) + 1}

#define MinVerbrauchNotify notify SonnenStatus:MinutenVerbrauch.* {\
#   fhem('trigger SonnenStatus MinutenVerbrauch: '.movingAverage("SonnenStatus","MinutenVerbrauch",60))\
#   fhem("set SonnenStatus MinutenVerbrauch 0")\
#}

define ResetMinuten DOIF ([SonnenStatus:MITrigger:d]>=12)\
   fhem("set SonnenStatus MinutenVerbrauch 0")\
   attr ResetMinuten group SonnenBatterie
   attr ResetMinuten room Sonnenbatterie
}


Irgendwie bekomme ich den MITrigger nicht wieder auf 0.

Gruß
Matthias

Thorsten Pferdekaemper

Zitat von: Matthias_1968 am 17 Februar 2017, 20:41:20
Ich habe mal den Code auf das nötigste eingedampft um erstmal was übersichtliches zum laufen zu bekommen.
Das Script summiert soweit und es wird ein Mittelwert gezogen, leider immer alle 5 Sekunden und nicht wie im MinutenVerbrauch angegeben nach 60.
Es ist halt ein "moving average". D.h. Du bekommst immer dann einen neuen Wert, wenn ein neuer Wert dazukommt, aber der Durchschnitt ist immer über die letzten 60 Sekunden.
Gruß,
   Thorsten
FUIP

Matthias_1968

Den gleitenden Mittelwert habe ich total überlesen!

Danke!

Matthias_1968

Hallo,

erstmal Danke für die Hilfe und die Anregungen!

Ich habe meine Konfiguration soweit fertig bekommen.

FHEM habe ich aktuell auf einem Raspberry B mit 512MB laufen, der sonst nix macht ausser die Daten zu sammeln.

Hier mal meine SonnenBatterie.cfg

define SB_MinuteVerbrauch dummy
attr SB_MinuteVerbrauch DbLogInclude 1
attr SB_MinuteVerbrauch event-on-update-reading .*
attr SB_MinuteVerbrauch group SonnenWerte
attr SB_MinuteVerbrauch room Sonnenbatterie

define SB_MinuteProduktion dummy
attr SB_MinuteProduktion DbLogInclude 1
attr SB_MinuteProduktion event-on-update-reading .*
attr SB_MinuteProduktion group SonnenWerte
attr SB_MinuteProduktion room Sonnenbatterie

define SB_MinuteBezug dummy
attr SB_MinuteBezug DbLogInclude 1
attr SB_MinuteBezug event-on-update-reading .*
attr SB_MinuteBezug group SonnenWerte
attr SB_MinuteBezug room Sonnenbatterie

define SB_MinuteLaden dummy
attr SB_MinuteLaden DbLogInclude 1
attr SB_MinuteLaden event-on-update-reading .*
attr SB_MinuteLaden group SonnenWerte
attr SB_MinuteLaden room Sonnenbatterie

define SB_MinuteEntladen dummy
attr SB_MinuteEntladen DbLogInclude 1
attr SB_MinuteEntladen event-on-update-reading .*
attr SB_MinuteEntladen group SonnenWerte
attr SB_MinuteEntladen room Sonnenbatterie

define SB_MinuteBatLaden dummy
attr SB_MinuteBatLaden DbLogInclude 1
attr SB_MinuteBatLaden event-on-update-reading .*
attr SB_MinuteBatLaden group SonnenWerte
attr SB_MinuteBatLaden room Sonnenbatterie

define SB_MinuteBatEntladen dummy
attr SB_MinuteBatEntladen DbLogInclude 1
attr SB_MinuteBatEntladen event-on-update-reading .*
attr SB_MinuteBatEntladen group SonnenWerte
attr SB_MinuteBatEntladen room Sonnenbatterie

define SonnenStatus HTTPMOD http://[IP_Meiner_Batterie]:8080/api/v1/status 5
attr SonnenStatus userattr event-on-update-reading icon reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
attr SonnenStatus DbLogExclude .*
attr SonnenStatus event-on-update-reading .*
attr SonnenStatus group SonnenBatterie
attr SonnenStatus icon measure_photovoltaic_inst
attr SonnenStatus reading01Name Verbrauch
attr SonnenStatus reading01Regex Consumption_W":([\d\.]+)
attr SonnenStatus reading02Name Produktion
attr SonnenStatus reading02Regex Production_W":([\d\.]+)
attr SonnenStatus reading03Name Bezug
attr SonnenStatus reading03Regex GridFeedIn_W":([\-\d\.]+)
attr SonnenStatus reading04Name Richtung
attr SonnenStatus reading04Regex Pac_total_W":([\-\d\.]+)
attr SonnenStatus reading05Name BatterieLadung
attr SonnenStatus reading05Regex RSOC":([\d\.]+)
attr SonnenStatus reading06Name BatterieEntladung
attr SonnenStatus reading06Regex USOC":([\d\.]+)
attr SonnenStatus room Sonnenbatterie
attr SonnenStatus userReadings Avg_Verbrauch {movingAverage("SonnenStatus","Verbrauch",60)}, Avg_Produktion {movingAverage("SonnenStatus","Produktion",60)}, Avg_Bezug {movingAverage("SonnenStatus","Bezug",60)*-1}, Avg_Laden {return ReadingsVal("SonnenStatus","Richtung",0) <= "0"?movingAverage("SonnenStatus","Richtung",60)*-1:0}, Avg_Entladen {return ReadingsVal("SonnenStatus","Richtung",0) > "0"?movingAverage("SonnenStatus","Richtung",60)*-1:0}

define MY_Trigger DOIF ([+60])\
   (set SB_MinuteVerbrauch [SonnenStatus:Avg_Verbrauch])\
   (set SB_MinuteProduktion [SonnenStatus:Avg_Produktion])\
   (set SB_MinuteBezug [SonnenStatus:Avg_Bezug])\
   (set SB_MinuteLaden [SonnenStatus:Avg_Laden])\
   (set SB_MinuteEntladen [SonnenStatus:Avg_Entladen])\
   (set SB_MinuteBatLaden [SonnenStatus:BatterieLadung])\
   (set SB_MinuteBatEntladen [SonnenStatus:BatterieEntladung])\

attr MY_Trigger DbLogExclude .*
attr MY_Trigger do always
attr MY_Trigger group SonnenBatterie
attr MY_Trigger room Sonnenbatterie


Dieses Logging soll erstmal nur zur Datensammlung herhalten, die Auswertung und das Visualisieren kommt auch noch.

Später möchte ich mit FHEM2FHEM von einem Raspberry 2 darauf zugreifen.

Falls jemand Anregungen hat, Fehler oder Verbesserungspotential sieht: Ich bin für jeden Ratschlag dankbar!

Gruß
Matthias

dachkind

Kannst du mir sagen, was der Parameter "Richtung" bedeutet?

Matthias_1968

Klar,
Richtung habe ich für die Batterie gedacht.

Wenn du auf der Sonnenbatterie schaust ist das entweder Laden  oder Entladen.

Kleiner Null ist Batterie laden, größer Null ist Batterie Entladen (Einspeisen oder verbrauch)

Gruß
Matthias

Matthias_1968

Hallo,
da mich immer mal wieder Fragen zu dem Summieren von Daten bei der Sonnenbatterie erreichen:

Ich habe das Summieren der Daten durch das Einlesen der Seite eingestellt.
Der Grund war, das ich extreme Abweichungen der einzelnen Werte hatte.

Im ersten oder zweiten Quartal 2018 soll es eine API der Sonnenbatterie geben, die es ermöglicht diese in eine Homeautomation zu integrieren.

Gruß

Matthias_1968