NEWS
Daten nur einmal täglich in Influxdb schreiben
-
Hallo,
habe mir gerade die Influxdb installiert, funktioniert auch alles soweit.
Jetzt würde ich gerne die Werte aus dem Smartmeter Adapter einmal täglich in die Datenbank schreiben.
Es genügt mir z.B. nachts wenn die Sonne untergegangen ist den Wert des eingespeisten Stroms der PV einmal täglich zu erfassen.
Konnte aber nicht wirklich herausfinden wie ich dies lösen kann.Jemand einen hilfreichen Tip für mich?
Gruß
Thomas -
@murph Es gibt die Variante mit Blockly direkt in die Datenbank schreiben oder Wert in Datenpunkt schreiben und bei Veränderung in die Datenbank loggen.
-
@spacerx
Mit Blockly?
Wie muss ich mir das vorstellen?
Veränderungen hab ich gelesen, bedeutet das die Veränderung des Wertes, abgesehen davon das ich bestimmte Werte ausschließe, immer geschrieben werden?Edit:
hab gerade in Blockly mal geschaut...
Mal sehen ob das funktioniert was ich zusammen gezimmert habe. -
@murph said in Daten nur einmal täglich in Influxdb schreiben:
@spacerx
Mit Blockly?
Wie muss ich mir das vorstellen?
..Hier ein Beispiel, wie ich das mit meinem Gasverbrauch geregelt habe ..
zeit=zeit-12*3600*1000 // Vortag 12:00 Uhr mittags sendTo('influxdb.0', 'storeState', { id: ziel, state: {ts: zeit, val: wert, ack: false, from: ziel} }, result => console.log('added'));
Der Quelltext der JavaScript-Funktion ist unten dargestellt.
Im Datenpunkt tempTag wird der Verbrauch über den Tag aufsummiert. Die Blockly-Anweisung dataInfluxDB habe ich in einen CRON-Job eingeschlossen, der um 0:00 Uhr aktiv wird und die Daten schreibt. Damit diese korrekt dem vergangenen Tag zugewiesen werden, korrigiere ich den Zeitstempel um 12h.
Die sog. Arrow Function in Zeile 5 kannst du selbstverständlich weglassen.
-
@legro Danke!
Schau ich mir mal an...Möchte mir ja auch noch eine Funktion einbauen um den Ertrag des Tages anzuzeigen.
Bekomme als Wert ja nur die gesamte Einspeisung... -
@legro said in Daten nur einmal täglich in Influxdb schreiben:
@murph said in Daten nur einmal täglich in Influxdb schreiben:
@spacerx
Mit Blockly?
Wie muss ich mir das vorstellen?
..Hier ein Beispiel, wie ich das mit meinem Gasverbrauch geregelt habe ..
zeit=zeit-12*3600*1000 // Vortag 12:00 Uhr mittags sendTo('influxdb.0', 'storeState', { id: ziel, state: {ts: zeit, val: wert, ack: false, from: ziel} }, result => console.log('added'));
Der Quelltext der JavaScript-Funktion ist unten dargestellt.
Im Datenpunkt tempTag wird der Verbrauch über den Tag aufsummiert. Die Blockly-Anweisung dataInfluxDB habe ich in einen CRON-Job eingeschlossen, der um 0:00 Uhr aktiv wird und die Daten schreibt. Damit diese korrekt dem vergangenen Tag zugewiesen werden, korrigiere ich den Zeitstempel um 12h.
Die sog. Arrow Function in Zeile 5 kannst du selbstverständlich weglassen.
Vielen Dank für Dein Beispiel. Möchte das gerne nutzen um den Ölverbrauch je Tag zu speichern.
Kannst Du evtl. sagen ob diese manuelle Speicherung auch nur wieder manuell ausgelesen werden kann oder kann zB Flot darauf auch zugreifen?
Thx
-
@dieter_p said in Daten nur einmal täglich in Influxdb schreiben:
Kannst Du evtl. sagen ob diese manuelle Speicherung auch nur wieder manuell ausgelesen werden kann oder kann zB Flot darauf auch zugreifen?
Die auf diese Weise in InfluxDB geschriebenen Daten unterscheiden sich natürlich nicht von jenen, die etwa via InfluxDB-Adapter geschrieben wurden. Sie können also ganz normal wie alle Daten aus InfluxDB verwendet werden.
-
@legro
Danke. Habe erfolgreich die Tagesverbräuche von diesem Jahr eben so in die influxdB geschrieben/nachgetragen.Leider findet zB Flot diese Werte nicht. Mag sein, das es daran liegt das sie ja jetzt "manuell" geschrieben wurden und nicht über die Konfiguration eines Datenpunktes in der Admin Oberfläche. In der Datenbank drin sind sie defintiv, das sehe ich zB mit Grafana, das ich eigentlich nicht nutzen möchte. Aber egal, dank Deinem schönem Beispiel sollte auch ein Auslesen aus der dB hinzubekommen sein.
-
@dieter_p said in Daten nur einmal täglich in Influxdb schreiben:
Leider findet zB Flot diese Werte nicht. Mag sein, das es daran liegt das sie ja jetzt "manuell" geschrieben wurden und nicht über die Konfiguration eines Datenpunktes in der Admin Oberfläche. ..
Nun kenne ich Flot nur vom Hörensagen. Ich nutze Grafana und habe noch keinen Unterschied in der Verwendung der in InfluxDB gespeicherten Daten feststellen können; es ist definitiv gleichgültig, ob die Daten vom Adapter oder über sendTo in die Datenbank geschrieben wurden.
Sei versichert: Auch der Adapter verwendet letztendlich auch bloß sendTo, um die Daten in InfluxDB zu schreiben.
-
@dieter_p sagte in Daten nur einmal täglich in Influxdb schreiben:
Leider findet zB Flot diese Werte nicht.
ist der zugehörige Datenpunkt für influx konfiguriert?
wie sieht da der Datenverlauf aus? -
@homoran said in Daten nur einmal täglich in Influxdb schreiben:
@dieter_p sagte in Daten nur einmal täglich in Influxdb schreiben:
Leider findet zB Flot diese Werte nicht.
ist der zugehörige Datenpunkt für influx konfiguriert?
Nein, die Werte werden vom Blockly/Skript s.o. direkt in die Datenbank geschrieben. Entsprechend verwundert das auch nicht wirklich, da dies so auch extern von irgendeiner anderen Software passieren könnte ohne das Flot bzw. das IOBroker-Umfeld diesen DatenPunkt/Datenbezeichnung (gasTag) kennt.
Ob es Sinn macht diesen in IObroker anzulegen und für influx zu konfigurieren ohne dass der DP etwas schreibt also nur damit er "bekannt" ist, scheitert daran das er nur mit der ID: "gasTag" im root Verzeichnis liegen müßte, ob man das tun sollte, weiß ich nicht.
@legro Thx, ja am Ende was in der dB steht ist gleich. Auf dem Weg dahin ist es nur anders bzw. Flot benötigt nimmt nur per Auswahlmenü Datenpunkte die über die IObrokerObfläche dafür konfiguriert worden sind. Grafana ist da freier bzw. nicht so tief integriert in IObroker.
Also mein temporäres Fazit: Was ich am IOBroker/InfluxAdapter vorbei in die dB schreibe muß ich dann auch wieder selbst herauslesen -> eigene Queries bauen und in DPs schreiben.
-
@dieter_p sagte in Daten nur einmal täglich in Influxdb schreiben:
Nein, die Werte werden vom Blockly/Skript s.o. direkt in die Datenbank geschrieben
wie soll flot dann da ran kommen?
Flot greift auf die historischen Daten des Influxdb-Adapters zu.
Wenn da nichts konfiguriert ist, sieht flot auch nichts. -
Zu den influx- Mechanismen kann ich nichts beitragen.
Meine Erfahrung aber ist, daß gerade Energie- und Verbrauchsdaten ein Schatz für Optimierungen darstellen. Und da kommt es nicht nur auf tägliche Energiemengen an, sondern auch auf Leistungen und zeitliche Verläufe.
Deshalb sage ich mir: Alle Daten wegschreiben (gut, bei Smartmeter wird über 30 Sekunden gemittelt), Speicherplatz ist heute billig.
Zusätzlich mache ich Tages-,Wochen-, Monats-, Jahresstatistik, wobei man das mittlerweile wohl auch über fertige Adapter machen lassen kann.Kurzum - Ein Wert pro Tag wäre mir zu wenig. Man kommt immer wieder zu Fragestellungen, wo man gerne mehr Daten hätte.
-
@klassisch said in Daten nur einmal täglich in Influxdb schreiben:
.. Zusätzlich mache ich Tages-,Wochen-, Monats-, Jahresstatistik, wobei man das mittlerweile wohl auch über fertige Adapter machen lassen kann. ..
Hier habe ich dokumentiert, wie ich Tages-, Wochen-, Monats- und Jahreswerte generiere und verwalte.
-
@dieter_p said in Daten nur einmal täglich in Influxdb schreiben:
... Grafana ist da freier bzw. nicht so tief integriert in IObroker ..
Das mag ich einfach nicht glauben. Der Adapter verwendet doch ebenfalls bloß sendTo. Vielleicht erwartet Flot sog. Metadaten, die ich in meinem Beispiel nicht schreibe.
Wenn du dir genauer ansehen möchtest, was man sendTo übergeben kann, schau dir diese Anleitung auf GitHub an.
Vorsicht! Der Beispielcode enthält noch immer Fehler. In den Adapterbezeichnungen steht history statt influxdb. Auch ist im erste Beispiel die Klammersetzung falsch: statt eckige Klammern [..] müssen geschweifte {..} verwendet werden, schließlich wird hier ein Objekt übergeben.
-
@legro said in Daten nur einmal täglich in Influxdb schreiben:
@dieter_p said in Daten nur einmal täglich in Influxdb schreiben:
... Grafana ist da freier bzw. nicht so tief integriert in IObroker ..
Das mag ich einfach nicht glauben. Der Adapter verwendet doch ebenfalls bloß sendTo. Vielleicht erwartet Flot sog. Metadaten, die ich in meinem Beispiel nicht schreibe.
So wie @homoran es schreibt. Flot funktioniert nicht ohne die influxdb Instanz bzw. IOBroker. Grafana ist das völlig egal und guckt direkt in die dB.
Hier mal das Auswahlmenü von Flot:
Aber am Ende ist es halt so, wie es ist und ich komme damit zu recht. Sonstige Lösungen wären aufwendiger, haben Lücken oder gefallen mir wie Grafana eingebettet im VIS auf Grund der benötigten Ladezeit nicht. Insofern die Werte per Query wieder manuell aus der dB holen und alles tip top!
-
@legro natürlich sind die Daten jetzt wahrscheinlich korrekt in der Datenbank (mit sendTo).
@Dieter_P aber zum rausholen benötigt flot Zugriff auf den Datenpunkt. und das geht über den influxdb-Adapter sowie einen konfigurierten Datenpunkt dafür.
und zwar der DP muss konfiguriert werden unter dessen ID der Wert direkt in die InfluxDB geschrieben wurde.
Dann wird flot auch die am Adapter vorbei geschriebenen Werte sehen!Wo ist denn das Problem?
-
@dieter_p sagte in Daten nur einmal täglich in Influxdb schreiben:
Hier mal das Auswahlmenü von Flot:
und wo ist der DP ausgewählt?
oder soll flot die Werte aller IDs auf einmal darstellen? -
@dieter_p said in Daten nur einmal täglich in Influxdb schreiben:
.. Ob es Sinn macht diesen in IObroker anzulegen und für influx zu konfigurieren ohne dass der DP etwas schreibt also nur damit er "bekannt" ist, scheitert daran das er nur mit der ID: "gasTag" im root Verzeichnis liegen müßte, ob man das tun sollte, weiß ich nicht. ..
Die IDs vom InfluxDB-Adapter und sendTo müssen doch vermutlich bloß gleich lauten. Also anstelle „gasTag“ die (sehr lange) ID eintragen, die der Adapter generiert und schon sollte doch alles funktionieren.
Aber wenn bereits alles zu deiner Zufriedenheit funktioniert, ist ja alles gut.
-
@legro sagte in Daten nur einmal täglich in Influxdb schreiben:
Die IDs vom InfluxDB-Adapter und sendTo müssen doch vermutlich bloß gleich lauten.
genau das schreibe ich die ganze Zeit
@homoran sagte in Daten nur einmal täglich in Influxdb schreiben:
der DP muss konfiguriert werden unter dessen ID der Wert direkt in die InfluxDB geschrieben wurde.