NEWS
History Adapter erzeugt risiges fifos.json
-
Hallo
Ich habe den History Adapter aktiviert und ihn gleich mal bei sämtlich möglichen Objekten aktiviert (ca. 900).
Dies ging eine Weile ganz gut, bis mir aufgefallen ist, dass der Node-Prozess vom Controller ca. 800mb Speicher benötigt hat. Beim Beenden ging das hoch bis ca. 1.8Gb und hat ca. 3 Minuten gedauert bis der Prozess wirklich beendet war
Die Ursache war, dass das fifos.json ständig gewachsen ist und die Daten nicht so wie erwartet nach dem maxLength in Dateien ausgelagert hat.
Meiner Meinung nach stimmt in der function trimFifo(..) im statesInMemServer.js der splice nicht:
var end = (minLength > fifo[id].length) ? minLength - fifo[id].length: 0; var result = fifo[id].splice(0, end - 1); // result wird danach archiviert
die Bedingung für 'end' müsste doch umgekehrt sein (fifo.length wird grösser sein als minLength, wenn archiviert wird).
also:
var end = (minLength < fifo[id].length) ? fifo[id].length - minLength: 0;
und anschliessend gib't noch ein Problem im history.js:90 :
if (err || !res.common) {
res.common darf nicht null sein, gibt sonst einen Fehler auf Zeile :106
@Bluefox: Ich kann dir in Zukunft auch gerne Pull-Requests erzeugen (Habe aber gerade etwas Chaos in meinen Repos…)
viele Grüsse
Daniel
P.S.
Das File-basierte Archiv finde ich etwas unpraktisch für die weitere Verwendung (ausserhalb ioBroker). Ich spiele gerade damit die Daten parallel noch in einem Google Spreadsheet zu speichern oder in eine relationale DB abzulegen...
-
Hallo,
ich schreibe hier auch gleich mal dazu was mir am History-Adapter auffällt. Über zu hohen Speicherverbrauch kann ich mich nicht beklagen - bei mir ist es eher so dass die Werte nur von den letzten 24h gespeichert werden. Obwohl ich "keine automatische Löschung" eingestellt habe (s.Bild)
Wo Du gerade die dateibasierte Ablage erwähnst. Ich habe auch die Absicht, die DAten zusätzlich in eine relationale Db zu schreiben. DAzu wollte ich mir gerne mal den Aufbau dieser Db-Files anschauen. Ich habe nur eben bisher noch keine gefunden. Kannst Du mir sagen wo die eigentlich liegen müssten?
-
Hi
Warum bei dir nur die letzten 24h gespeichert werden kann ich dir nicht sagen…
Zu Ablage:
Wenn die fifos.json 'überläuft', dann werden die daten in data/history/ <tagesdatum>in einer Datei pro ID abgelegt.
Der Inhalt ist sehr einfach aufgebaut. Hier ein Beispiel eines Aussentemperatur Sensors:
data/history/20150213/history.hm-rpc.0.JEQ0089712.1.TEMPERATURE.json
[ { "val": 0.5, "ack": true, "ts": 1423867577, "from": "system.adapter.hm-rpc.0", "lc": 1423866809 }, { "val": 0.4, "ack": true, "ts": 1423866650, "from": "system.adapter.hm-rpc.0", "lc": 1423866650 }, { "val": 0.5, "ack": true, "ts": 1423866479, "from": "system.adapter.hm-rpc.0", "lc": 1423866354 }, { "val": 0.5, "ack": true, "ts": 1423866354, "from": "system.adapter.hm-rpc.0", "lc": 1423866354 }, { "val": 0.4, "ack": true, "ts": 1423865439, "from": "system.adapter.hm-rpc.0", "lc": 1423865439 } } ````</tagesdatum>
-
var end = (minLength > fifo[id].length) ? minLength - fifo[id].length: 0; var result = fifo[id].splice(0, end - 1); // result wird danach archiviert
die Bedingung für 'end' müsste doch umgekehrt sein (fifo.length wird grösser sein als minLength, wenn archiviert wird).
also:
var end = (minLength < fifo[id].length) ? fifo[id].length - minLength: 0;
und anschliessend gib't noch ein Problem im history.js:90 :
if (err || !res.common) {
res.common darf nicht null sein, gibt sonst einen Fehler auf Zeile :106 `
Da hast du recht. History habe ich jetzt gefixt.controller werde ich tick später machen.
Besten Dank!
Das File-basierte Archiv finde ich etwas unpraktisch für die weitere Verwendung (ausserhalb ioBroker). Ich spiele gerade damit die Daten parallel noch in einem Google Spreadsheet zu speichern oder in eine relationale DB abzulegen… `
Da bin ich auch solcher Meinung. Das will ich aber später ergänzen.Erst Funktionalität. Dann verbessern. Die Leute haben Probleme mit Redis/CouchDB Installation. Will ich gar nicht wissen, was die mit InfluxDB, MySQL, sqlite haben werden. Dass muss auch alles konfigurierbar sein… Über Web...
-
` > Da bin ich auch solcher Meinung. Das will ich aber später ergänzen.
Erst Funktionalität. Dann verbessern. Die Leute haben Probleme mit Redis/CouchDB Installation. Will ich gar nicht wissen, was die mit InfluxDB, MySQL, sqlite haben werden. Dass muss auch alles konfigurierbar sein… Über Web... `
:evil: Ja, stimmt. Allerdings könnte ja man z.B. eigene Speicher-module für den History Adapter schreiben, die dann halt voraussetzen, dass man mit den benötigten Technologien zurecht kommt.(Ich habe 'mein' history nun soweit erweitert, dass es Google Spreadsheets und MySQL schreiben kann - ist allerdings zur Zeit alles hart codiert; nix mit konfigurierbar. Aber vielleicht wird mir ja bald mal langweilig )
Wobei der Geofency Adapter auch schon weit oben auf meiner perönlichen Liste ist…
viele Grüsse
Daniel