NEWS
Array schreiben und lesen
-
Hallo,
bin auf den ioBroker umgesteigen, und kenne den Typ Array aus der C Programmierung. Mir ist aber unklar wie ich ein dreidimensionales Array (Datenpunkt) erstelle, die Daten schreiben und lesen kann im ioBroker. Auch habe ich keine Info über die Größe des Datenpunkts Array gefunden.
Ich möchte ca. 5 Daten jede Minute sichern und diese in einem Abstand von z.B. jede Stunde in eine CSV schreiben um den Speicher zu schonen. Das minütliche schreiben in eine CSV funktioniert bereits.
Wie und mit welcher Programmiersprache (z.B. Blockly, NodeRed,...) ist dies realisierbar ?
-
@explorer
z.b. mit einem json - das kannst du alle 5 minuten erweitern - du musst dir nur überlegen, wie viele dieser 5-minuten speicherungen es insgesamt geben soll - irgendwan wird sonst der dp zu großman kann das auch über den history adapter machen, um die daten alle 5 min zu speichern
wie lange sollen deine 5 min speicherungen den aufbwahrt werden - eine stunde dann löschen, einen tag dann löschen oder ein jahr ?
was soll in die stündliche csv schreibung - die letzte stunde oder die letzten 5 stunden oder 24 stunden
wieso csv - brauchst du das auf einem anderen rechner oder geht es nur um das ansehen der letzen stunde in einer tabelle ? das kann man über die vis realisieren. außer du mußt die daten des csv's andersweilig weiterverarbeiten
-
@liv-in-sky ja die Daten sollen zur genauen Analyse weiter verarbeitbar sein, deshalb das csv Format.
Optimal wäre am Tag 1x schreiben und wenn die Daten geschrieben sind, können diese Daten gelöscht werden.
Wenn ich die Daten jede Minute aufzeichnen würde, so benötige ich 1440 Zeilen. Deshalb wäre ein Schreiben auch alle z.B. 6 Stunden eine Möglichkeit.
Die Speicherung erfolgt auf einem externen USB-Stick.History Adapter habe ich mir auch schon angesehen, aber die Einstellungen haben mich nicht überzeugt. Wo speichert der History Adapter die Daten? Im RAM oder auch auf der SD-Karte meines Raspberry?
-
@explorer sagte in Array schreiben und lesen:
History Adapter habe ich mir auch schon angesehen, aber die Einstellungen haben mich nicht überzeugt. Wo speichert der History Adapter die Daten? Im RAM oder auch auf der SD-Karte meines Raspberry?
je nachdem was du installierst - du kannst auch eine datenbank wie zb mysql/influxdb benutzen
die standard history speichert in files - du kannst aber angeben wohinalso optimal: du brauchst jede minuten über einen tag lang - um 23:59 sollte das csv geschrieben werden
also ich würde es einfach mal ausprobieren und die zwischedaten minütlich in ein json in einem dp speichern
kennst du dich mit json und javascript aus ? es kommt auf die daten drauf an - evtl reicht auch ein array (in blockly liste genannt) - wenn die daten z.b keine kommas enthalten. dann ginge eine listeneintrag in einer liste. ich würde jedoch json bevorzugen , dann kannst du dir in der vis auch noch eine ansicht der daten basteln/coden
wie viele einzelne daten sind es eigentlich pro lesezyklus ?
-
@liv-in-sky
es sind ca. 5 Einzeldaten. Eine DB habe ich mir auch schon mal angesehen, aber da habe ich zu wenig Kenntnisse.
Die json klingt für mich am sinnvollsten. Programmieren mit Code ist für mich am übersichtlichsten. Lese mich gerade in javascript ein.... -
hier mal ein beispiel für das erstellen und hinzufügen eines jsonteils
vorher datenpunkt lesen
json (JsonData) erweitern
json wieder in dp schreibenJsonData=JSON.parse(getState(myID).val) JsonData.push({ "Datum":myDate, "VerbrauchMonat":Math.round(myDifferenz*10)/10, "AbgelesenerWert":myValue, "Timestamp": Date.now(), "Preis": Math.round(preisMyEinheit*myDifferenz*100)/100 }) setState(myID,JSON.stringify(JsonData))