NEWS
Abruf CSV von sehr vielen History-Daten eines Datenpunktes
-
Ich zeichne die Vor- und Nachlauftemp. unserer Heizung auf und benötige jetzt die Daten für das erste Halbjahr. Über die History-Abfrage des Datenpunktes bekomme ich nur wenige Tage angezeigt (über 500 Datenpunkte). Jetzt habe ich ein Java-Script gesehen, mit dem Datenpunkte eine gewisse Zeit (eher Stunden als Tage) abgerufen werden können. Das hilft mir hier auch nicht weiter. Andere Beiträge dazu habe ich nicht gefunden.
Mein Frage also:
Wie würdet ihr die Daten vom 01.01. bis zum 30.06. eines (genauer gesagt von zwei Datenpunkten) auslesen, damit ihr eine CSV-Datei Datei erhaltet. Ich rechne mit ca 30.000 bis 50.000 Werten pro Datenpunkt.Danke für eure Hilfe!
-
Der history Adapter hat einen Befehl mit dem man die Daten abrufen kann
Da bekommst du dann ein JavaScript Array zurück.
Entweder schreibst du die Datei selber. Csv ist ja nicht so schwer
Oder du nimmst eine extra Bibliothek, die dir das sehr einfach erledigt. -
@oliverio said in Abruf CSV von sehr vielen History-Daten eines Datenpunktes:
Vielen Dank, den Eintrag zum Javascript hast ich schon gesehen, habe aber keine Ahnung, wie ich da meinen Zeitraum (01.01.-30.06.) auswähle und wo das Script das Ergebnis speichert...
-
welcher teil?
der folgende beispielcode ruft die daten der letzen 60 Minuten ab.
Zeitangabe erfolgt in Millisekunden, daher Date.now()-1000*60*60 == 3.600.000
start und ende wird per start und end definiert.
die daten werden dann im callback zurückgegebeen.
im beispiel die funktion die als funktionsparameter definiert ist, die daten sind dann in result enthalten und kann damit daann weiterverarbeitet werden.
bisher also nur in einer variable.
den genauen aufbau der variable/objekt weiß ich nicht, da musst dir das ergebnis dann mal ausgeben lassen (am besten während der entwicklung noch nicht ganz soviele daten ausgeben lassen)
im beispiel ist ja schon eine ausgabe auf die console enthalten.var end = Date.now(); sendTo('history.0', 'getHistory', { id: 'system.adapter.admin.0.memRss', options: { start: end - 3600000, end: end, aggregate: 'onchange' } }, function (result) { for (var i = 0; i < result.result.length; i++) { console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString()); } });
im nächsten schritt nimmst du die daten und bereitest die für csv auf und schreibst sie mit fs.writeFile in eine datei auf deiner festplatte
https://nodejs.org/api/fs.html#fswritefilesyncfile-data-options
hier noch ein beispiel
https://www.geeksforgeeks.org/node-js-fs-writefilesync-method/