Plugin ‚database‘ Konfiguration

plugin logo

Im folgenden sind etwaige Anforderungen und unterstützte Hardware beschrieben. Danach folgt die Beschreibung, wie das Plugin database konfiguriert wird. Außerdem ist im folgenden beschrieben, wie das Plugin in den Item Definitionen genutzt werden kann. [1]

Es handelt sich bei diesem Plugin um ein system Plugin.

Beschreibung

Database plugin, mit Unterstützung für SQLite 3, MySQL/MariaDB und PostgreSQL+TimescaleDB

Anforderungen

  • Minimum SmartHomeNG Version: 1.12.2

Konfiguration

Im folgenden ist beschrieben, wie das Plugin database konfiguriert wird. Außerdem ist im folgenden beschrieben, wie das Plugin in den Item Definitionen genutzt werden kann.

Parameter

Das Plugin verfügt über folgende Parameter, die in der Datei ../etc/plugin.yaml konfiguriert werden:

connect

Die Verbindungsparameter für die connect()-Funktion des DB-API2-Treibers. Beispiel für pymysql: connect = host:127.0.0.1 | user:db_user | passwd:db_password | db:smarthome. Beispiel für psycopg2/psycopg: connect = host:127.0.0.1 | port:5432 | user:db_user | password:db_password | database:smarthome.

  • Datentyp: list(str)

copy_database

Nur für SQLite3 (driver: sqlite3): Erzeugt beim Start von SmartHomeNG eine Kopie der Datenbankdatei.

  • Datentyp: bool

  • Standardwert: False

copy_database_name

Nur für SQLite3 (driver: sqlite3): Pfad/Name der Datenbank-Kopie.

  • Datentyp: str

count_logentries

Zeigt im Web-Interface eine zusätzliche Spalte mit der Anzahl der Datenbankeinträge je Item an.

  • Datentyp: bool

  • Standardwert: False

cycle

Wie oft (in Sekunden) gepufferte Werte in die Datenbank geschrieben werden.

  • Datentyp: int

  • Standardwert: 60

default_maxage

Ist dieser Wert größer 0, gilt er als Standard-database_maxage für Items ohne eigenes database_maxage.

  • Datentyp: int

  • Standardwert: 0

  • Minimalwert: 0

default_maxage_action

Standardaktion für Items mit database_maxage, die kein eigenes database_maxage_action gesetzt haben. ‚on‘ ist ein veralteter Alias für ‚duty_cycle‘.

  • Datentyp: str

  • Standardwert: delete

default_maxage_interval

Standard-Kompaktierungsintervall für Items, die kein eigenes database_maxage_interval gesetzt haben (nur relevant, wenn database_maxage_action des Items nicht ‚delete‘ ist). Angabe in Sekunden, Minuten (m) oder Stunden (h), auch kombinierbar (z.B. ‚30m‘, ‚2h30m‘). Tage müssen in Stunden angegeben werden (z.B. 7 Tage = ‚168h‘).

  • Datentyp: str

  • Standardwert: 24h

driver

Das DB-API2-Treibermodul. Akzeptiert die echten Modulnamen (‚sqlite3‘, ‚pymysql‘, ‚psycopg2‘, ‚psycopg‘) sowie entsprechende Datenbank-Namen: ‚mysql‘/‘mariadb‘, ‚postgres‘/‘postgresql‘/‘timescale‘/‘timescaledb‘.

  • Datentyp: str

  • Standardwert: sqlite3

invalid_check_cycle

Wie oft (in Sekunden) Items mit database_invalid_after geprüft werden.

  • Datentyp: int

  • Standardwert: 60

  • Minimalwert: 1

invalid_check_grace_time

Zusätzliche Karenzzeit (in Sekunden), die nach dem Start des Plugins gewartet wird, bevor die Prüfung des invalid_check_cycle startet.

  • Datentyp: int

  • Standardwert: 60

  • Minimalwert: 0

max_aggregate_intervals

Maximale Anzahl an Kompaktierungsintervallen, die pro Durchlauf und Item verarbeitet werden - begrenzt die Last auf der Datenbank bei großen Altbeständen. Gilt nur für die Plugin-seitige Kompaktierung, nicht bei timescale_native_aggregation: true.

  • Datentyp: int

  • Standardwert: 30

  • Minimalwert: 1

