Manuell einen LOG-Eintrag in MySQL Datenbank schreiben

Begonnen von ThomasS, 04 Juli 2021, 23:31:24

Vorheriges Thema - Nächstes Thema

ThomasS

Guten Abend an alle im Forum,

Ich bin bis jetzt immer zu meinen Problemen fündig geworden jedoch jetzt bin ich mir mittlerweile nicht sicher ob dies überhaupt funktioniert.
Ich habe in meiner Fhem Aufbau diverse Rolläden die ich über verschiedene Module steuere die ich selbst geschrieben habe.
Um zu erkennen welches Module die Rolladenbewegung ausgelöst hat habe ich mir ein LOG in eine eigene Logdatei geschrieben in der nur diese Module einen Eintrag machen.

Da nun jedoch alles etwas unübersichtlich geworden ist habe ich mir einen neuen Fhem Server aufgesetzt in den ich nun meine Erfahrungen einbringen will und dazu möchte ich u.a. die LOG Eintäge in eine Maria(db) schreiben und nicht in Textfiles.

Dazu habe ich mir überlegt die Datenbank zu erweiteren und einen Table ,,Rolladen" zu den bestehenden Table current und history zu erstellen.
Grundsätzlich funktioniert der LOG bereits also Current und History werden beschrieben.
Wie bzw. kann ich überhaupt manuell einen Logeintrag erstellen und diesen in den entsprechenden Table speichern?

define Dblogging DbLog /opt/fhem/db.conf .*:.*

Ich möchte in den Table ,,rolladen" diverse Werte in die entsprechenden Spalten eintragen.

Vielen Dank schon mal im voraus.

Thomas

DS_Starter

Hallo Thomas,

eine zusätzliche Tabelle wird nativ nicht berücksichtigt, d.h. es wird nicht funktionieren.
Du kannst dir das DbLog Modul nach deinen Vorstellungen erweitern, aber ohne Support natürlich.

Alternativ kannst du die vorhandenen Felder in history nach deinen Wünschen verwenden, z.B. muß das Feld EVENT ja nicht unbedingt den Event enthalten, sondern kann für eine beliebige Information dienen.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ch.eick

Hallo zusammen,

würde da nict einfach das "addCacheLine" reichen?


CommandSet(undef, $logdb." addCacheLine ".$timestamp."|".$logdevice."|addlog|".$reading.": ".$logentry1h."|".$reading."|".$logentry1h."|") ;

Hier würde ich einfach ab >>> |addlog|".$reading.": ".$logentry1h."|".$reading."|".$logentry1h."|" <<< die Spalten nach dem gewünschen Sinn verwenden.

VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ThomasS

Hallo DS_Starter,

Wenn eine zusätzliche Tabelle nicht möglich ist denke ich das ich die bestehende Tabelle am besten nutze und eben die Felder mit meinen Werten usw. zu füllen.
Das DbLog Modul abzuändern würde meine Fähigkeiten übersteigen vielleicht in der Zukunft.
Jedoch wie kann ich manuell einen Log Eintrag schreiben? Schon hierzu wäre ich über ein Beispiel dankbar.

DS_Starter hat CommandSet ins Spiel gebracht jedoch kennt das Fhem anscheinend nicht oder ich bin zu blöd dazu es zu verstehen wie es angewendet wird.
Für mich wäre es am besten direkt mit Perl in der Funktion (99_myUtils.pm) den Eintrag zu erzeugen.

Ich hoffe es ist eiigermassen verständlich

Gruß  Thomas

DS_Starter

Hallo Thomas,

ch.eick hat ja schon das Beispiel geschrieben. Es entspricht dem


set <dblog> addCacheLine ...


Befehl. CommandSet kannst du nur in Skripten bzw. der 99_myUtils.pm verwenden. Zum Beispiel


CommandSet (undef, "dblog addCacheLine 2021-07-10 17:03:59|MaxBathRoom|MAX|valveposition: 95|valveposition|95|%");


dblog ist dabei der Name des DbLog Device. Der Befehl fügt wie in der Hilfe unter "set addCacheLine " beschrieben einen Datensatz in den Cache (Asynchroner Mode) ein, der dann in die Felder der Tabelle history eingefügt wird.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ThomasS

