Umfrage
Frage:
Lieblingsfarbe
Antwort 1: Blau
Stimmen: 0
Antwort 2: Blau
Stimmen: 1
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
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
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
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
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
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
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.
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
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
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