influxdb
Konfiguration
Die Informationen zur Konfiguration des Plugins sind unter Plugin ‚influxdb‘ Konfiguration beschrieben.
/etc/influxdb/influxdb.conf
Wenn UDP verwendet wird, muss der UDP-Endpunkt explizit in influxdb aktiviert werden. Der UDP-Endpunkt ist nicht auth-geschützt und ist an eine bestimmte Datenbank gebunden.
[[udp]]
enabled = true
bind-address = ":8089"
database = "smarthome"
# retention-policy = ""
Wenn Sie den HTTP-Zugang verwenden möchten, ist keine zusätzliche Konfiguration erforderlich, da der HTTP-Zugriff auf die influxdb standardmäßig aktiviert ist.
plugin.yaml
Es können globale Tags und Felder angegeben werden:
influxdb:
plugin_name: influxdb
# host: localhost
# udp_port: 8089
# keyword: influxdb
# value_field: value
# write_http: True
# http_port: 8086
tags: '{"key": "value", "foo": "bar"}'
fields: '{"key": "value", "foo": "bar"}'
items.yaml
Logging in eine Messung namens root.some_item
, Standard-Tags und
Tags/Felder wie in plugin.yaml angegeben
root:
some_item:
influxdb: 'true'
Wenn keyword
in der plugin.yaml auf sqlite
gesetzt wird, kann dies auch
als Ersatz für sqlite verwendet werden.
root:
some_item:
sqlite: 'true'
empfohlen: Loggen der Messung temp
mit einem zusätzlichen
Tag room
und Standard-Tags (einschließlich item: root.dining_temp
) und
Tags/Felder wie in plugin.yaml angegeben
root:
dining_temp:
influxdb_name: temp
influxdb_tags: '{"room": "dining"}'
In InfluxDB über UDP oder HTTP loggen
Protokollierung von Elementen in der Zeitseriendatenbank InfluxDB
Dieses Plugin ist ein Fork von influxdata
mit den folgenden
Erweiterungen:
korrekte Namensgebung
Angabe eines Namens für die Messung statt auf die ID des Elements zurückzugreifen
zusätzliche Tags oder Felder global (plugin.yaml) und/oder pro Element
Die speziellen smarthomeNG Attribute caller
, source
und dest
werden immer als Tags protokolliert.
Nur wenn ein Messungsname angegeben wird, wird automatisch auch die ID des Elements
mitprotokolliert (Tag item
) - wenn Sie keinen Messungsnamen angeben,
wird der Name auf die ID des Items zurückgreifen, was den Item-Tag
überflüssig macht
Korrektes Logging
Bitte lesen Sie die Key Konzepte und Schema Design
Insbesondere diese:
Vermeiden Sie mehr als eine Information in einem Tag <https://docs.influxdata.com/influxdb/v1.8/concepts/schema_and_data_layout/#avoid-putting-more-than-one-piece-of-information-in-one-tag>`_
Daten aus dem Database Plugin transferieren
Diese Anleitung wurde unter influxdb2 getestet und muss eventuell für influxdb1 adaptiert werden.
Pandas und influxdb_client Module für Python installieren
CSV-Dump aus dem Webinterface des Datenbank-Plugins herunterladen
Anpassen der Zugriffsparameter im unten stehenden Skript
Anpassen des Pfads zur CVS-Datei
Ausführen des Skripts
Abhängig von der Größe der Datenbank ist Geduld gefragt.
from influxdb_client import InfluxDBClient
from influxdb_client.client.write_api import SYNCHRONOUS
import pandas as pd
# ----------------------------------------------
ip = "localhost"
port = 8086
token = "******************"
org = "smarthomeng"
bucket = "shng"
value_field = "value"
str_value_field = "str_value"
csvfile = "smarthomeng_dump.csv"
# ----------------------------------------------
client = InfluxDBClient(url=f"http://{ip}:{port}", token=token, org=org)
write_api = client.write_api(write_options=SYNCHRONOUS)
df = pd.read_csv(csvfile, sep=';', header=0)
df = df.reset_index()
num_rows = len(df.index)
last_progress_percent = -1
for index, row in df.iterrows():
progress_percent = int((index/num_rows)*100)
if last_progress_percent != progress_percent:
print(f"{progress_percent}%")
last_progress_percent = progress_percent
p = {'measurement': row['item_name'], 'time': int(row['time']) * 1000000,
'tags': {'item': row['item_name']},
'fields': {value_field: row['val_num'], str_value_field: row['val_str']}
}
write_api.write(bucket=bucket, record=p)
client.close()
Web Interface
Das Plugin stellt kein Web Interface zur Verfügung.