max_delete_logentries

Maximale Anzahl an Datenbankeinträgen mit database_maxage-Attribut, die in einem Durchlauf gelöscht werden - begrenzt die Last auf der Datenbank bei großen Altbeständen.

  • Datentyp: int

  • Standardwert: 20000

  • Minimalwert: 1000

max_reassign_logentries

Maximale Anzahl an Datenbankeinträgen, die in einem Durchlauf neu einem Item zugewiesen werden - begrenzt die Last auf der Datenbank bei großen Datenbeständen.

  • Datentyp: int

  • Standardwert: 20000

  • Minimalwert: 100

precision

Nachkommastellen der aus der Datenbank gelesenen Werte.

  • Datentyp: int

  • Standardwert: 2

prefix

Ein Präfix, das vor die Tabellennamen des Plugins gestellt wird - nützlich, um mit anderen Tabellen in derselben Datenbank zu koexistieren.

  • Datentyp: str

removeold_cycle

Wie oft (in Sekunden) auf veraltete Datenbankeinträge (database_maxage) geprüft wird. Ohne Wirkung bei timescale_native_aggregation: true.

  • Datentyp: int

  • Standardwert: 91

sqlite_wal_mode

Nur für SQLite3 (driver: sqlite3): Versetzt die Datenbankdatei in den WAL-Journal-Modus - erlaubt parallele Schreib- und Lesevorgänge. ACHTUNG: Dies ist eine Einwegentscheidung - WAL ist eine Eigenschaft der Datenbankdatei selbst, bleibt über Neustarts hinweg bestehen und wird von jeder künftigen Verbindung (auch von anderen Tools) übernommen. Diesen Parameter später wieder auf False zu setzen, macht eine bereits umgestellte Datei nicht rückgängig.

  • Datentyp: bool

  • Standardwert: False

time_precision

Nachkommastellen (für Sekunden) der aus der Datenbank gelesenen Zeitwerte.

  • Datentyp: int

  • Standardwert: 3

  • Minimalwert: 0

  • Maximalwert: 3

timescale_chunk_interval

Nur für PostgreSQL mit timescale_hypertable aktiv: Größe der Zeitpartitionen, in die die log-Tabelle aufgeteilt wird. Angabe in Sekunden, Minuten (m) oder Stunden (h), auch kombinierbar (z.B. ‚30m‘, ‚2h30m‘). Tage müssen in Stunden angegeben werden (z.B. 7 Tage = ‚168h‘). Gilt nur für neu angelegte Partitionen, bestehende werden nicht verändert.

  • Datentyp: str

  • Standardwert: 168h

timescale_compress

Nur für PostgreSQL mit timescale_hypertable aktiv: Aktiviert native spaltenbasierte Kompression der log-Tabelle. Die aktuellste Zeitpartition bleibt unkomprimiert. Diesen Parameter auf False zurückzusetzen deaktiviert nur künftige Aktivierungsversuche, hebt bereits aktive Kompression nicht auf.

  • Datentyp: bool

  • Standardwert: False

timescale_hypertable

Nur für PostgreSQL: Aktiviert die TimescaleDB-Extension und wandelt die log-Tabelle in eine Hypertable um - beschleunigt zeitbereichsbasierte Abfragen (Graphen, Statistiken) auf großen Tabellen erheblich. Setzt voraus, dass TimescaleDB auf dem PostgreSQL-Server installiert ist; falls nicht, wird eine Warnung ausgegeben und das Feature bleibt inaktiv, der Rest des Plugins funktioniert unverändert.

  • Datentyp: bool

  • Standardwert: True

timescale_native_aggregation

Nur für PostgreSQL mit timescale_hypertable aktiv: False (Standard) nutzt die bestehende Python-seitige Kompaktierung (wie bei sqlite3/MySQL). True nutzt stattdessen TimescaleDB Continuous Aggregates. Ein Wechsel von True zurück zu False ist nicht vorgesehen und kann nicht verlustfrei erfolgen.

  • Datentyp: bool

  • Standardwert: False

timescale_native_retention

