Habib: Die ersten Versuche sind noch recht umständlich. Ich habe in EVNotify bisher keine einfach bedienbare Exportfunktion gefunden, daher starte ich das Webinterface im Browser und lasse mir mit F12 die Entwicklertools anzeigen. Im TAB "Network" findet sich der Aufruf "https://app.evnotify.de/logdetail?akey=nnnnnn&token=nnnnnnnnnnnnnnnnnnnn&id=nnnnnn". Ruft man diesen in einem separaten Browserfenster auf, erhält man das JSON File mit den Daten des Log-Eintrages mit der id=nnnnnn (diese ID sieht man jeweils in der Web-Interface URL wenn man den Log-Eintrag aufruft). Der akey ist ja persönlich bekannt.
Danach habe ich es mit folgendem Script in den SQL Server eingelesen:
DECLARE @EVNotify_Log nvarchar(max)
SELECT @EVNotify_Log = BulkColumn
FROM OPENROWSET (BULK 'E:\Auto\Skoda Enyaq iV\Laden\2021.06.29 18.43.32.json', SINGLE_CLOB) as j
SELECT [timestamp] / 10 * 10 as [timestamp],
SUM(ISNULL(soc_display, 0)) as soc_display,
SUM(ISNULL(dc_battery_voltage, 0)) as dc_battery_voltage,
SUM(ISNULL(dc_battery_current, 0)) as dc_battery_current,
SUM(ISNULL(dc_battery_power, 0)) as dc_battery_power,
SUM(ISNULL(battery_min_temperature, 0)) as battery_min_temperature,
SUM(ISNULL(battery_max_temperature, 0)) as battery_max_temperature,
SUM(ISNULL(battery_inlet_temperature, 0)) as battery_inlet_temperature
INTO Charging
FROM OPENJSON(@EVNotify_Log, '$.stats')
WITH (
[timestamp] bigint,
soc_display numeric(3,1),
dc_battery_voltage numeric(5,2),
dc_battery_current numeric(5,2),
dc_battery_power numeric(6,3),
battery_min_temperature numeric(3,1),
battery_max_temperature numeric(3,1),
battery_inlet_temperature numeric(3,1)
)
WHERE soc_display is not null or dc_battery_voltage is not null
group by [timestamp] / 10 * 10
order by [timestamp] / 10 * 10 asc
Alles anzeigen
Im Moment also eher ein proof of concept. Besser wäre es wohl, einen eigenen EVNotify Server aufzusetzen (das ist dokumentiert) und die Daten gleich in die Datenbank zu schreiben.
Die Auswertung mache ich dann in Grafana. Dort sieht die Abfrage dann etwa so aus:
SELECT
c.[timestamp] as time,
c.soc_display as value,
'SOC' as metric
FROM
Charging c
WHERE
c.[timestamp] BETWEEN CAST($__unixEpochFrom() AS BIGINT) AND CAST($__unixEpochTo() AS BIGINT)
ORDER BY
time ASC
Edit: Tippfehler beseitigt.