Daten aus MariaDb

Jan12

New member
Hallo Forum, ich möchte meine Energiedaten (erzeugte Solarenergie und Netzverbrauch) pro Tag in eine eigene Datenbank speichern. Meine HomeAssistant daten werden in eine MariaDB Version 10 gespeichert.

Wie kann ich die Energiedaten daraus abfragen? Gibt es eine Beschreibung der Datenbanktabellen?

Herzliche Grüße

Jan
 
Eine Homeassistant Datenbank ist recht simple aufgebaut. Bei mir gibt es die folgenden Tabellen:
event_data​
event_types​
events​
recorder_runs​
schema_changes​
state_attributes​
states​
states_meta​
statistics​
statistics_meta​
statistics_runs​
statistics_short_term​
Für Dich interessant sein dürften die Tabellen:
states und states_meta

In der Tabelle states gibt es die Messwerte der Entitäten und über die Tabelle states_meta findest Du mit Hilfe des Entitätennamens seine passende datenbank-interne metadata_id. Anschließend "joinst" Du beide Tabellen auf die metadata_id und fertig...

Sagen wir z.B. Du hättest eine USV, die Du in HA "myups" genannt hast. Und nun wolltest Du in der Datenbank deren "Last" (Load) ermitteln. Dann geht das so:
SQL:
SELECT states.*
FROM states LEFT JOIN states_meta ON states.metadata_id=states_meta.metadata_id
WHERE states_meta.entity_id = "sensor.myups_load";

Es ist natürlich hilfreich aus dem Homeassistant heraus zu wissen, wie die Entitäten und deren Attribute lauten. :D


für MariaDB (mySQL) gibts ja phpMyAdmin.
Bäh, warum immer diese "klickiii-buntiii" Sachen? Einfach eine normale SQL-Konsole und man bekommt alles was man braucht. :D
 
Bäh, warum immer diese "klickiii-buntiii" Sachen? Einfach eine normale SQL-Konsole und man bekommt alles was man braucht. :D
Jeder wie er es braucht.

Wenn jemand eine Datenbank hat, aber keine Ahnung, noch nichtmal was für Tabellen er hat, ist das sicher der einfachste Weg mal ein bischen was darüber zu erfahren, ohne gleich was zu zerschiessen.
 
Auch wenn ich das vor Ewigkeiten nur via CLI gelernt habe... "einfach" (ganz zu schweigen von "übersichtlich") finde ich das via Webinterface nicht grade, grade dann nicht, wenn es viele Datenbanken/Tabellen sind. Da wird man einfach nur erschlagen und zack.... landet man doch wieder im Feld mit den SQL-Statements (wenn man es denn weiss, ansonsten bleibt es beim erschlagen) 😄

Kann man sich unter phpMyAdmin denn auch irgendwelche Statements zusammenklicken? Hab davon keine Ahnung, benutze sowas eigentlich nie, aber wenn nicht, könnte das schon recht mühsam werden durch die Normalisierung, da helfen einem die 1000 Tabellen mit den verstreuten Daten dann ja auch nicht wirklich weiter, da ist man dann ohne Joins auch schon ziemlich angeschmiert und wenn sich sowas nicht einfach zusammenklicken lässt, braucht es ja sowieso wieder ein CLI-Statement (wenn von mir aus auch in dem Eingabefeld unter phpMyAdmin) wo die Daten verschiedener Tabellen dann auch mittels JOIN vernünftig angezeigt werden können.

Ansonsten wird man ja nur von einem Haufen Tabellen mit einem Haufen Zahlen konfrontiert.... glaube, sowas wäre dann schon ziemlich lästig und auch nicht grade zielführend 😅

Habt halt beide Recht... phpMyAdmin ist sicherlich nicht verkehrt, um sich "klicki-bunti"-mässig einen Überblick zu verschaffen, aber "danach" geht es selbst bei phpMyAdmin in das SQL-Statement-Feld. Ob man da nun vorher 2-3 SQL-Statements in eine CLI gepackt hat, oder das via phpMyAdmin gemacht hat, sei mal dahingestellt, an den Statements kommt man später sowieso nicht mehr vorbei.