Nur für PostgreSQL mit timescale_native_aggregation aktiv: Entfernt alte Rohdaten-Zeitpartitionen automatisch auf dem Datenbank-Server, statt diese vom Plugin einzeln zu löschen. Die Löschung erfolgt partitionsweise für alle Items, nicht garantiert nach Ablauf der pro Item eingestellten Zeit. ACHTUNG: Es werden ALLE Items gelöscht, nicht nur die mit eingestelltem database_maxage. Ein unbegrenztes Aufbewahren ist in diesem Modus nicht möglich. Es wird empfohlen, default_maxage > 0 und default_maxage_action != ‚delete‘ zu setzen.

  • Datentyp: bool

  • Standardwert: False

Item Attribute

Das Plugin unterstützt folgende Item Attribute, die in den Dateien im Verzeichnis ../items verwendet werden:

database

Bei ‚yes‘ oder ‚true‘ werden Wertänderungen des Items in die Datenbank geschrieben. Bei ‚init‘ wird zusätzlich beim Start von SmartHomeNG der letzte Wert des Items aus der Datenbank gelesen.

  • Datentyp: str

database_acl

‚rw‘ (Standard) schreibt Wertänderungen normal in die Datenbank. ‚ro‘ unterdrückt das Schreiben für dieses Item - nützlich, wenn die Datenbank für dieses Item bereits Daten aus einer anderen Quelle enthält, die nicht überschrieben werden sollen.

  • Datentyp: str

  • Standardwert: rw

database_invalid_after

Maximale Zeit ohne Änderungen oder Updates, nach der ein Item automatisch als ungültig markiert wird - sinnvoll nur bei Items mit regelmäßigen Aktualisierungen (z.B. über cycle/crontab). Angabe in Sekunden, Minuten (m) oder Stunden (h), auch kombinierbar (z.B. ‚30s‘, ‚5m‘). Erfordert das Item-Attribut ‚enforce_updates‘. Nicht mit database_acl: ro kombinierbar.

  • Datentyp: str

database_maxage

Maximales Alter (in Tagen) der Datenbankeinträge, die für dieses Item behalten werden. Ohne Angabe werden die Werte unbegrenzt gespeichert.

  • Datentyp: num

  • Minimalwert: 0

database_maxage_action

Aktion, die beim Erreichen von database_maxage auf ältere Datenbankeinträge angewendet wird. ‚delete‘ (Standard) löscht die Einträge ersatzlos; jeder andere Wert ersetzt sie durch einen Kompaktierungswert pro database_maxage_interval statt sie zu löschen. ‚duty_cycle‘ (nur bool-Items) berechnet den zeitgewichteten Ein-Anteil. ‚on‘ ist ein veralteter Alias für ‚duty_cycle‘, nur aus Kompatibilitätsgründen akzeptiert. Ohne eigenen Wert gilt der Plugin-Parameter default_maxage_action.

  • Datentyp: str

database_maxage_interval

Kompaktierungsintervall, nur relevant wenn database_maxage_action nicht ‚delete‘ ist. Angabe in Sekunden, Minuten (m) oder Stunden (h), auch kombinierbar (z.B. ‚30m‘, ‚2h30m‘). Tage müssen in Stunden angegeben werden (z.B. 7 Tage = ‚168h‘). Ohne eigenen Wert gilt der Plugin-Parameter default_maxage_interval.

  • Datentyp: str

database_write_on_shutdown

Schreibt den Itemwert beim Beenden von SmartHomeNG erneut in die Datenbank, auch ohne echte Änderung (Standard: True). Bei False entfällt dieses abschließende Schreiben.

  • Datentyp: bool

  • Standardwert: True

Item-Structs

Das Plugin stellt die folgenden Item-Structs zur Verfügung. Diese Informationen sind aus der plugin.yaml entnommen und möglicherweise nicht vollständig.

max

  • max (foo, —)
    • db_max (num, —)

min

  • min (foo, —)
    • db_min (num, —)

Logik Parameter

Das Plugin verfügt über folgende Parameter, die in der Datei ../etc/logic.yaml konfiguriert werden:

Keine Logik Parameter in den Metadaten beschrieben - Bitte in der README nachsehen (siehe Fußnote)

