Mit SQL noch mehr Daten in Home Assistant nutzen

Im Hintergrund speichert Home Assistant Daten, Zustรคnde und die Verlรคufe deiner Entitรคten in Datenbanken. StandardmรครŸig kommt dafรผr SQLite zum Einsatz. Falls du schon lรคnger Home Assistant nutzt, hast du vielleicht irgendwann auf eine extern gehostete Datenbank wie MariaDB umgestellt. Wenn du an der Datenbank deines Home Assistants nichts verรคndert hast, verwendest du sehr wahrscheinlich SQLite. Auf diese Daten kann man direkt zugreifen, wenn man ein wenig SQL beherrscht.

Um manuell รผber die Befehlszeile mit der SQLite-Datenbank zu arbeiten, benรถtigst du eine Installation von sqlite3 (Installationsanleitung). Alternativ kannst du den DB Browser for SQLite nutzen. Damit erhรคltst du einen praktischen Viewer zum Erkunden der Daten und einen Editor fรผr SQL-Befehle. In meinem Video zeige ich dir, wie du das Addon SQLite Web verwendest, das du รผber den Addon-Store installieren kannst โ€“ vorausgesetzt, du betreibst Home Assistant auf einem Raspberry Pi.

Je nachdem, ob du SQLite oder MariaDB verwendest, gibt es kleine Unterschiede in der SQL-Syntax. Achte also darauf, welchen Code-Schnipsel du kopierst/nutzt!

Bedenke auรŸerdem, dass du mit SQL-Befehlen auch Dinge kaputt machen kannst. Kopiere also nicht einfach irgendwelche SQL-Befehle, die du online findest, ohne zu verstehen, was sie tun. Die von mir bereitgestellten SQL-Befehle sind Select-Abfragen. Damit kannst du nichts kaputt machen โ€“ sie lesen lediglich Daten aus.

Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltflรคche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Video-Anleitung wie du die SQL-Integration in HA nutzt

In meinem Video erklรคre ich dir konkret, wie du fรผr eine Energie-Entitรคt den Verbrauch รผber einen beliebigen Zeitraum berechnest. Dazu wird per SQL-Select der Zustand der Entitรคt am Ende des Zeitraums ermittelt und der Zustand zu Beginn des Zeitraums abgezogen. Die Differenz ergibt dann den Zuwachs in diesem Zeitraum.

Du magst Home Assistant? Dann abonniere kostenlos meine Beitrรคge mit Tipps, Tricks und Anleitungen rund um Home Assistant:

Follow Home Assistant
( 540 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklรคrung zu!

Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders รผberlegen!

Du musst dabei natรผrlich die Entitรคt in meinem Code (sensor.shellyplug_s_dcbaf7_energy) durch deine eigene Entitรคt ersetzen. Ebenso kannst (und musst) du die Timestamps anpassen: fรผr den Beginn des Zeitraums (‚2024-09-01 00:00:00‘) und fรผr das Ende des Zeitraums (‚2024-12-01 00:00:00‘).

SQL-Code aus dem Video fรผr MariaDB:

SELECT ROUND((SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id='sensor.shellyplug_s_dcbaf7_energy' AND created_ts < UNIX_TIMESTAMP('2024-12-01 00:00:00') ORDER BY created_ts DESC LIMIT 0,1) - (SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id='sensor.shellyplug_s_dcbaf7_energy' AND created_ts > UNIX_TIMESTAMP('2024-09-01 00:00:00') ORDER BY created_ts ASC LIMIT 0,1),2) AS wert

SQL-Code aus dem Video fรผr SQLite (Home Assistant Default):

SELECT ROUND((SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id='sensor.daily_shelly_energy' AND created_ts < strftime('%s','2024-12-01 00:00:00') ORDER BY created_ts DESC LIMIT 0,1) - (SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id='sensor.daily_shelly_energy' AND created_ts > strftime('%s','2024-09-01 00:00:00') ORDER BY created_ts ASC LIMIT 0,1),2) AS wert

Weitere SQL-Befehle fรผr Home Assistant

Du brauchst einen anderen SQL-Befehl um individuelle Daten zu ermitteln? Schreibe was du benรถtigst als Kommentar und ich versuche sehr gerne dir dabei zu helfen. Solche SQL-Befehle werde ich dann auf dieser Seite fรผr alle anderen ergรคnzen!

Foto des Autors
Autor
Olli
Ca. Anfang 40, seit Windows 3.1 Fan von Computern, Gadgets, Handys und allem, was sich irgendwie programmieren lรคsst. Ich mag es gerne individuell und mรถglichst einfach, probiere aber auch gerne neue Dinge sofort aus. :) Konnte ich dir helfen? Dann wรผrde ich mich รผber ein Bier freuen ;) Bier-Spende