Hallo Heiko,

zuerst einmal Danke für deine schnelle Antwort.
Hatte ich in der Zwischenzeit auch bemerkt das CommandSet immer unter Perl auftaucht. ::)
Habe dann addCatchLine probiert der Befehl geht zwar ohne Meldung durch jedoch kann ich keinen Eintrag in der Datenbank finden

Commandref:
set <name> addCacheLine YYYY-MM-DD HH:MM:SS|<device>|<type>|<event>|<reading>|<value>|[<unit>]
Mein Befehl:
set DBLogging addCacheLine 2021-07-10 23:30:00|Rolladen|Module1|Schleife3|Level|59|


Habe auch versucht dies für ein existierendes Device zu erstellen jedoch wie gehabt kein Eintrag.

Ist die Schreibweise korrekt?

Danke

Thomas

DS_Starter

#6
Guten Morgen,

ZitatIst die Schreibweise korrekt?
Ja, ist richtig so und funktionioniert auch. Habe deinen DS 1:1 bei mir ausgeführt ... siehe Anhang SCreenshot von phpMyAdmin und DbRep.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ThomasS

Hallo Heiko,

ich habe nun den ganzen Tag versucht einen Eintrag in meine DB-LOG zu schreiben.
Komischerweise konnte ich mehrere Eintrage finden jedoch konnte ich dies nicht replizieren.
Ansonsten werden LOG's geschrieben von allen Devices jedoch keine manuellen Einträge. :'(
Wenn ich  den Code ausführe über das Eingabefeld kommt kein Fehler jedoch auch kein Eintrag.
Wird der Eintrag sofort generiert oder verzögert?
{ my ($num) = ReadingsVal("myTestDummy","state","0")+1;; fhem ("Set myTestDummy ".$num."");;
  my $zahl=int(rand(100)+1);; my ($timestamp) = FmtDateTime(time());;
  fhem ("set DBLogging addCacheLine ".$timestamp."|Rolladen|Module1|Schleife".$num."|Level|".$zahl."|");; }


Nach langem probieren und suchen habe ich irgenwo mal gelesen das man das Atributte asyncMode "1" setzen soll jedoch kann ich den zusammenhang nicht mehr wiedergeben.
Nach dieser Änderung wird der LOG geschrieben und wie ich nun gesehen habe alle vorherigen die ohne asyncMode geschrieben wurden auch.

Vielleicht ist mein DbLog auch fehlerhaft definiert

define DBLogging DbLog /opt/fhem/db.conf .*:.*
setuuid DBLogging ********-****-****-****-****************
attr DBLogging DbLogExclude .*
attr DBLogging DbLogSelectionMode Exclude/Include
attr DBLogging DbLogType Current/History
attr DBLogging asyncMode 1
attr DBLogging group Logging
attr DBLogging icon it_storage
attr DBLogging room System->Log


Ist es vielleicht notwendig den asyncMode zu aktivieren.

Danke schonmal

Thomas


DS_Starter

Hallo Thomas,

Zitat
Ist es vielleicht notwendig den asyncMode zu aktivieren.

Ja natürlich. Ich hatte ja schon weiter oben geschrieben:
...
Der Befehl fügt wie in der Hilfe unter "set addCacheLine " beschrieben einen Datensatz in den Cache (Asynchroner Mode) ein, der dann in die Felder der Tabelle history eingefügt wird.
....

Nur im asynchronen Modus gibt es einen Cache in den man etwas einfügen kann. Im Normalmodus (synchronen Mode) gibt es ja auch keinen Menüeintrag "addCacheLine".

Grüße,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ThomasS

Hallo Heiko,

entschuldigung das ich mich erst jetzt melde kam einfach nicht zum testen.

ZitatJa natürlich. Ich hatte ja schon weiter oben geschrieben:

??? Habe ich wohl überlesen oder zuviel gelesen und verwechselt. Anfänger eben. ::)
Hat etwas gebraucht um die Zusammenhänge zu verstehen.

Nun kann ich die notwendigen Einträge generiesen.

Danke für deine Unterstützung.

Gruß

Thomas