Plugin Functions

Das Plugin verfügt über folgende öffentliche Funktionen, die z.B. in Logiken aufgerufen werden können.

cleanup()

Räumt die Datenbank auf (löscht Item- und Log-Datenbankeinträge, die zu keinem konfigurierten Item mehr gehören). Diese Methode entfernt alle Item- und Log-Datenbankeinträge von Items, die aktuell nicht zur Protokollierung in der Datenbank konfiguriert sind. Vorsicht bei der Verwendung in einem Setup mit mehreren Plugin-Instanzen.

  • Die Funktion liefert kein Ergebnis

db()

Liefert das Low-Level-Datenbankobjekt.

  • Ergebnistyp der Funktion: foo

deleteItem(id, cur)

Löscht einen Item-Datenbankeintrag und die zugehörigen Log-Datenbankeinträge.

  • Die Funktion liefert kein Ergebnis

Parameter:

id

Datenbank-ID des Items, dessen Eintrag gelöscht wird.

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

deleteLog(id, time, time_start, time_end, changed, changed_start, changed_end, cur)

Löscht die Log-Datenbankeinträge für die angegebene Datenbank-ID.

  • Die Funktion liefert kein Ergebnis

Parameter:

id

Datenbank-ID des Items, dessen Einträge gelöscht werden.

  • Datentyp: int

time

Schränkt das Löschen auf die angegebene Zeit ein (optional).

  • Datentyp: int

time_start

Schränkt das Löschen auf die angegebene Startzeit ein (optional).

  • Datentyp: int

time_end

Schränkt das Löschen auf die angegebene Endzeit ein (optional).

  • Datentyp: int

changed

Schränkt das Löschen auf die angegebene Änderungszeit ein (optional).

  • Datentyp: int

changed_start

Schränkt das Löschen auf die angegebene Startzeit von Änderungen ein (optional).

  • Datentyp: int

changed_end

Schränkt das Löschen auf die angegebene Endzeit von Änderungen ein (optional).

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

dump(dumpfile, id, time, time_start, time_end, changed, changed_start, changed_end, cur)

Erzeugt einen Datenbank-Dump anhand der angegebenen Kriterien.

  • Die Funktion liefert kein Ergebnis

Parameter:

dumpfile

Dateiname, in den der Dump geschrieben wird.

  • Datentyp: str

id

Schränkt den Dump auf die angegebene Item-ID ein (optional).

  • Datentyp: int

time

Schränkt den Dump auf die angegebene Zeit ein (optional).

  • Datentyp: int

time_start

Schränkt den Dump auf die angegebene Startzeit ein (optional).

  • Datentyp: int

time_end

Schränkt den Dump auf die angegebene Endzeit ein (optional).

  • Datentyp: int

changed

Schränkt den Dump auf die angegebene Änderungszeit ein (optional).

  • Datentyp: int

changed_start

Schränkt den Dump auf die angegebene Startzeit von Änderungen ein (optional).

  • Datentyp: int

changed_end

Schränkt den Dump auf die angegebene Endzeit von Änderungen ein (optional).

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

id(item, create, cur)

Liefert die Datenbank-ID für das angegebene Item.

  • Ergebnistyp der Funktion: int

Parameter:

item

Das Item-Objekt.

  • Datentyp: foo

create

Falls True, wird das Item in der Datenbank angelegt, falls es dort noch nicht existiert.

  • Datentyp: bool

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

insertItem(name, cur)

Legt einen Item-Datenbankeintrag für die angegebene Datenbank-ID an.

  • Ergebnistyp der Funktion: int

Parameter:

name

Name des Items, für das ein Eintrag angelegt wird.

  • Datentyp: str

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

insertLog(id, time, duration, val, it, changed, cur, quality)

Legt einen Log-Datenbankeintrag für die angegebene Datenbank-ID an.

  • Die Funktion liefert kein Ergebnis

Parameter:

id

Datenbank-ID des Items, für das ein Eintrag angelegt wird.

  • Datentyp: int

time

Zeitpunkt, ab dem der Wert galt.

  • Datentyp: int

duration

Zeitspanne, für die der Wert galt.

  • Datentyp: int

val

