techn. Frage zur Speicherung von Daten in Variablen

Hi Ihr,

ich habe vor Meßwerte in hoher Frequenz (voraussichtlich 1 Abfrage/5sec) aus einem Sensor abzufragen und in IPS abzuspeichern. Da pro tag eine recht hohe Anzahl an Datensätzen zusammen kommen wird (ca. 15.000 Messungen mit jeweils einem Timestamp und einem Meßwert) möchte ich diese Daten als Array in eine nicht geloggte Stringvariable schreiben, diese minütlich auslesen und aus der Datenmenge Durchschnittswerte pro Minute bilden. Diese Durchschnittswerte sollen dann in die eigentliche Meßwert-Variable (Float) mit dauerhafter Speicherung (Datenlogging) geschrieben werden. Die String-Variable soll quasi als Zwischenspeicher dienen und täglich (oder stündlich) geleert werden.

Meine Fragen dazu:

  1. wo speichert IPS diese Werte (der Stringvariable) ab? -> RAM oder logging-DB?
  2. ist sicher gestellt das nach einem Ausfall oder Neustart von IPS diese Daten noch vorhanden sind (soweit technisch möglich, wenn die Daten bspw. im RAM gehalten werden sind sie nach einem Neustart logischerweise wech)?

Stromzähler? Also ich fänd ein Modul toll, dass genau für solche Fälle mit Daten gefüttert werden kann, diese im RAM hält und in periodischen Abständen - bspw. jede Minute - den Mittelwert auf HD schreibt.

Die Werte aller StatusVariablen werden mW.in regelmäßigen Abständen + beim Shutdown in die settings.xml geschrieben. Damit sind die Variablenwerte von diesem Zeitpunkt auch nach einem Neustart vorhanden. Es werden aber keine Arrays gespeichert und grosse Stringfelder sollten auch Tabu sein.
Bei einer hohen Frequenz*Sensoranzahl sollte man doch evtl. über echtes Modul zur Aggregation nachdenken und nur die Stundenwerte an Status-Variablen übergeben. Für die Persistenz der Rohdaten muss man dann aber selber sorgen.

Tommi

Macht doch das EM1010-aller 5min.

nee, Niederschlag-Intensitätssensor :smiley:

  1. wo speichert IPS diese Werte (der Stringvariable) ab? -> RAM oder logging-DB?

Erst in den RAM und nach Default = 10min in die settings

  1. ist sicher gestellt das nach einem Ausfall oder Neustart von IPS diese Daten noch vorhanden sind (soweit technisch möglich, wenn die Daten bspw. im RAM gehalten werden sind sie nach einem Neustart logischerweise wech)?

Nach einem Ausfall sind die Daten der letzten settings aktuell, nach einem Neustart die Daten zum Zeitpunkt des anhalten des Dienstes.

Aber Vorsicht, für große Datenmengen sind Variablen nicht gedacht, das liegt an der Natur der xml. Dafür gibt es Datenbankfunktionen.

Hi Ihr, danke für die Rückmeldungen. Sieht so aus als wäre es das Beste in der String-Variablen die Werte zwischen zu speichern - aber nur für 1 Minute (da ich den Minuten-Durchschnitt berechnen will). Dann ist der Ressourcenverbrauch überschaubar, im WortCase ist 1 Minute Datenaufzeichnung verloren - damit kann ich gut leben.

Mit fällt eine vielleicht noch bessere Variante ein:

das Zwischenspeichern der Rohdaten kann ich eigentlich genau so gut (vielleicht sogar besser) in der logging.db machen - und die Rohdaten nach einem Tag (oder einer Stunde) wieder löschen… so würde die settings.xml nicht „mißbraucht“ werden

Aber Vorsicht, für große Datenmengen sind Variablen nicht gedacht, das liegt an der Natur der xml. Dafür gibt es Datenbankfunktionen.

Schöner Einfall.:smiley:

ja ja, läster Du nur :wink: war gestern etwas angeschlagen.

Ich liebe Lästern, dann fühle ich mich wie auf Arbeit.:smiley:

ich auch, aber nicht als Opfer-Anode :smiley:

nee nee, iss schon ok :wink:

ich habe mal ein Modul angefangen, dass die EM1010 Stromdaten alle 5 Minuten in eine csv Datei speichert und man darüber dann Multigraphen über den Verbrauch der einzelnen Geräte macht.

Das Modul hat den Durchschnitt der vergangenen Stunde, vergangenen Tag, vergangener Monat und vergangenes Jahr sowie einen Gesamtverbrauch und diverse Prognosen errechnet.

Bei Daten zwischen 1 und 2 Monaten war das in wenigen Sekunden ausgerechnet. Ich hatte mich extra gegen die Speicherung in der IPS-DB entschieden, um diese nicht so aufzublähen.

Das Problem war nach ca. 3 Monaten waren es bei 4 Geräten 4 CSV Dateien, die jeweils so 750kb groß waren. Schon zu diesem Zeitpunkt hat die Auswertung ca. 20 Sekunden gedauert. Auf lange Sicht also ziemlich unbenutzbar, wenn die Daten zumindest mal mindestens 12 Monate aufgezeichnet werden sollen …

Für einen neuen Versuch (der das besser umsetzt) hatte ich noch keine Zeit …

Nur so als kleine Info am Rande …

Gruß,

ernie

Ich bevorzuge dafür das Loggen in eine „Richtige“ DB, die auch analytische Funktionen unterstützt.
Man kann aber auch mit CSV u.ä. arbeiten und trotzdem die Größen drastisch reduzieren, wenn man nach Abschluss einer Zeitperiode (z.B. Tag, dann Woche oder Monat) z.B. in eine andere Datei aggregiert und die dazugehörigen Detailwerte nach einem Export/Backup ganz rauslöscht. Es kann sich daran ja nichts mehr ändern.

Tommi

Hi tommi,

das sind genau die Gründe warum ich eher zur IPS-DB tendiere.

Auf meinem Host-System der IPS-VM läuft ein MySQL. Ich denke, der nächste Schritt wird sein, es mal da rein zu loggen.

Die Hauptaufgabe des Moduls war auch eher die Auswertung und ein schönes zeichnen von Multigraphen. Woher die Daten kommen und wie Sie gespeichert werden, war eher nebensächlich …