13 Gedanken zu „Mit SQL noch mehr Daten in Home Assistant nutzen“

  1. Versuche mal folgenden Code um created_ts zu transformieren:

    SELECT mean, DATETIME(created_ts, 'auto') FROM statistics INNER JOIN statistics_meta 
      ON statistics.metadata_id=statistics_meta.id
      WHERE statistics_meta.statistic_id='sensor.tibber_status_solvis_sg_ready_num' AND 
      created_ts > strftime('%s','2025-02-04 00:00:00') ORDER BY created_ts
  2. Hallo Olli
    jetzt benรถtige ich bitte doch nochmals deine Unterstรผtzen beim Anzeigen „ts“ im gรคngigen Format
    SELECT mean, datetime(created_ts) FROM statistics INNER JOIN statistics_meta
    ON statistics.metadata_id=statistics_meta.id
    WHERE statistics_meta.statistic_id=’sensor.tibber_status_solvis_sg_ready_num‘ AND
    created_ts > strftime(‚%s‘,’2025-02-04 00:00:00′) ORDER BY created_ts

    grafik
  3. Im Add On habe ich auf Basis deiner Beispiele ein erstes Query gebastelt. Dabei ist mir aufgefallen, dass fรผr den Template-Sensor keine Statistik in der DB war. Ursache ein fehlendes „state_class: measurement“.
    Jetzt kann ich natรผrlich darรผber rรคtseln, ob das die Ursache fรผr den falschen Wert in der InflzxDB ist.
    Voreinmal vielen Dank fรผr deine Unterstรผtzung.

  4. Ich hatte wohl die Integration SQL installiert und nicht das Addon. Aber auch damit stoรŸe ich an meine Grenzen, denn die relationale DB ist ohne strukturkenntnisseย  mal nicht eben pre Klick abzufragen. Wie ich das sehe, muss der Select รผber mehrere Tabellen gehen.
    Daher nehme ich gerne dein Angebot tur Unterstรผtzung beim Select an.

    • @jove02 Probier mal folgenden Select aus:

      SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id='sensor.tibber_status_solvis_sg_ready_num' AND created_ts > strftime('%s','2025-02-04 12:09:00') AND created_ts < strftime('%s','2025-02-04 13:00:00') ORDER BY created_ts DESC 

      Durch die Angaben „created_ts > …“ und „created_ts < …“ sollte die Ergebnisliste deinem XLS-Screenshot von weiter ohne entsprechen bzw. den auffรคlligen Eintrag mit „3“ beinhalten.

      Wenn du in der DB arbeitest, beachte, dass du keine Inserts, Updates oder Dinge in die Richtung machst, da du damit dein HA „beschรคdigen“ kannst. SELECT-Abfragen stellen hingegen kein Problem dar!

  5. Hallo Olli
    vielen Dank fรผr die schnelle Antwort.
    Leider total verstanden.
    Auszug aus InluxDB. Grau der Eintrag mit 3, der eigentlich nicht vorkommen kann

    grafik

    Input_select und Sensoren auf HA

    grafik

    Man sieht zur InfluxDB die Abweichung, die ich versuche zu ergrรผnden. Dazu wollte ich mit SQL auf die HA-DB zugreifen, denn es muss in HA den Wert 3 geben, wo sollte er sonst herkommen, und das nicht nur einmal.
    Daher meine bitte, kannst du einmal den obigen SELECT prรผfen.
    Danke
    ย 
    ย 

    • @jove02 Danke fรผr die weiteren Details!ย 

      Was ich in dem Video und Blogbeitrag beschreibe, ist wie man eine Wertentwicklung einer Entitรคt durch das „vergleichen“ zweier Werte generiert (also Wert a (neu) abzรผglich Wert b (alt) ergibt die Wertentwicklung).

      Was du benรถtigst ist vollkommen anders gelagert und du wirst das anhand meines Beispiels nur mit unnรถtig viel Aufwand hinbekommen (also mรถglich ist es sicherlich, aber alles andere als pragmatisch).

      An deiner Stelle wรผrde ich mir direkten Zugriff auf die DB verschaffen um dort direkt (also ohne den Umweg รผber HA) Selects absetzen zu kรถnnen. Das beschreibe ich in dem Video auch (https://youtu.be/qe8Syxfo-LY?si=5XVF19W1qKPfglIC&t=886). Wenn du direkten Zugriff auf die DB hast, kann ich dir gerne mit dem Select behilflich sein.

  6. Hallo Olli
    รœber Grafana werden รผber eine InfluxDB fรผr einen Sensor Werte angezeigt, die nicht sein kรถnnen, da ich die Daten รผber ein input_select fรผlle.

    grafik

    Gefรผllt wird dieser input_select รผber eine Automatisierung (theoretisch auch manuell) und dann in einen Sensor รผbernommen und in zweiten Sensor nur die 1. Stelle.
    – name: Tibber Status Solvis SG-Ready
    state: >-
    {{states(‚input_select.solvis_sg_ready‘) }}
    unique_id: tibber_status_solvis_sg_ready

    – name: Tibber Status Solvis SG-Ready num
    state: >-
    {{states(‚input_select.solvis_sg_ready‘)|truncate(1, true, “) }}
    unique_id: tibber_status_solvis_sg_ready_num
    Bei bestimmten Schaltvorgรคngen sehe ich in Grafana an stelle des von 4 auf 2 geschalteten Wertes aber 3 (einmal sogar 3,5 ???)
    Die Anzeige der Sensoren in HA zeigen doch immer 2 an.
    Um dieses Verhalten aufzuspรผren wollte ich direkt in die DB schauen und habe deinen Beitrag gefunden. Doch meine Anpassung deines Beispiels erzeugt kein Ergebnis
    SELECT ROUND((SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id=’sensor.tibber_status_solvis_sg_ready_num‘ AND created_ts < strftime(‚%s‘,’2025-02-04 14:00:00′) ORDER BY created_ts DESC LIMIT 0,1) – (SELECT state FROM statistics INNER JOIN statistics_meta ON statistics.metadata_id=statistics_meta.id WHERE statistics_meta.statistic_id=’sensor.tibber_status_solvis_sg_ready_num‘ AND created_ts > strftime(‚%s‘,’2025-02-04 11:00:00′) ORDER BY created_ts ASC LIMIT 0,1),2) AS wert
    (leider klappt das hier nicht mit Zeilenumbrรผchen)
    Siehst du evtl den Fehler in meinem Select?
    Danke

    • @jove02 Hi! Aus der Ferne auf jeden Fall nicht ganz so easy, ich bin mir nicht sicher, ob ich es richtig verstanden habe. Aber hast du mal ein wenig mit den Zeiten gespielt? Je nach Setup ist ein Offset nicht ungewรถhnlich (i. d. R. 1-2 Stunden bspw.).

Die Kommentare sind geschlossen.