Regelmäßig Daten in eine externe SQL-Datenbank schreiben

Hallo!

Dank all der genialen Integrationen komme ich in meinem HomeAssistant an viele, viele Daten. Nun möchte ich gerne einige davon in eine SQL-Datenbank auf einem anderen Server schreiben. Am besten direkt, ohne eine REST-API (o.ä.) dazwischen zu betreiben.

Hat jemand so etwas schon einmal realisiert?

HA setzt von Hause aus die SQLite-DB ein.
Wenn dir das nicht reicht, schaue in das Tutorial von Simon zum Einsatz von MariaDB

Es geht mir nicht um die DB, die HA nutzt.

Es geht darum, dass ich einen separaten SQL-Server habe, in dem diverse andere, Nicht-HA-Datenbanken laufen. In diesem SQL-Server gibt es eine Datenbank, wo ich in einer Tabelle entsprechend Werte speichern möchte, die über HA-Sensoren kommen.

Tja, da wirst du dir eine eigene Instanz bauen müssen um Daten von einer DB in die andere zu schaufeln. Mir ist keine solche Anwendung/Integration für HA bekannt.
Oder du stellst komplett auf eine externe Datenbank für HA um, vielleicht wird es dann einfacher die von dir benötigten Daten zu extrahieren. Muss aber nicht sein.

https://github.com/qrioniclabs/homeassistant-mysql_command

Ich bin mir aber nicht sicher ob das nicht funktioniert nach der notify Änderung

Du könntest aber über notify in eine csv Datei schreiben und die dann in deine db importieren .

Hängt davon ab was du wie oft schreibst

Ich habe GitHub - qrioniclabs/homeassistant-mysql_command: A Home Assistant custom component that creates a Notify service to send commands (e.g. INSERT) to a MySQL server. · GitHub installiert und in der configuration.yaml folgende Einträge hinzugefügt:

notify:

* name: mysql_command_ha
  platform: mysql_command
  host: 127.0.0.1
  username: \*\*\*\*\*\*\*\*\*
  password: \*\*\*\*\*\*\*\*\*
  db: homeassistant
* name: mysql_command_wz
  platform: mysql_command
  host: 192.168.x.x
  username: \*\*\*\*\*\*\*\*\*
  password: \*\*\*\*\*\*\*\*\*
  db: Energie

Damit habe ich Zugriff auf zwei unterschiedliche Datenbanken; einmal localhost und einmal auf ein anderen Server.

Hier ist noch ein actions-Beispiel für eine Automation:

actions:
  action: notify.mysql_command_wz
  metadata: {}
  data:
  message: >-
  insert into homeassistant.Aussen(Temperatur,Humi,Taupunkt,Zeit)values({{states(‘sensor.aussentemperatur’)}},{{states(‘sensor.aussenfeuchte’)}},{{states(‘sensor.thermalcomfort_ausen_taupunkt’)|float|round(1)}},now())

HomeAssistant kann von Haus aus mindestens 3 verschiedene Datenbanken benutzen:

  • Wenn du nichts sagst, wird eine interne SQLite-Datenbank benutzt, die auf dem Hauptverzeichnis von HA liegt.
  • Man kann eine MariaDB als App (früher PlugIn) installieren oder man benutzt eine eigene MariaDB, die irgendwo im Netz steht. Man muss dazu nur die Zugangsdaten der DB in der configuration.yaml eintragen.
  • Eine Postgres-Datenbank muss man selber bereitstellen - es gibt keine App. Sie lässt sich aber genauso einfach wie die MariaDB über die configuration.yaml integrieren.

Alle drei Datenbanken haben einen vergleichbaren Datenaufbau und man kann auf sie zugreifen: Auf die selbst bereitgestellten selbstverständlich (sind ja eigene Datenbanken) und bei den internen bzw. per App installierten muss man eventuell deren Netzwerk-Einstellungen modifizieren. Die SQLite müsste notfalls per sftp gehen; die ist aber im Multi-User-Zugriff sowieso nicht so prickelnd :frowning:

Um mit dem Datenbank-Zugriff etwas anfangen zu können muss man sich allerdings etwas mit deren Struktur auseinandersetzen. Aber wenn man nur einige wichtige Daten extrahieren will hält sich der Aufwand in Grenzen.

Eine weitere - sehr schöne - Möglichkeit ist die zusätzliche InfluxDB, die man als HA-App installieren kann oder auch extern bereitstellen kann. Das ist eine Time-Series-Datenbank, die im wahren Leben gerne benutzt wird, um Messwerte aller Art chronologisch aufzuzeichnen. Sie wird ebenfalls über die configuration.yaml eingebunden und übernimmt dann automatisch alle neuen Daten, die in die normale Datenbank (egal welche) geschrieben werden. Sie hat ein für Menschen deutlich verträglicheres Datenformat und kann über eine SQL-ähnliche Sprache abgefragt werden. Ich benutze sie, um die Daten ewig aufzubewahren; meine PostgresDB ist über HA auf ein Vergessen nach 30 Tagen gestellt (Standard ist 8 oder 10 Tage). Man kann mit allen gängigen Programmiersprachen und vielen Grafik-Programmen (z.B. Grafana (auch als HA-App)) auf die InfluxDB zugreifen. Ich erstelle die meisten meiner Langzeit-Statistiken, die ich dann auch in HA darstelle, mit Python-Programmen mit MatPlotLib als Bibliothek. Die InfluxDB kann man natürlich auch sichern; eine Übertragung aller oder ausgewählter Daten in normale SQL-Datenbanken ist ebenfalls recht einfach.

Ich kann den “Umweg” über die InfluxDB nur wärmstens empfehlen.

mfg Volker