Durch einen anderen
Thread bin ich auf die Existenz der CSV-Dateien gestoßen
.
Darin scheint ja alles enthalten zu sein, was man für die Auswertung benötigt.
Nachfolgend mal ein POC, wie ich mir das denke (nur ganz simpel zur Veranschaulichung, in PHP, weil ich das hier schnell so machen konnte)
Code: Alles auswählen
<?php
$day = '20200903';
$nextday = '20200904';
$keys = array(
'TimeStamp',
'Bezug',
'Einspeisung',
'PV',
'LP1',
'LP2',
'LP3',
'LPGesamt',
'Speicher Import',
'Speicher Export',
'Verbraucher 1',
'Verbraucher 1 Export',
'Verbraucher 2 Import',
'Verbraucher 2 Export',
'Verbraucher 3',
'LP4',
'LP5',
'LP6',
'LP7',
'LP8',
'Speicher SoC',
'SoC Lp1',
'SoC lp2',
'Temp1',
'Temp 2',
'Temp3',
'SmartHomeDevice1',
'SmartHomeDevice2',
'SmartHomeDevice3',
'SmartHomeDevice4',
'SmartHomeDevice5',
'SmartHomeDevice6',
'SmartHomeDevice7',
'SmartHomeDevice8',
'SmartHomeDevice9',
'SmartHomeDevice10',
'Temp4',
'Temp5',
'Temp6'
);
//Tagesdaten einlesen und aufbereiten
$data = array();
$handle = fopen('http://openwb/openWB/web/logging/data/daily/' . $day . '.csv', 'r');
while (($t = fgetcsv($handle)) !== FALSE)
{
$data[] = array_combine($keys, $t);
}
fclose($handle);
//Werte fuer 00:00 Uhr des Folgetages anhaengen, um Bezug von
//23:55 Uhr bis 00:00 Uhr mit einzubeziehen
$filepath = 'http://openwb/openWB/web/logging/data/daily/' . $nextday . '.csv';
$handle = fopen($filepath, 'r');
$line = fgets($handle); // nur erste Zeile der Datei
fclose($handle);
$t = explode(',' , $line);
$data[] = array_combine($keys, $t);
$geladen = 0;
$bezogen = 0;
$length = count($data) - 1; //Minus 1, weil letzter Eintrag zur Verarbeitung ist "2355"
for($i = 0; $i < $length; $i++)
{
//wenn geladen wurde
if ((float) $data[$i+1]['LPGesamt'] > (float) $data[$i]['LPGesamt'])
{
$teilladung = (float) $data[$i+1]['LPGesamt'] - (float) $data[$i]['LPGesamt'];
$geladen += $teilladung;
$import = (float) $data[$i+1]['Bezug'] - (float) $data[$i]['Bezug'];
$teilbezug = 0;
//falls Bezug bei Ladung war
if ($import > 0)
{
$teilbezug = $import < $teilladung ? $import : $teilladung;
$bezogen += $teilbezug;
}
$starttime = substr($data[$i]['TimeStamp'], 0, 2) . ':' .substr($data[$i]['TimeStamp'], 2, 2);
$endtime = substr($data[$i+1]['TimeStamp'], 0, 2) . ':' .substr($data[$i+1]['TimeStamp'], 2, 2);
echo 'Teilladung von ' . $starttime . ' Uhr bis ' . $endtime . ' Uhr: <b>'
. $teilladung . ' Wh</b> bei Bezug von: <b>' . $teilbezug . ' Wh</b><br>';
}
}
echo '<br>Gesamtladung: <b>' . $geladen / 1000
. ' kWh</b> bei gleichzeitigem Bezug von: <b>'
. $bezogen / 1000 . '</b> kWh <br>';
Ich denke, der Code ist selbsterklärend.
Das Ergebnis für einen Tag sieht dann so aus:
Teilladung von 08:50 Uhr bis 08:55 Uhr: 12 Wh bei Bezug von: 0 Wh
Teilladung von 08:55 Uhr bis 09:00 Uhr: 130 Wh bei Bezug von: 1 Wh
Teilladung von 09:00 Uhr bis 09:05 Uhr: 105 Wh bei Bezug von: 15 Wh
Teilladung von 09:05 Uhr bis 09:10 Uhr: 1 Wh bei Bezug von: 0 Wh
Teilladung von 09:15 Uhr bis 09:20 Uhr: 132 Wh bei Bezug von: 0 Wh
Teilladung von 09:20 Uhr bis 09:25 Uhr: 195 Wh bei Bezug von: 1 Wh
Teilladung von 09:25 Uhr bis 09:30 Uhr: 205 Wh bei Bezug von: 0 Wh
Teilladung von 09:30 Uhr bis 09:35 Uhr: 119 Wh bei Bezug von: 36 Wh
.....
.....
Teilladung von 10:45 Uhr bis 10:50 Uhr: 104 Wh bei Bezug von: 104 Wh
Teilladung von 10:50 Uhr bis 10:55 Uhr: 127 Wh bei Bezug von: 47 Wh
Teilladung von 10:55 Uhr bis 11:00 Uhr: 124 Wh bei Bezug von: 49 Wh
Teilladung von 11:00 Uhr bis 11:05 Uhr: 165 Wh bei Bezug von: 2 Wh
Teilladung von 11:05 Uhr bis 11:10 Uhr: 178 Wh bei Bezug von: 0 Wh
Teilladung von 11:10 Uhr bis 11:15 Uhr: 172 Wh bei Bezug von: 1 Wh
Teilladung von 11:15 Uhr bis 11:20 Uhr: 172 Wh bei Bezug von: 1 Wh
Teilladung von 11:20 Uhr bis 11:25 Uhr: 159 Wh bei Bezug von: 0 Wh
Teilladung von 11:25 Uhr bis 11:30 Uhr: 180 Wh bei Bezug von: 1 Wh
Teilladung von 11:30 Uhr bis 11:35 Uhr: 201 Wh bei Bezug von: 5 Wh
Teilladung von 11:35 Uhr bis 11:40 Uhr: 163 Wh bei Bezug von: 0 Wh
Teilladung von 11:40 Uhr bis 11:45 Uhr: 134 Wh bei Bezug von: 1 Wh
Teilladung von 11:45 Uhr bis 11:50 Uhr: 139 Wh bei Bezug von: 0 Wh
Teilladung von 11:50 Uhr bis 11:55 Uhr: 140 Wh bei Bezug von: 0 Wh
Teilladung von 11:55 Uhr bis 12:00 Uhr: 139 Wh bei Bezug von: 0 Wh
Teilladung von 12:00 Uhr bis 12:05 Uhr: 121 Wh bei Bezug von: 0 Wh
Teilladung von 12:05 Uhr bis 12:10 Uhr: 139 Wh bei Bezug von: 2 Wh
Teilladung von 12:10 Uhr bis 12:15 Uhr: 102 Wh bei Bezug von: 102 Wh
Teilladung von 12:15 Uhr bis 12:20 Uhr: 105 Wh bei Bezug von: 105 Wh
usw....
.....
Teilladung von 15:10 Uhr bis 15:15 Uhr: 101 Wh bei Bezug von: 88 Wh
Teilladung von 15:15 Uhr bis 15:20 Uhr: 36 Wh bei Bezug von: 24 Wh
Gesamtladung: 9.201 kWh bei gleichzeitigem Bezug von: 1.874 kWh
Wenn man die TimeStamps restauriert, kann man die Sache auch noch weiter automatisieren. Ich kann das gut und flexibel auf meinem NAS per Cronjob erledigen, ohne extra noch einmal alle Werte per MQTT zu loggen. Auch Awattar werde ich mir da interessehalber mal einbauen.
Mir genügt das. Aber eigentlich gehört die Info für jeden User zugänglich direkt in die openWB-Statistiken.