Gibt es eine Beschreibung der Datenbanktabellen?
So grob könnte das hier z.B: weiterhelfen (auch wenn es für sqlite ist)...: https://www.home-assistant.io/docs/backend/database/ bzw. auch https://data.home-assistant.io/docs/ :)
 
Es geht sogar noch weiter... selbst der Tabellen-Aufbau zwischen der Doku und der Realität weicht ab. :D
Hier mal der Vergleich für die Tabelle states

DokuRealität
SQL:
CREATE TABLE states (
    state_id INTEGER NOT NULL,
    domain VARCHAR(64),
    entity_id VARCHAR(255),
    state VARCHAR(255),
    attributes TEXT,
    event_id INTEGER,
    last_changed DATETIME,
    last_updated DATETIME,
    created DATETIME,
    context_id VARCHAR(36),
    context_user_id VARCHAR(36),
    context_parent_id CHARACTER(36),
    old_state_id INTEGER,
    PRIMARY KEY (state_id),
    FOREIGN KEY(event_id) REFERENCES events (event_id)
)
Quelle: https://www.home-assistant.io/docs/backend/database/
SQL:
CREATE TABLE states (
        state_id INTEGER NOT NULL,
        entity_id VARCHAR(255),
        state VARCHAR(255),
        attributes TEXT,
        event_id INTEGER,
        last_changed DATETIME,
        last_changed_ts FLOAT,
        last_updated DATETIME,
        last_updated_ts FLOAT,
        old_state_id INTEGER,
        attributes_id INTEGER,
        context_id VARCHAR(36),
        context_user_id VARCHAR(36),
        context_parent_id VARCHAR(36),
        origin_idx SMALLINT,
        context_id_bin BLOB,
        context_user_id_bin BLOB,
        context_parent_id_bin BLOB,
        metadata_id INTEGER,
        PRIMARY KEY (state_id),
        FOREIGN KEY(event_id) REFERENCES events (event_id) ON DELETE CASCADE,
        FOREIGN KEY(old_state_id) REFERENCES states (state_id),
        FOREIGN KEY(attributes_id) REFERENCES state_attributes (attributes_id)
)

Ich kann also jedem nur raten, in Bezug auf die Datenbank nicht der Dokumentation von HomeAssistant zu trauen/folgen. :D
 
Den Blick auf den Tabellenaufbau und die dort verzeichneten Abhängigkeiten hätte ich jetzt auch empfohlen, das Addon "SQLite Web" gibt da auch laienfreundlich die Möglichkeit innerhalb von HA zu. Beispiel:
1682426630487.png1682426686873.png
 
Nein, dafür bleibt man besser bei dem schon erwähnten phpMyAdmin - da hat man sogar eine visuelle Hilfestellung bezüglich der Verbindungen wenn man möchte 🙃
1682432064779.png
 
Hallo zusammen,
danke für die guten Hinweise. Ich habe es geschafft die S0-Sensoren (realisiert übe einen D1 mini ESPHome) aus der Datenbank abzufragen. Leider benötige ich einen Wert der im Energie Dashboard dargestellt wird. Diesen (vermutlich errechneten) Wert finde ich in der Datenbank nicht.
Gibt es eine Möglichkeit einen Wert der in einem Dashboard dargestellt wird per Komandozeile sich anzeigen zu lassen? (Sorry für die blöde Frage, ich bin Anfänger)

Gruß

Jan
 
Der Wert kommt ja auch nur aus der Datenbank, sollte also schon funktionieren... Eine Möglichkeit wäre z.B. via Shell:
mysql -u <user> -p -e "<SQL-Statement>"
Das Passwort sollte besser nicht direkt in der Shell im Aufruf angegeben werden, da es ansonsten auch in der Shell-History auftaucht :)
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.666
Beiträge
47.655
Mitglieder
4.312
Neuestes Mitglied
Harway2007
Zurück
Oben