Der Wert, der in die Datenbank geschrieben wird.

  • Datentyp: str

it

Der Item-Typ des Wertes (‚str‘, ‚num‘, ‚bool‘).

  • Datentyp: str

changed

Zeitstempel der Änderung.

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

quality

Daten-Qualitäts-Flag (Standard: QUALITY_VALID, QUALITY_NO_DATA für eine Lücken-Zeile).

  • Datentyp: int

readItem(id, cur)

Liest den Item-Datenbankeintrag für die angegebene Datenbank-ID. Diese Methode liest die Item-Daten einschließlich aller Felder. Ist der Parameter id ein String, wird das Item über seinen Namen ausgewählt statt über seine Datenbank-ID.

  • Ergebnistyp der Funktion: foo

Parameter:

id

Datenbank-ID (oder Name) des Items, dessen Eintrag gelesen wird.

  • Datentyp: int/str

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

readItems(cur)

Liest alle Item-Datenbankeinträge einschließlich aller Felder.

  • Ergebnistyp der Funktion: foo

Parameter:

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

readLog(id, time, cur)

Liest den Log-Datenbankeintrag für die angegebene Datenbank-ID.

  • Ergebnistyp der Funktion: foo

Parameter:

id

Datenbank-ID des Logs, dessen Eintrag gelesen wird.

  • Datentyp: int

time

Zeitpunkt, ab dem der Wert galt.

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

readLogs(id, time, time_start, time_end, changed, changed_start, changed_end, cur)

Liest die Log-Datenbankeinträge für die angegebene Datenbank-ID.

  • Ergebnistyp der Funktion: foo

Parameter:

id

Datenbank-ID des Logs, dessen Einträge gelesen werden.

  • Datentyp: int

time

Schränkt das Auslesen auf die angegebene Zeit ein (optional).

  • Datentyp: int

time_start

Schränkt das Auslesen auf die angegebene Startzeit ein (optional).

  • Datentyp: int

time_end

Schränkt das Auslesen auf die angegebene Endzeit ein (optional).

  • Datentyp: int

changed

Schränkt das Auslesen auf die angegebene Änderungszeit ein (optional).

  • Datentyp: int

changed_start

Schränkt das Auslesen auf die angegebene Startzeit von Änderungen ein (optional).

  • Datentyp: int

changed_end

Schränkt das Auslesen auf die angegebene Endzeit von Änderungen ein (optional).

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

updateItem(id, time, duration, val, it, changed, cur)

Aktualisiert den Item-Datenbankeintrag für die angegebene Datenbank-ID.

  • Die Funktion liefert kein Ergebnis

Parameter:

id

Datenbank-ID des Items, dessen Eintrag aktualisiert wird.

  • Datentyp: int

time

Zeitpunkt, ab dem der Wert galt.

  • Datentyp: int

duration

Zeitspanne, für die der Wert galt.

  • Datentyp: int

val

Der Wert, der in die Datenbank geschrieben wird.

  • Datentyp: str

it

Der Item-Typ des Wertes (‚str‘, ‚num‘, ‚bool‘).

  • Datentyp: str

changed

Zeitstempel der Änderung.

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

updateLog(id, time, duration, val, it, changed, cur, quality)

Aktualisiert den Log-Datenbankeintrag für die angegebene Datenbank-ID.

  • Die Funktion liefert kein Ergebnis

Parameter:

id

Datenbank-ID des Items, dessen Eintrag aktualisiert wird.

  • Datentyp: int

time

Zeitpunkt, ab dem der Wert galt.

  • Datentyp: int

duration

Zeitspanne, für die der Wert galt.

  • Datentyp: int

val

Der Wert, der in die Datenbank geschrieben wird.

  • Datentyp: str

it

Der Item-Typ des Wertes (‚str‘, ‚num‘, ‚bool‘).

  • Datentyp: str

changed

Zeitstempel der Änderung.

  • Datentyp: int

cur

Ein Datenbankcursor-Objekt, falls vorhanden (optional).

  • Datentyp: foo

quality

Daten-Qualitäts-Flag (Standard: QUALITY_VALID, QUALITY_NO_DATA für eine Lücken-Zeile).

  • Datentyp: int