FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Pi_01 am 21 April 2020, 09:05:36

Titel: mySQL?
Beitrag von: Pi_01 am 21 April 2020, 09:05:36
Guten Morgen,
arbeitet FHEM intern eigentlich mit einer mySQL-Datenbank?

Ich würde gerne Inhalte, die ich z.B. über das stateFormat ausgebe, zusätzlich in einer mySQL-Datenbank dauerhaft abspeichern wollen, damit ich darüber später Auswertungen machen kann.

Wie geht sowas?

mySQL-Grundlagen sind vorhanden, es geht also nur um den Zugriff aus FHEM heraus.
Titel: Antw:mySQL?
Beitrag von: CoolTux am 21 April 2020, 09:07:19
Das Stichwort wäre DbLog (https://wiki.fhem.de/wiki/DbLog)
Titel: Antw:mySQL?
Beitrag von: DS_Starter am 21 April 2020, 09:28:08
... und DbRep gleich noch dazu für Auswertungen (außer Plots)  :D

(https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten)
Titel: Antw:mySQL?
Beitrag von: Pi_01 am 04 Mai 2020, 14:48:31
Eine grundsätzliche Frage zu DbLog und DbRep in Bezug auf die Datenbank:

Die Datebank "fhem" besteht aus den Tabellen current und history, mit folgender Struktur:

Im Feld "TYPE" könnten dann z.B. folgende Werte stehen:

Darf ich im Type-Feld (und nicht nur dort) auch eigene Werte eintragen?
Hätte FHEM ein Problem damit, wenn im Type-Feld z.B. der Wert "EXTERN" oder "BLABLA" steht?

Und nehmen wir mal an, ich gehe einen Schritt weiter und füge in der Datenbank eine eigene Tabelle ein. Sprich: neben "current" und "history" auch "meineTabelle".

Kann DbRep auch mit der "fremden" Tabelle ("meineTabelle") arbeiten, oder ist DbRep auf die fest vorgegebene Tabellenstruktur begrenzt?
Titel: Antw:mySQL?
Beitrag von: DS_Starter am 04 Mai 2020, 16:01:26
ZitatDarf ich im Type-Feld (und nicht nur dort) auch eigene Werte eintragen?
Naja, prinzipiell kannst du ja machen was du möchtest.  :)
Sagen wir mal so, im Standard holen sich Plots (SVG-Devices) und Auswertungen mit DbRep Daten aus der DB.
Im Prinzip geht es dabei nur um die Felder "DEVICE" und "READING" die als Bedingung für die Werteabfrage aus VALUE herangezogen werden.
Ich will jetzt nicht meine Hand ins Feuer legen ob es nicht auch Ausnahmen gibt, dafür sind die Möglichkeiten jetzt schon zu umfangreich um alles im Kopf zu behalten.

ZitatHätte FHEM ein Problem damit, wenn im Type-Feld z.B. der Wert "EXTERN" oder "BLABLA" steht?
Zu 99% nicht.
Musst nur immer daran denken dass du vom Standard abweichst und darfst dich nicht beschweren wenn du auf "komische" Effekte stößt.  ;)

ZitatUnd nehmen wir mal an, ich gehe einen Schritt weiter und füge in der Datenbank eine eigene Tabelle ein. Sprich: neben "current" und "history" auch "meineTabelle".
Kann DbRep auch mit der "fremden" Tabelle ("meineTabelle") arbeiten, oder ist DbRep auf die fest vorgegebene Tabellenstruktur begrenzt?
Stand heute sind sowohl DbLog als auch DbRep auf die Tabellen history bzw. current festgelegt.
Allerdings hatte ich schon begonnen die Möglichkeit für vom Standard abweichende Tabellennamen statt "history" bzw.  "current" einzubauen, bin aber auf halber Strecke stehen geblieben und habe es noch nicht einsatzbereit umgesetzt.

Grüße,
Heiko
Titel: Antw:mySQL?
Beitrag von: Pi_01 am 08 Mai 2020, 16:04:26
Zitat von: DS_Starter am 21 April 2020, 09:28:08
... und DbRep gleich noch dazu für Auswertungen (außer Plots)  :D

(https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten)

Lt. Wiki gilt folgende DbRep-Definition:
define <name> DbRep <Name der DbLog-instanz>

Eine DbLog-Instanz existiert in meine Fall aber nicht, da die Datenbank "von außen" (über ein externes Script) gefüttert wird.

Wie kann ich trotzdem in FHEM auf die Datenbank-Inhalte zugreifen?

Ist es möglich, in der Datei 99_myUtils.pm mittels PERL eine Datenbankverbindung aufzubauen? Wenn ja, wie?
Titel: Antw:mySQL?
Beitrag von: DS_Starter am 08 Mai 2020, 16:16:47
Zitat
Eine DbLog-Instanz existiert in meine Fall aber nicht, da die Datenbank "von außen" (über ein externes Script) gefüttert wird.

Wie kann ich trotzdem in FHEM auf die Datenbank-Inhalte zugreifen?

Ist es möglich, in der Datei 99_myUtils.pm mittels PERL eine Datenbankverbindung aufzubauen? Wenn ja, wie?
Du bist jetzt schon der zweite den ich "kenne" der so schräge Sachen machen will.
Du kannst auf die DB zugreifen wenn sie auch die Tabelle history mit den entsprechenden Feldern enthält.
Dazu legst du dir einfach ein DbLog an und macht über db.conf die Verbindungsparameter bekannt. Diese kann DbRep dann verwenden indem du dieses DbLog-Device angibst. Loggen muss es ja nichts.

Eigene Verbindungen kann man natürlich machen, in DbLog / DbRep sieht man ja wie es geht.
Aber dann heißt es alles weitere selber machen ...

Grüße,
Heiko
Titel: Antw:mySQL?
Beitrag von: Christoph Morrison am 08 Mai 2020, 20:08:56
Zitat von: Pi_01 am 08 Mai 2020, 16:04:26
Ist es möglich, in der Datei 99_myUtils.pm mittels PERL eine Datenbankverbindung aufzubauen? Wenn ja, wie?

Genau so. Du musst das alles in 99_myUtils packen und kannst in der Datei auch Code aufrufen, der eine Initialisierung macht oder eine Subroutine beim Start von FHEM triggern oder so. Stichwort wäre DBI, dafür gibt es dutzende Tutorials da draußen.

Je nachdem was du vorhast, ist ein eigenes Modul dafür aber eine gute Sache.