|
|
@ -1,6 +1,6 @@
|
|
|
|
\section{{InfluxDB}}
|
|
|
|
\section{{InfluxDB}}
|
|
|
|
|
|
|
|
|
|
|
|
InfluxDB ist eine in Go geschriebene open source \gls{TSDB}, die darauf ausgelegt ist, mit einer großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
|
|
|
|
InfluxDB ist eine in Go geschriebene Open-Source \gls{TSDB}, die darauf ausgelegt ist, mit einer großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
|
|
|
|
Im weiteren Verlauf dieses Kapitels, wird am Beispiel von Wetterdaten gezeigt, wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die Integration in
|
|
|
|
Im weiteren Verlauf dieses Kapitels, wird am Beispiel von Wetterdaten gezeigt, wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die Integration in
|
|
|
|
eigene Anwendungen ein \gls{HTTP} \gls{API} zur Verfügung, für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
|
|
|
|
eigene Anwendungen ein \gls{HTTP} \gls{API} zur Verfügung, für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
|
|
|
|
\footnote{\cite[vgl.][]{InfluxAPI}}
|
|
|
|
\footnote{\cite[vgl.][]{InfluxAPI}}
|
|
|
@ -8,29 +8,29 @@ eigene Anwendungen ein \gls{HTTP} \gls{API} zur Verfügung, für die es in viele
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{{InfluxDB Installation}}
|
|
|
|
\subsection{{InfluxDB Installation}}
|
|
|
|
|
|
|
|
|
|
|
|
Bevor InfluxDB genutzt werden kann muss es als erstes installiert werden. Am einfachsten ist dies über Docker möglich. Dazu ist es notwendig, dass Docker und Docker Compose auf dem System installiert sind.
|
|
|
|
Bevor InfluxDB genutzt werden kann, muss es als erstes installiert werden. Am einfachsten ist dies über Docker möglich. Dazu ist es notwendig, dass Docker und Docker Compose auf dem System installiert sind.
|
|
|
|
Mit Docker Desktop lassen sich die beide Tools am einfachsten installieren. Im Anhang dieser Arbeit befindet sich im Ordner Docker eine Docker Compose Datei mit dem Namen docker-compose.yml.
|
|
|
|
Mit Docker Desktop lassen sich die beide Tools am einfachsten installieren. Im Anhang dieser Arbeit befindet sich im Ordner Docker eine Docker Compose Datei mit dem Namen \glqq docker-compose.yml\grqq{}.
|
|
|
|
Zum starten der benötigten Container ist es am einfachsten, mit einem Terminal (Powershell, xterm usw.) in den Docker Ordner zu wechseln und den Befehl docker compose up -d auszuführen.
|
|
|
|
Zum starten der benötigten Container ist es am einfachsten, mit einem Terminal (Powershell, xterm usw.) in den Docker Ordner zu wechseln und den Befehl \glqq docker compose up -d\grqq{} auszuführen.
|
|
|
|
Jetzt beginnt Docker damit, die notwendigen Images herunterzuladen und zu bauen. Wenn der Befehl ohne Fehler ausgeführt worden ist, wurde InfluxDB erfolgreich installiert und kann
|
|
|
|
Jetzt beginnt Docker damit, die notwendigen Images herunterzuladen und zu bauen. Wenn der Befehl ohne Fehler ausgeführt worden ist, wurde InfluxDB erfolgreich installiert und kann
|
|
|
|
über die URL:\ \url{http://localhost:8086} aufgerufen werden. Die Login Daten sind als Umgebungsvariable in Docker Compose definiert und lauten: admin e1LjSYaFbzbJeIBC.
|
|
|
|
über die \gls{URL}:\ \url{http://localhost:8086} aufgerufen werden. Die Login Daten sind als Umgebungsvariable in Docker Compose definiert und lauten: \glqq admin\grqq{} \glqq e1LjSYaFbzbJeIBC\grqq{}.
|
|
|
|
|
|
|
|
|
|
|
|
Außerdem wurde mit diesem Befehl auch ein Jupyter Notebook in einem Docker Container gestartet. Auf diesen Container kann über die URL:\ \url{http://localhost:8888/}
|
|
|
|
Außerdem wurde mit diesem Befehl auch ein Jupyter Notebook in einem Docker Container gestartet. Auf diesen Container kann über die \gls{URL}:\ \url{http://localhost:8888/}
|
|
|
|
zugegriffen werden. Das Passwort lautet fhdw. Im Ordner work befinden sich die Notebooks mit dem in dieser Arbeit beschrieben Codes.
|
|
|
|
zugegriffen werden. Das Passwort lautet \glqq fhdw\grqq{}. Im Ordner \glqq work\grqq{} befinden sich die Notebooks mit den in dieser Arbeit beschriebenen Codes.
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{{Daten einfügen}}
|
|
|
|
\subsection{{Daten einfügen}}
|
|
|
|
|
|
|
|
|
|
|
|
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen, muss zunächst ein Bucket angelegt werden. Dazu gibt es zwei
|
|
|
|
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen, muss zunächst ein Bucket angelegt werden. Dazu gibt es zwei
|
|
|
|
Möglichkeiten. Die einfachste ist es, über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
|
|
|
|
Möglichkeiten. Die einfachste ist es, über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt \glqq Data\grqq{}
|
|
|
|
und der Reiter Buckets ausgewählt werden. Hier kann dann mit dem Button Create Bucket ein neuer Bucket angelegt werden. Bei dem anlegen kann noch eine
|
|
|
|
und der Reiter \glqq Buckets\grqq{} ausgewählt werden. Hier kann dann mit dem Button \glqq Create Bucket\grqq{} ein neuer Bucket angelegt werden. Dabei kann noch eine
|
|
|
|
Lebensdauer für die Daten ausgewählt werden, nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
|
|
|
|
Lebensdauer für die Daten ausgewählt werden, nach welcher die jeweiligen Datenpunkte gelöscht werden.
|
|
|
|
|
|
|
|
\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
|
|
|
|
|
|
|
|
|
|
|
|
%\subsection{Line Protokoll} Mit oder ohne diese Überschrift?
|
|
|
|
%\subsection{Line Protokoll} Mit oder ohne diese Überschrift?
|
|
|
|
|
|
|
|
|
|
|
|
Daten werden immer nach dem InfluxDB Line Protokoll formatiert an die Datenbank gesendet. Das Protokoll ist wie in \cref{list:lineproto}
|
|
|
|
Daten werden immer nach dem InfluxDB Line Protokoll formatiert an die Datenbank gesendet. Das Protokoll ist wie in \cref{list:lineproto}
|
|
|
|
dargestellt aufgebaut. Im ersten Teil des Line Protokolls wird der Name des Datenpunktes angegeben. Das kann zum Beispiel der Name des Sensors sein oder
|
|
|
|
dargestellt, aufgebaut. Im ersten Teil des Line Protokolls wird der Name des Datenpunktes angegeben. Das kann zum Beispiel der Name des Sensors sein oder
|
|
|
|
der Ort, an dem der Messwert genommen wurde. Wichtig ist, dass Groß- und Kleinschreibung beachtet werden muss und Unterstriche nicht
|
|
|
|
der Ort, an dem der Messwert aufgenommen wurde. Es ist Wichtig, dass Groß- und Kleinschreibung beachtet wird und Unterstriche nicht
|
|
|
|
genutzt werden dürfen. Sonderzeichen müssen mit einem Backslash \textbackslash \ %Bachslash mit Leerzeichen
|
|
|
|
genutzt werden dürfen. Sonderzeichen müssen mit einem Backslash maskiert werden. Nach dem Namen kommen, getrennt durch ein Komma, die Tags des Datenpunktes.
|
|
|
|
maskiert werden. Nach dem Namen kommen, getrennt durch ein Komma, die Tags des Datenpunktes.
|
|
|
|
|
|
|
|
Tags werden indexiert und dazu genutzt, Datenpunkte zu durchsuchen. Auch Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
|
|
|
|
Tags werden indexiert und dazu genutzt, Datenpunkte zu durchsuchen. Auch Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
|
|
|
|
zum Beispiel der Standort des Sensors oder der Name des Servers eingetragen werden, die zum Datenpunkt gehören. Die Messwerte sind mit einem
|
|
|
|
zum Beispiel der Standort des Sensors oder der Name des Servers eingetragen werden, die zum Datenpunkt gehören. Die Messwerte sind mit einem
|
|
|
|
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennten Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
|
|
|
|
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennten Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
|
|
|
@ -53,73 +53,71 @@ measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
|
|
|
|
Die im Line Protokoll formatierten Daten können jetzt entweder mithilfe eines Rest Requests oder des InfluxDB \gls{CLI} in die Datenbank übertragen werden.
|
|
|
|
Die im Line Protokoll formatierten Daten können jetzt entweder mithilfe eines Rest Requests oder des InfluxDB \gls{CLI} in die Datenbank übertragen werden.
|
|
|
|
Um diese Anfragen zu autorisieren, muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
|
|
|
|
Um diese Anfragen zu autorisieren, muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
|
|
|
|
Um einen Token zu bekommen, kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelegt werden. Der einfachste Weg ist es,
|
|
|
|
Um einen Token zu bekommen, kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelegt werden. Der einfachste Weg ist es,
|
|
|
|
den Token über das Webinterface anzulegen. Dazu wird wie beim anlegen eines Buckets zunächst der Menüpunkt Data ausgewählt und anschließend der Reiter API
|
|
|
|
den Token über das Webinterface anzulegen. Dazu wird wie beim Anlegen eines Buckets zunächst der Menüpunkt \glqq Data\grqq{} ausgewählt und anschließend der Reiter \glqq API
|
|
|
|
Tokens. Mit einem Klick auf Generate API Token kann dann ein API Token erstellt werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-api-token}, \cref{fig:load-data-add-token}}
|
|
|
|
Tokens\grqq{}. Mit einem Klick auf \glqq Generate API Token\grqq{} kann dann ein API Token erstellt werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-api-token}, \cref{fig:load-data-add-token}}
|
|
|
|
Dabei kann zwischen einem All-Access token und einem Read/Write token ausgewählt werden. Mit dem All Access Token kann auf alles zugegriffen werden.
|
|
|
|
Dabei kann zwischen einem All-Access Token und einem Read/Write Token ausgewählt werden. Mit dem All Access Token kann auf alles zugegriffen werden.
|
|
|
|
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen, ausgewählt werden, auf welchem Bucket geschrieben oder gelesen werden kann.\footnote{\cite[vgl.][]{InfluxDBToken}}
|
|
|
|
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen ausgewählt werden, auf welchem Bucket geschrieben oder gelesen werden kann.\footnote{\cite[vgl.][]{InfluxDBToken}}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{{Daten abrufen und visualisieren}}
|
|
|
|
\subsection{{Daten abrufen und visualisieren}}
|
|
|
|
|
|
|
|
|
|
|
|
Um Daten aus InfluxDB abzurufen, wird die funktionale Sprache Flux genutzt. Flux wurde für das abfragen, analysieren und verarbeiten von Daten entwickelt.\footnote{\cite[vgl.][]{InfluxFlux}}
|
|
|
|
Um Daten aus InfluxDB abzurufen, wird die funktionale Sprache Flux genutzt. Flux wurde für das abfragen, analysieren und verarbeiten von Daten entwickelt.\footnote{\cite[vgl.][]{InfluxFlux}}
|
|
|
|
Flux kann unter anderem im influxDB Webinterface oder über die InfluxDB \gls{API} sowie über den InfluxDB \gls{CLI} CLient ausgeführt werden.
|
|
|
|
Flux kann unter anderem im influxDB Webinterface oder über die InfluxDB \gls{API} sowie über den InfluxDB \gls{CLI} CLient ausgeführt werden.\footnote{\cite[vgl.][]{InfluxExecQuery}}
|
|
|
|
\footnote{\cite[vgl.][]{InfluxExecQuery}}
|
|
|
|
|
|
|
|
%https://docs.influxdata.com/influxdb/cloud/query-data/execute-queries/.
|
|
|
|
%https://docs.influxdata.com/influxdb/cloud/query-data/execute-queries/.
|
|
|
|
|
|
|
|
|
|
|
|
Am einfachsten ist es, Flux mit Code Beispielen zu erklären. Die Zeilenangaben in diesem Kapitel beziehen sich auf das \cref{list:influxFlux}.
|
|
|
|
Am einfachsten ist es, Flux mit Code Beispielen zu erklären. Die Zeilenangaben in diesem Kapitel beziehen sich auf das \cref{list:influxFlux}.
|
|
|
|
Damit Daten abgefragt werden können, muss als erstes ein Bucket ausgewählt werden.
|
|
|
|
Damit Daten abgefragt werden können, muss als erstes ein Bucket ausgewählt werden.
|
|
|
|
In Zeile 1 wird dazu das from Statement genutzt um den Bucket mit dem Namen test-bucket auszuwählen. Aus Performance Gründen
|
|
|
|
In Zeile 1 wird dazu das \glqq from()\grqq{} Statement genutzt, um den Bucket mit dem Namen \glqq test-bucket\grqq{} auszuwählen. Aus Performance Gründen
|
|
|
|
erlaubt Flux keine Abfragen ohne die Angebe eines Zeitbereiches, der die Datenmenge einschränkt. Dieser Bereich kann mithilfe
|
|
|
|
erlaubt Flux keine Abfragen ohne die Angabe eines Zeitbereiches, der die Datenmenge einschränkt. Dieser Bereich kann mithilfe
|
|
|
|
des range Statements ausgewählt werden, wobei es zwei verschiedene Möglichkeiten gibt. Die erste ist, mithilfe des start Parameters,
|
|
|
|
des \glqq range()\grqq{} Statements ausgewählt werden, wobei es zwei verschiedene Möglichkeiten gibt. Die erste ist, mithilfe des \glqq start:\grqq{} Parameters
|
|
|
|
die Zeit relativ zum Zeitpunkt der Ausführung anzugeben. In Zeile 2 des Beispiels wird der Zeitbereich auf die letzte Stunde festgelegten.
|
|
|
|
die Zeit relativ zum Zeitpunkt der Ausführung anzugeben. In Zeile 2 des Beispiels wird der Zeitbereich auf die letzte Stunde festgelegt.
|
|
|
|
Zusätzlich zum Startparameter kann auch der Stop-Parameter angeben werden, welcher wie in Zeile 5 zu sehen, angibt bis wann die Daten
|
|
|
|
Zusätzlich zum Startparameter kann auch der Stop-Parameter angeben werden, welcher wie in Zeile 5 zu sehen, angibt, bis wann die Daten
|
|
|
|
abgerufen werden. In Zeile 5 würden die Daten von 14:00 bis 14:50 abgerufen werden wenn die Abfrage um 15 Uhr verarbeitet wird.
|
|
|
|
abgerufen werden. In Zeile 5 würden die Daten von 14:00 bis 14:50 Uhr abgerufen werden, wenn die Abfrage um 15 Uhr verarbeitet wird.
|
|
|
|
Die zweite Möglichkeit ist es, den Zeitbereich mit absoluten Werten einzuschränken,was wie in Zeile 8 zu sehen, gemacht wird.
|
|
|
|
Die zweite Möglichkeit ist es, den Zeitbereich mit absoluten Werten einzuschränken, was wie in Zeile 8 zu sehen, gemacht wird.
|
|
|
|
Zusätzlich zu den Zeitbereichen können auch weitere Filter auf die Daten angewendet werden. Dazu wird die Filter Funktion genutzt.
|
|
|
|
Zusätzlich zu den Zeitbereichen können auch weitere Filter auf die Daten angewendet werden. Dazu wird die Filterfunktion genutzt.
|
|
|
|
Mit dieser Funktion wird über die Datenpunkte der Datenbank iteriert. Innerhalb dieser Funktion wird eine weitere Funktion als Parameter übergeben,
|
|
|
|
Mit dieser Funktion wird über die Datenpunkte der Datenbank iteriert. Innerhalb dieser Funktion wird eine weitere Funktion als Parameter übergeben,
|
|
|
|
welche die Daten filtert. Wenn die Funktion false zurückgibt, wird dieser Datenpunkt verworfen, falls jedoch ein true zurückgegeben wird, werden
|
|
|
|
welche die Daten filtert. Wenn die Funktion \glqq false\grqq{} zurückgibt, wird dieser Datenpunkt verworfen. Falls jedoch ein \glqq true\grqq{} zurückgegeben wird, werden
|
|
|
|
die Daten weiter verarbeiten oder ausgegeben. Im Fall von Zeile 12 wird der Datenpunkt, auf welchen der iterator gerade verweist, in die Variable r gespeichert.
|
|
|
|
die Daten weiter verarbeitet oder ausgegeben. Im Fall von Zeile 12 wird der Datenpunkt, auf welchen der iterator gerade verweist, in die Variable \glqq r\grqq{} gespeichert.
|
|
|
|
Über r.\_measurement kann nach dem Namen eines Datenpunktes
|
|
|
|
Über \glqq r.\_measurement\grqq{} kann nach dem Namen eines Datenpunktes
|
|
|
|
und mit r.\_field nach dem Namen eines Messwertes gefiltert werden. Im letzten Schritt werden über die yield() Funktion
|
|
|
|
und mit \glqq r.\_field\grqq{} nach dem Namen eines Messwertes gefiltert werden. Im letzten Schritt werden über die \glqq yield()\grqq{} Funktion
|
|
|
|
die Daten ausgegeben. Das ist nur erforderlich, wenn mehrere Flux Abfragen zu einer kombiniert werden.\footnote{\cite[vgl.][]{InfluxFluxQuery}}
|
|
|
|
die Daten ausgegeben. Das ist nur erforderlich, wenn mehrere Flux Abfragen zu einer kombiniert werden.\footnote{\cite[vgl.][]{InfluxFluxQuery}}
|
|
|
|
%https://docs.influxdata.com/influxdb/cloud/query-data/get-started/query-influxdb/
|
|
|
|
%https://docs.influxdata.com/influxdb/cloud/query-data/get-started/query-influxdb/
|
|
|
|
Alternativ können Flux Querys auch über den Query Builder im InfluxDB Web \gls{UI} erstellt werden.\footnote{\cite[vgl.][]{InfluxDBDataExplorer}}
|
|
|
|
Alternativ können Flux Querys auch über den Query Builder im InfluxDB Web \gls{UI} erstellt werden.\footnote{\cite[vgl.][]{InfluxDBDataExplorer}}
|
|
|
|
|
|
|
|
|
|
|
|
Es ist nicht immer erforderlich die Daten aus der Datenbank auszulesen, wenn diese visualisiert werden sollen.
|
|
|
|
Es ist nicht immer erforderlich, die Daten aus der Datenbank auszulesen, wenn diese visualisiert werden sollen.
|
|
|
|
Mithilfe des InfluxDB Webinterface ist es möglich, Daten zu visualisieren. Vorher ist es allerdings notwendig die zu visualisierenden Daten mithilfe eins Flux
|
|
|
|
Mithilfe des InfluxDB Webinterface ist es möglich, Daten zu visualisieren. Vorher ist es allerdings notwendig, die zu visualisierenden Daten mithilfe eins Flux
|
|
|
|
Query abzufragen,
|
|
|
|
Query abzufragen.
|
|
|
|
%bevor die Daten Visualisiert werden können müssen diese erst mithilfe eines Flux Query abgefragt werden.
|
|
|
|
%bevor die Daten Visualisiert werden können müssen diese erst mithilfe eines Flux Query abgefragt werden.
|
|
|
|
dazu kann entweder selbst ein Query geschrieben werden, oder der eingebaute
|
|
|
|
Dazu kann entweder selbst ein Query geschrieben werden oder der eingebaute
|
|
|
|
Query Builder genutzt werden.\footnote{\cite[vgl.][]{InfluxDBDataExplorer}} Danach lassen sich die Daten als Graph, Heatmap, Histogramm, Scatterplot und weiteren Diagrammtypen anzeigen.\footnote{\cite[vgl.][]{InfluxDBGraph}}
|
|
|
|
Query Builder genutzt werden.\footnote{\cite[vgl.][]{InfluxDBDataExplorer}} Danach lassen sich die Daten als Graph, Heatmap, Histogramm, Scatterplot und weiteren Diagrammtypen anzeigen.\footnote{\cite[vgl.][]{InfluxDBGraph}}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{Python Library}
|
|
|
|
\subsection{Python Library}
|
|
|
|
|
|
|
|
|
|
|
|
Um nicht selbst eigene API Anfragen über die Rest API schreiben zu müssen, gibt es für Python und andere Sprachen fertige
|
|
|
|
Um nicht selbst eigene API Anfragen über die Rest API schreiben zu müssen, gibt es für Python und andere Sprachen fertige
|
|
|
|
Bibliotheken.\footnote{\cite[vgl.][]{InfluxAPIClientLibs}} Bevor mit der Client Library gearbeitet werden kann, muss diese allerdings erst
|
|
|
|
Bibliotheken.\footnote{\cite[vgl.][]{InfluxAPIClientLibs}} Bevor mit der Client Library gearbeitet werden kann, muss diese allerdings erst
|
|
|
|
installiert und importiert werden. Am besten wird zur Installation der Python Paketmanager pip genutzt. Mit dem Befehl pip install influxdb-client
|
|
|
|
installiert und importiert werden. Am besten wird zur Installation der Python Paketmanager pip genutzt. Mit dem Befehl \glqq pip install influxdb-client\grqq{}
|
|
|
|
werden alle benötigten Pakte installiert.\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
werden alle benötigten Pakte installiert.\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
|
|
|
|
|
|
|
|
In \cref{list:influxPythonWrite} kann an einem Beispiel gesehen werden, wie Daten mithilfe von Python in die Datenbank geschrieben
|
|
|
|
In \cref{list:influxPythonWrite} kann an einem Beispiel gesehen werden, wie Daten mithilfe von Python in die Datenbank geschrieben
|
|
|
|
werden. Ein ähnliches Beispiel findet sich ausführbar und detailliert beschreiben im Jupyter Notebook Container, in der
|
|
|
|
werden. Ein ähnliches Beispiel findet sich ausführbar und detailliert beschrieben im Jupyter Notebook Container in der
|
|
|
|
Datei Grundlagen. In den ersten beiden Zeilen des Codes wird der InfluxDB Client importiert. Danach werden in Zeile
|
|
|
|
Datei \glqq Grundlagen\grqq{}. In den ersten beiden Zeilen des Codes wird der InfluxDB Client importiert. Danach werden in Zeile
|
|
|
|
vier bis sieben die benötigten Daten Bucket, Organisation, Token und \gls{URL} in Variablen geschrieben.
|
|
|
|
vier bis sieben die benötigten Daten Bucket, Organisation, Token und \gls{URL} in Variablen geschrieben.
|
|
|
|
Was in die Variablen eingetragen werden muss, wird im
|
|
|
|
Was in die Variablen eingetragen werden muss, wird im
|
|
|
|
Kapitel Daten einfügen %eventuell Link einfügen?
|
|
|
|
Kapitel \glqq Daten einfügen\grqq{} %eventuell Link einfügen?
|
|
|
|
beschreiben.\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
beschrieben.\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
|
|
|
|
|
|
|
|
In Zeile neun bis 13 wird der Client mit den hinterlegt Variablen initialisiert. Danach folgt in Zeile 15 die
|
|
|
|
In Zeile neun bis 13 wird der Client mit den hinterlegten Variablen initialisiert. Danach folgt in Zeile 15 die
|
|
|
|
Initialisierung des write clients. Als nächstes muss ein Datenpunkt erstellt werden, der in die Datenbank geschrieben werden kann.
|
|
|
|
Initialisierung des Write Clients. Als nächstes muss ein Datenpunkt erstellt werden, der in die Datenbank geschrieben werden kann.
|
|
|
|
Dieser wird in Zeile 17 bis 19 erstellt. An diesen Datenpunkt kann eine beliebige Menge an Tags und Datenfeldern
|
|
|
|
Dieser wird in Zeile 17 bis 19 erstellt. An diesem Datenpunkt kann eine beliebige Menge an Tags und Datenfeldern
|
|
|
|
über die Methoden tag und field angehängt werden. Hier im Beispiel wird der Datenpunkt my\_measurement mit dem Tag location angelegt,
|
|
|
|
über die Methoden \glqq tag\grqq{} und \glqq field\grqq{} angehängt werden. Hier im Beispiel wird der Datenpunkt \glqq my\_measurement\grqq{} mit dem Tag \glqq location\grqq{} angelegt,
|
|
|
|
welcher den Wert Paderborn hat, und dem Messwert temperature mit dem Wert 25,3. In der letzten Zeile wird dann
|
|
|
|
welcher den Wert \glqq Paderborn\grqq{} hat, und dem Messwert \glqq temperature\grqq{} mit dem Wert \glqq 25,3\grqq{}. In der letzten Zeile wird dann
|
|
|
|
der write client dazu genutzt, um diesen Datenpunkt an die Datenbank zu senden.
|
|
|
|
der Write Client dazu genutzt, um diesen Datenpunkt an die Datenbank zu senden.
|
|
|
|
|
|
|
|
|
|
|
|
Um die so in die Datenbank geschriebenen Werte wieder abzurufen, kann so wie in \cref{list:influxPythonRead} vorgegangen werden.
|
|
|
|
Um die so in die Datenbank geschriebenen Werte wieder abzurufen, kann so wie in \cref{list:influxPythonRead} vorgegangen werden.
|
|
|
|
Hier wird als erstes in Zeile 1 ein Query Client erstellt. Mit diesem Query Client kann dann wie in Zeile 2 bis 7 zu
|
|
|
|
Hier wird als erstes in Zeile 1 ein Query Client erstellt. Mit diesem Query Client kann dann wie in Zeile 2 bis 7 zu
|
|
|
|
sehen ein FLux Query ausgeführt werden. Zurückgegeben wird ein Flux Objekt mit einer Tabellen Struktur, die wie in Zeile 9 bis 11
|
|
|
|
sehen ein Flux Query ausgeführt werden. Zurückgegeben wird ein Flux Objekt mit einer Tabellenstruktur, die wie in Zeile 9 bis 11
|
|
|
|
zu sehen, einfach mit einer Schleife verarbeitete werden kann. Um auf die Daten des Objekts zuzugreifen sind die wichtigsten Methoden hier beschreiben.
|
|
|
|
zu sehen, einfach mit einer Schleife verarbeitet werden kann. Um auf die Daten des Objekts zuzugreifen sind die wichtigsten Methoden hier beschreiben.
|
|
|
|
Mit get\_measurement kann der Namen eines Datenpunktes abgerufen werden. Zusätzlich kann Mithilfe von get\_field und get\_value der Name und der Wert
|
|
|
|
Mit \glqq get\_measurement\grqq{} kann der Name eines Datenpunktes abgerufen werden. Zusätzlich kann mithilfe von \glqq get\_field\grqq{} und \glqq get\_value\grqq{} der Name und der Wert
|
|
|
|
des Messwertes im Datenpunkt abgefragt werden. Zum abfragen der Zeit wird die Methoden get\_time genutzt.
|
|
|
|
des Messwertes im Datenpunkt abgefragt werden. Zum abfragen der Zeit wird die Methode \glqq get\_time\grqq{} genutzt.\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
\footnote{\cite[vgl.][]{InfluxAPIPythonClient}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -139,16 +137,16 @@ des Messwertes im Datenpunkt abgefragt werden. Zum abfragen der Zeit wird die Me
|
|
|
|
|
|
|
|
|
|
|
|
Die Wetterdaten des \gls{DWD} können über den \gls{CDC} OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über \gls{FTP} und \gls{HTTPS} zum Download
|
|
|
|
Die Wetterdaten des \gls{DWD} können über den \gls{CDC} OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über \gls{FTP} und \gls{HTTPS} zum Download
|
|
|
|
angeboten. Unter der \gls{URL} \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute Übersicht über die zum
|
|
|
|
angeboten. Unter der \gls{URL} \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute Übersicht über die zum
|
|
|
|
Download angeboten Daten geboten. Die Werte für die aktuelle Lufttemperatur können über
|
|
|
|
Download angebotenen Daten geboten. Die Werte für die aktuelle Lufttemperatur können über
|
|
|
|
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
|
|
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
|
|
abgerufen werden. Historische Daten können über
|
|
|
|
abgerufen werden. Historische Daten können über
|
|
|
|
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
|
|
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
|
|
abgerufen werden.
|
|
|
|
abgerufen werden.
|
|
|
|
|
|
|
|
|
|
|
|
Aktuell werden auf der Webseite, für die aktuelle Lufttemperatur, ca 480 Dateien zum Download angeboten. Die meisten dieser Dateien entsprechen jeweils
|
|
|
|
Aktuell werden auf der Webseite für die aktuelle Lufttemperatur circa 480 Dateien zum Download angeboten. Die meisten dieser Dateien entsprechen jeweils
|
|
|
|
einer Messstation und je nach Tageszeit kann deswegen die Menge der Zeilen in der Datei variieren, weil immer um 00:00 eine neue Datei angefangen wird.
|
|
|
|
einer Messstation und je nach Tageszeit kann deswegen die Menge der Zeilen in der Datei variieren, weil immer um 00:00 Uhr eine neue Datei angefangen wird.
|
|
|
|
In den Zip-Dateien finden sich außerdem Metadaten über die Messtationen. Die eigentlichen Daten sind als \gls{CSV} formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} gekürzt dargestellt
|
|
|
|
In den \gls{ZIP} Dateien befinden sich außerdem Metadaten über die Messtationen. Die eigentlichen Daten sind als \gls{CSV} formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} gekürzt dargestellt wird.
|
|
|
|
In der \gls{CSV} Datei gibt es 9 Felder. Der Inhalt der Felder wird in \cref{tab:csv-explenation} beschreiben.
|
|
|
|
In der \gls{CSV} Datei gibt es 9 Felder. Der Inhalt dieser Felder wird in \cref{tab:csv-explenation} beschreiben.
|
|
|
|
|
|
|
|
|
|
|
|
%Eventuell kürzen wenn zu viele Seiten
|
|
|
|
%Eventuell kürzen wenn zu viele Seiten
|
|
|
|
\begin{figure}[bht]
|
|
|
|
\begin{figure}[bht]
|
|
|
@ -174,8 +172,8 @@ In der \gls{CSV} Datei gibt es 9 Felder. Der Inhalt der Felder wird in \cref{tab
|
|
|
|
\toprule
|
|
|
|
\toprule
|
|
|
|
Feld Name & Bedeutung \\
|
|
|
|
Feld Name & Bedeutung \\
|
|
|
|
\midrule
|
|
|
|
\midrule
|
|
|
|
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
|
|
|
|
STATION\_ID & Gibt an, von welcher Station die Werte stammen \\ \hline
|
|
|
|
MESS\_DATUM & Gibt an wann gemessen wurde im Format \%Y\%m\%d\%H\%M. Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
|
|
|
|
MESS\_DATUM & Gibt an, wann gemessen wurde im Format \%Y\%m\%d\%H\%M. Also Jahr, Monat, Tag, Stunde, Minute als eine zusammengeschriebene Zahl. \\ \hline
|
|
|
|
QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
|
|
|
|
QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
|
|
|
|
\begin{compactenum}
|
|
|
|
\begin{compactenum}
|
|
|
|
\item nur formale Kontrolle bei Dekodierung und Import
|
|
|
|
\item nur formale Kontrolle bei Dekodierung und Import
|
|
|
@ -185,7 +183,7 @@ QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
|
|
|
|
PP\_10 & Luftdruck auf Stationshöhe \\ \hline
|
|
|
|
PP\_10 & Luftdruck auf Stationshöhe \\ \hline
|
|
|
|
TT\_10 & Lufttemperatur auf 2m Höhe \\ \hline
|
|
|
|
TT\_10 & Lufttemperatur auf 2m Höhe \\ \hline
|
|
|
|
TM5\_10 & Lufttemperatur auf 5cm Höhe \\ \hline
|
|
|
|
TM5\_10 & Lufttemperatur auf 5cm Höhe \\ \hline
|
|
|
|
TD\_10 & relative Luftfeuchtigkeit auf 2m Höhe \\ \hline
|
|
|
|
TD\_10 & Relative Luftfeuchtigkeit auf 2m Höhe \\ \hline
|
|
|
|
eor & END OF RECORD" Bedeutet die Zeile ist zu Ende. \\
|
|
|
|
eor & END OF RECORD" Bedeutet die Zeile ist zu Ende. \\
|
|
|
|
\bottomrule
|
|
|
|
\bottomrule
|
|
|
|
\end{tabularx}
|
|
|
|
\end{tabularx}
|
|
|
@ -194,10 +192,10 @@ eor & END OF RECORD" Bedeutet die Zeile ist zu Ende. \\
|
|
|
|
\end{minipage}
|
|
|
|
\end{minipage}
|
|
|
|
\end{table}
|
|
|
|
\end{table}
|
|
|
|
|
|
|
|
|
|
|
|
In der Datei zehn\_now\_tu\_Beschreibung\_Stationen.txt werden die Wetterstationen beschrieben. Diese Datei ist nicht als \gls{CSV} Datei formatiert, sondern als Tabelle und erhält
|
|
|
|
In der Datei \glqq zehn\_now\_tu\_Beschreibung\_Stationen.txt\grqq{} werden die Wetterstationen beschrieben. Diese Datei ist nicht als \gls{CSV} Datei formatiert, sondern als Tabelle und erhält
|
|
|
|
Daten über die Wetterstationen. Die Daten der Stationen in der heruntergeladenen Textdatei stimmen mit den Daten der Hauptamtlichen-Messnetz-Karte überein.
|
|
|
|
Daten über die Wetterstationen. Die Daten der Stationen in der heruntergeladenen Textdatei stimmen mit den Daten der hauptamtlichen Messnetzkarte überein.
|
|
|
|
Allerdings enthält die Textdatei nicht alle Stationen, sondern nur Stationen für die auch Messwerte im Datensatz hinterlegt sind. Die Bedeutung der einzelnen
|
|
|
|
Allerdings enthält die Textdatei nicht alle Stationen, sondern nur Stationen für die auch Messwerte im Datensatz hinterlegt sind. Die Bedeutung der einzelnen
|
|
|
|
Spalten der Tabelle sind in der \cref{tab:file-stations} beschreiben.
|
|
|
|
Spalten der Tabelle werden in der \cref{tab:file-stations} beschrieben.
|
|
|
|
|
|
|
|
|
|
|
|
\begin{table}[hbt]
|
|
|
|
\begin{table}[hbt]
|
|
|
|
\centering
|
|
|
|
\centering
|
|
|
@ -208,16 +206,16 @@ Spalten der Tabelle sind in der \cref{tab:file-stations} beschreiben.
|
|
|
|
Feld Name & Bedeutung \\
|
|
|
|
Feld Name & Bedeutung \\
|
|
|
|
\midrule
|
|
|
|
\midrule
|
|
|
|
STATION\_ID & Gibt an, von welcher Station die Werte stammen \\ \hline
|
|
|
|
STATION\_ID & Gibt an, von welcher Station die Werte stammen \\ \hline
|
|
|
|
von\_datum & Datum, seit dem die Station aktiv ist. \\ \hline
|
|
|
|
von\_datum & Datum, seit dem die Station aktiv ist \\ \hline
|
|
|
|
bis\_datum & Hohe der Station. \\ \hline
|
|
|
|
bis\_datum & Höhe der Station \\ \hline
|
|
|
|
Stationshoehe & Höhe über dem Normalnullpunkt \\ \hline
|
|
|
|
Stationshoehe & Höhe über dem Normalnullpunkt \\ \hline
|
|
|
|
geoBreite & Breitengrad der Station. \\ \hline
|
|
|
|
geoBreite & Breitengrad der Station \\ \hline
|
|
|
|
geoLaenge \_10 & Längengrad der Stations. \\ \hline
|
|
|
|
geoLaenge \_10 & Längengrad der Station \\ \hline
|
|
|
|
Stationsname & Name der Station. \\ \hline
|
|
|
|
Stationsname & Name der Station \\ \hline
|
|
|
|
Bundesland & Bundesland, in dem die Station steht. \\
|
|
|
|
Bundesland & Bundesland, in dem die Station steht \\
|
|
|
|
\bottomrule
|
|
|
|
\bottomrule
|
|
|
|
\end{tabularx}
|
|
|
|
\end{tabularx}
|
|
|
|
\source{Vergleich der Werte mit der Hauptamtliches Messnetz Karte \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/zehn_now_tu_Beschreibung_Stationen.txt}} % Quelle
|
|
|
|
\source{Vergleich der Werte mit der hauptamtliches Messnetzkarte \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/zehn_now_tu_Beschreibung_Stationen.txt}} % Quelle
|
|
|
|
\label{tab:file-stations}
|
|
|
|
\label{tab:file-stations}
|
|
|
|
\end{minipage}
|
|
|
|
\end{minipage}
|
|
|
|
\end{table}
|
|
|
|
\end{table}
|
|
|
@ -227,36 +225,36 @@ Spalten der Tabelle sind in der \cref{tab:file-stations} beschreiben.
|
|
|
|
%\pagebreak %Damit die Tabelle nicht auf der falschen Seite ist.
|
|
|
|
%\pagebreak %Damit die Tabelle nicht auf der falschen Seite ist.
|
|
|
|
\subsubsection{{Wetterdaten abrufen}}
|
|
|
|
\subsubsection{{Wetterdaten abrufen}}
|
|
|
|
|
|
|
|
|
|
|
|
Um die Daten auswerten zu können müssen diese als erstes heruntergeladen und entpackt werden. Dazu wird mithilfe von BeautifulSoup aus der \gls{HTML} Seite
|
|
|
|
Um die Daten auswerten zu können, müssen diese als erstes heruntergeladen und entpackt werden. Dazu wird mithilfe von BeautifulSoup aus der \gls{HTML} Seite
|
|
|
|
des \gls{DWD} für jede Datei eine \gls{URL} ausgelesen. Die so gewonnen \gls{URL}s können dann mithilfe einer Schleife heruntergeladen werden.
|
|
|
|
des \gls{DWD} für jede Datei eine \gls{URL} ausgelesen. Die so gewonnen \gls{URL}s können dann mithilfe einer Schleife heruntergeladen werden.
|
|
|
|
Um den Messwerten eine Station zuordnen zu können, wird als erstes die Datei mit den Stationen verarbeitet. Für jede Station wird ein Objekt erstellt und in ein
|
|
|
|
Um die Messwerte eine Station zuordnen zu können, wird als erstes die Datei mit den Stationen verarbeitet. Für jede Station wird ein Objekt erstellt und in ein
|
|
|
|
dictionary gespeichert. Dadurch kann in diesem dictionary einfach über die STATIONS\_ID die passende Station gefunden werden. Weil diese Datei allerdings nicht
|
|
|
|
\glqq dictionary\grqq{} gespeichert. Dadurch kann in diesem \glqq dictionary\grqq{} einfach über die \glqq STATIONS\_ID\grqq{} die passende Station gefunden werden. Weil diese Datei allerdings nicht
|
|
|
|
\gls{CSV} formatiert ist, muss die Datei auf eine andere Art ausgewertete werden. Um die einzelnen Felder aus einer Zeile zu bekommen, wird immer so lange
|
|
|
|
\gls{CSV} formatiert ist, muss die Datei auf eine andere Art ausgewertet werden. Um die einzelnen Felder aus einer Zeile auszulesen, wird immer so lange
|
|
|
|
gelesen, bis wieder ein bestimmte Anzahl von Leerzeichen hintereinander erkannt worden ist. Die Zeichen zwischen den Leerzeichen sind dann ein ausgelesenes Feld.
|
|
|
|
gelesen bis wieder ein bestimmte Anzahl von Leerzeichen hintereinander erkannt worden ist. Die Zeichen zwischen den Leerzeichen sind dann ein ausgelesenes Feld.
|
|
|
|
Nachdem die Stationsdaten ausgewertet worden sind, werden die \gls{CSV} Dateien in einer Schleife entpackt und mithilfe der Bibliothek Pandas in ein Dataframe
|
|
|
|
Nachdem die Stationsdaten ausgewertet worden sind, werden die \gls{CSV} Dateien in einer Schleife entpackt und mithilfe der Bibliothek \glqq Pandas\grqq{} in ein Dataframe
|
|
|
|
umgewandelt. Das so erzeugte Dataframe wir im letzten Schritt mit den Daten der Stationen zusammengeführt und als Datenpunkt in InfluxDB geschrieben.
|
|
|
|
umgewandelt. Das so erzeugte Dataframe wird im letzten Schritt mit den Daten der Stationen zusammengeführt und als Datenpunkt in InfluxDB geschrieben.
|
|
|
|
Weitere Erklärungen und der Code selbst können im angehängten Jupyter notebook eingesehen und ausgeführt werden.
|
|
|
|
Weitere Erklärungen und der Code selbst können im angehängten Jupyter Notebook eingesehen und ausgeführt werden.
|
|
|
|
|
|
|
|
|
|
|
|
\subsubsection{{Wetterdaten Verarbeiten}}
|
|
|
|
\subsubsection{{Wetterdaten verarbeiten}}
|
|
|
|
|
|
|
|
|
|
|
|
Mithilfe der in die Datenbank geschriebenen Wetterdaten, ist es nun möglich die Tageshöchst- und Tiefsttemperatur
|
|
|
|
Mithilfe der in die Datenbank geschriebenen Wetterdaten ist es nun möglich, die Tages-Höchst- und Tiefsttemperatur,
|
|
|
|
sowie den Temperatur-Durchschnitt in Paderborn zu ermitteln. Der Code der dazu notwendig ist, befindet sich auch wieder im Jupyter Notebook. Als erstes
|
|
|
|
sowie den Temperatur-Durchschnitt in Paderborn zu ermitteln. Der Code, der dazu notwendig ist, befindet sich auch wieder im Jupyter Notebook. Als erstes
|
|
|
|
müssen die notwendigen Datenpunkte aus der Datenbank abgerufen werden. Dazu wird wie in Kapitel 3.3 vorgegangen. Zunächst wird ein
|
|
|
|
müssen die notwendigen Datenpunkte aus der Datenbank abgerufen werden. Dazu wird wie in Kapitel 3.3 vorgegangen. Zunächst wird ein
|
|
|
|
Flux Query geschrieben der alle Daten der Geographisch nächsten Wetterstationen Bad Lippspringe ausließt.
|
|
|
|
Flux Query geschrieben, der alle Daten der geografisch nächsten Wetterstation in Bad Lippspringe ausließt.
|
|
|
|
Die Ereignisse werden in ein FluX Objekt gespeichert, welches dann im nächsten Schritt mithilfe einer Schleife verarbeitet wird.
|
|
|
|
Die Ereignisse werden in einem Flux Objekt gespeichert, welches dann im nächsten Schritt mithilfe einer Schleife verarbeitet wird.
|
|
|
|
Zum bestimmen der Höchst- und Tiefsttemperatur, werden die beiden
|
|
|
|
Zum bestimmen der Höchst- und Tiefsttemperatur, werden die beiden
|
|
|
|
Variablen min und max definiert, welche mit einem sehr hohen bzw einem sehr niedrigem Wert initialisiert werden. Beim durchlaufen der Schleife
|
|
|
|
Variablen \glqq min\grqq{} und \glqq max\grqq{} definiert, welche mit einem sehr hohen bzw. einem sehr niedrigem Wert initialisiert werden. Beim durchlaufen der Schleife
|
|
|
|
wird immer der aus der Datenbank stammende Wert mit der Variable min und max vergleichen. Wenn der Wert größer als max ist, wird max auf den
|
|
|
|
wird immer der aus der Datenbank stammende Wert mit der Variable \glqq min\grqq{} und \glqq max\grqq{} verglichen. Wenn der Wert größer als \glqq max\grqq{} ist, wird \glqq max\grqq{} auf den
|
|
|
|
neuen größten Wert gesetzt und wenn der Wert kleiner als min, ist wird min auf den neuen kleinsten Wert gesetzt. So beinhaltet die Variable max
|
|
|
|
neuen größten Wert gesetzt und wenn der Wert kleiner als \glqq min\grqq{} ist, wird \glqq min\grqq{} auf den neuen kleinsten Wert gesetzt. So beinhaltet die Variable \glqq max\grqq{}
|
|
|
|
nach dem durchlaufen den höchsten und die Variable min den niedrigsten Wert. Für das bestimmen des Durchschnittswertes muss eine Zähler
|
|
|
|
nach dem durchlaufen den höchsten und die Variable \glqq min\grqq{} den niedrigsten Wert. Für das Bestimmen des Durchschnittswertes muss eine Zähler
|
|
|
|
Variable, in diesem Fall i, und eine Summen Variable sum erstellt werden. Die Zähler Variable wird mit jedem Schleifendurchlauf um eins hochgezählt.
|
|
|
|
Variable, in diesem Fall \glqq i\grqq{}, und eine Summen Variable \glqq sum\grqq{} erstellt werden. Die Zähler Variable wird mit jedem Schleifendurchlauf um eins hochgezählt.
|
|
|
|
Zusätzlich wird die Summen Variablen mit dem Wert innerhalb der Schleife addiert. Zum bestimmen des Durchschnittswertes muss jetzt nur noch
|
|
|
|
Zusätzlich wird die Summen Variable mit dem Wert innerhalb der Schleife addiert. Zum bestimmen des Durchschnittswertes muss jetzt nur noch
|
|
|
|
die Summe, in diesem Fall die Variablen sum, durch die Anzahl der Elemente, hier i, geteilt werden. Der Ergebnisse ist der Tagesmittelwert.
|
|
|
|
die Summe, in diesem Fall die Variable \glqq sum\grqq{} durch die Anzahl der Elemente, hier \glqq i\grqq{}, geteilt werden. Das Ergebnis ist der Tagesmittelwert.
|
|
|
|
|
|
|
|
|
|
|
|
Um die Daten in der Datenbank zu visualisieren, kann die in InfluxDB eingebaute Graph Funktion genutzt werden. Über den Query Builder
|
|
|
|
Um die Daten in der Datenbank zu visualisieren, kann die in InfluxDB eingebaute Graph Funktion genutzt werden. Über den Query Builder
|
|
|
|
können wie in \cref{fig:query-builder} zu sehen, Messtationen ausgewählt werden, zu denen Graphen anzeigen werden sollen. Außerdem
|
|
|
|
können wie in \cref{fig:query-builder} zu sehen, Messtationen ausgewählt werden, zu denen Graphen anzeigen werden sollen. Außerdem
|
|
|
|
kann hier auch ausgewählt werden, welche Felder angezeigt werden sollen. Mit einem Klick auf Submit wird ein Graph wie in
|
|
|
|
kann hier auch ausgewählt werden, welche Felder angezeigt werden sollen. Mit einem Klick auf \glqq Submit\grqq{} wird ein Graph, wie in
|
|
|
|
\cref{fig:influxdb-Graph} zu sehen, angezeigt. In diesem Graphen werden die Temperaturen von den Messtationen auf Sylt(pink) und in
|
|
|
|
\cref{fig:influxdb-Graph} zu sehen, angezeigt. In diesem Graphen werden die Temperaturen von den Messtationen auf Sylt(pink) und in
|
|
|
|
Bad Lippspringe(blau), am 27.06.2022 angezeigt.
|
|
|
|
Bad Lippspringe(blau) am 27.06.2022 angezeigt.
|
|
|
|
|
|
|
|
|
|
|
|
Weitere Bespiele für das verarbeiten der Wetterdaten können im Jupyter Notebook gefunden werden.
|
|
|
|
Weitere Bespiele für das Verarbeiten der Wetterdaten können im Jupyter Notebook gefunden werden.
|