FHEM Forum

FHEM => Automatisierung => Thema gestartet von: blueberry63 am 26 Juli 2013, 15:27:26

Titel: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 26 Juli 2013, 15:27:26
Hallo,

ich habe mein FHEM schon vor einiger Zeit von Filelog auf Dblog umngestellt. Der Zugriff auf die DB funktioniert z.Bsp. mit:

Zitatget myDB - - 2013-07-26 2013-07-26 HZ_TempAussen:Temperature::

Allerdings habe ich eben festgestellt, daß die Log-Dateien immernoch aktualisiert werden. Auch wenn ich die Log-Dateien lösche, werden sie wieder neu erstellt.

Kann mir jemand sagen, wie ich die Log-Dateien loswerde? Wird nicht mit

Zitatdefine myDB DbLog /opt/fhem/db.conf .*:.*

automatisch auf DBlog umgestellt, auch wenn ich bei den Devices noch "Filelog" definiert habe?

Gruß
Blueberry63

Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 26 Juli 2013, 15:33:29
Hallo,

solange die FileLog-Einträge in der fhem.cfg (oder einer eingebundenen Konfig) stehen werden diese natürlich
genauso noch bedient.

Lösung:
Alle FileLog-Einträge löschen.

Grüße
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 26 Juli 2013, 16:15:45
Hallo Puschel74,

Danke für die schenlle Antwort. Aber wie kommen die Daten denn in die DB, wenn ich alle Filelog-Definitionen lösche? Muß ich die Definitionen alle auf Dblog umschreiben? Ich dachte, die Filelog-Definitionen würden ignoriert, wenn man über
Zitatdefine myDB DbLog /opt/fhem/db.conf .*:.*
auf Dblog umstellt.

Gruß
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 26 Juli 2013, 16:43:59
Hallo,

die FileLog-Einträge verweisen nicht auf DBLog sondern auf die fhem-Logfiles.

In den defines für FileLog wird das Modul FileLog angesprochen und dieses schreibt die Daten in die "FHEM-eigenen" Logfiles.

Wenn du

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

angegeben hast (wie du ja geschrieben hast) werden ALLE Events ALLER Devices an DBLog übergeben und dieses schreibt die Daten dann in die Datenbank.
Aus dieser kannst du dann ganz einfach wieder die weblinks generieren lassen.

Du kannst also die FileLog-Definitionen deiner Devices beruhigt löschen wenn du keine Logfiles wie bisher mehr haben möchtest.

Das habe ich auf meinem DB-RasPi genauso gemacht.
Devices erzeugt - aber keine FileLog-Definitionen dazu.
Die Daten wandern in die DB und von dort in die weblinks.

Grüße

Edith: Solange aber die FileLog-Definitionen existieren erzeugen die jeweiligen Devices natürlich immer noch auch FileLog-Einträge - parallel zu den DBLog-Einträgen.
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 26 Juli 2013, 17:01:54
Hallo Puschel74,

bis jetzt sah mein Weblink bspw. so aus:

Zitatdefine wl_HZ_TempAussen weblink filelog FL_HZ_TempAussen:myHZ_temp:CURRENT

Wenn ich nun "filelog" durch "dbplot" ersetzte, bekomme ich die Grafik nicht angezeigt. Hast Du mal ein Bespiel für mich?


Danke
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 26 Juli 2013, 17:52:06
Hallo,

ZitatWenn ich nun "filelog" durch "dbplot" ersetzte, bekomme ich die Grafik nicht angezeigt.

Kann auch nicht.
Soo einfach ist das ganze dann auch wieder nicht ;-)

Der weblink sieht z.B. für meinen S300TH draussen so aus:

define wl_Eingang_aussen weblink dbplot myDb:temphum
attr wl_Eingang_aussen label "Eingang_aussen Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"
attr wl_Eingang_aussen plotfunction Eingang_aussen
attr wl_Eingang_aussen room Temperaturen


das ist aber nur die halbe Miete.
Du musst entsprechend auch die temp4hum4.gplot anpassen damit diese die passenden Werte aus der DB ausliest und dir anzeigt.
Also etwas so:
set terminal png transparent truecolor rounded medium size <SIZE> enhanced
 
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics nomirror
set y2tics
#set ytics
set title '<L1>'
set grid xtics y2tics
 
set y2label "&#xb0;C"
set ylabel "%"
 
#DbLog <SPEC1>:temperature::
#DbLog <SPEC1>:humidity::
 
plot \
  1:2 ls l0 axes x1y2 title 'Temperature (&#xb0;C)' with lines
  1:2 ls l2fill axes x1y1 title 'Humidity (%)' with lines


Wichtig sind darin die Zeilen
Zitat#DbLog <SPEC1>:temperature::
#DbLog <SPEC1>:humidity::
Auch wenn die Raute als Kommentarzeichen zu verstehen ist weiß weblink anhand dieser Zeilen welche Werte du anzeigen willst.

Die *.gplot findest du unter
Zitatfhem\www\gplot
.
Am besten umbennen damit sie bei einem update nicht überschrieben werden oder einfach mal meine angehängte temphum.gplot nehmen ;-)

Grüße

P.S.: Ob "temperature" und "humidity" reichen weiß ich nicht da ich nicht weiß welchen Sensor bzw. welche Readings dieser liefert.
Einfach mal ausprobieren.

Edith: Achtung! Grad gesehen:
Du musst in meiner define des weblink auch auf DEINE DBLog verweisen. Ich habs grad angepasst - sollte so 1:1 klappen (bis auf temperature und humidity evtl.)

Edith2: Nicht zu vergessen!
Danke an andre für die Hilfe mit DBLog (ich wollts nur mal erwähnt haben ^^)
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: UliM am 26 Juli 2013, 22:17:33
Hi,
laut http://fhem.de/MAINTAINER.txt (//fhem.de/MAINTAINER.txt)
sollten Beiträge zu dblog im Ordner "Automatisierung" platziert werden.
Habe daher diesen Fred dorthin verschoben.
Gruß, Uli
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 29 Juli 2013, 17:34:39
@Puschel74
Heute hatte ich endlich Zeit, den Weblink mit DbLog zu testen. Vielen Dank für Dein Beispiel. Es funktionieren nun alle Weblinks, bis auf solche Devices (dummy), die als Werte "EIN" bzw. "AUS" als Reading haben.

Beispiel-Eintrag in DbLog:
ZitatTIMESTAMP   DEVICE   TYPE   EVENT   READING   VALUE   UNIT
29.07.2013 00:01   HZ_ZPstatus   DUMMY   Status: AUS   Status   AUS   

Eintrag in CFG-Datei:
Zitatdefine wl_HZ_ZPstatus weblink dbplot myDB:myHZ_status
attr wl_HZ_ZPstatus label "Heizung ZP Status: Aktuell $data{currval1}"
attr wl_HZ_ZPstatus plotfunction HZ_ZPstatus
attr wl_HZ_ZPstatus room Heizung

Die Plot-Datei:
Zitatset terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set grid xtics y2tics

set ytics ("AUS" 0, "EIN" 1)
set y2tics ("AUS" 0, "EIN" 1)
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#dbLog <SPEC1>:Status::

plot \
  1:2 ls l0 axes x1y2 title 'Status' with lines


Hast Du (oder jemand) eine Idee, warum die Plots leer bleiben?

Gruß
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 29 Juli 2013, 17:40:08
Hallo,

Dummys habe ich noch nicht versucht aber versuch mal anstelle von

Zitat#dbLog <SPEC1>:Status::

#dbLog <SPEC1>:State::

Grüße
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 29 Juli 2013, 17:45:39
wenn du bei einem dummy state mit dblog loggen/plotten willst musst du data als namen verwenden:#dbLog <SPEC1>:data::
gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 29 Juli 2013, 17:58:05
Hallo,

Mist, wusste doch das ich wieder was vergessen habe :-(

Danke andre

Grüße
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 30 Juli 2013, 08:59:41
@Andre, Puschel74,

es funktioniert weder mit "state", noch mit "data". Meine anderen Meßwerte lege ich übrigens auch in Dummys ab und dort funktioniert es. Allerdings werden dort Zahlenwerte eingelesen (Temperatur, Zähler, Stunden).

Ich werde zunächst mal mit "Filelog" weitermachen. Vielleicht gibt es ja irgendwann eine Lösung.

Danke Euch beiden.
Gruß
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 30 Juli 2013, 09:20:49
ich habe eben gesehen das du .*:.* als regex verwendest. das matched nicht auf state weil da im event kein doppelpunkt ist. also nur .*

hast du das umwandeln der EIN und AUS  in 0 und 1 schon in deinem plotfile? etwas in der art: $fld[2]=~"EIN"?1:0

gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 30 Juli 2013, 10:46:57
@Andre,

ich habe jetzt mal die Definition für DbLog umgestellt:

Zitatdefine myDB DbLog /opt/fhem/db.conf .*

Aber wie ich "$fld[2]=~"EIN"?1:0" einbauen soll verstehe ich nicht. Ich dachte, das würde durch
Zitatset ytics ("AUS" 0, "EIN" 1)
set y2tics ("AUS" 0, "EIN" 1)

gemacht. Könntest Du mir die Zeile in o.g. Plot-Datei einbauen?

Danke
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 30 Juli 2013, 10:50:18
die ticks setzen nur die beschriftung an den achsen.

die plot zeile muss etwa so aussehen: #dbLog <SPEC1>:data:$fld[2]=~"EIN"?1:0

ich kann es nur gerade nicht probieren und eventuell nach data noch ein zweiter doppelpunkt.

gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: Puschel74 am 30 Juli 2013, 11:02:53
Hallo,

auch wenn ich den Beitrag hier jetzt "kapere" aber wurde an DBLog etwas geändert?

Seit dem update am 26.07.2013 werden alle Plots aus Dummys nicht mehr aktualisiert *grübel*.
Ich habe die *gplot-Files für die dblog-plots umbenannt damit sie bei einem update nicht überschrieben werden und
die weblink-Einträge verweisen auch noch brav auf die passenden Files.

Wie gesagt: Nur bei den Dummy-Plots.
Die anderen Plots aus DBLog funktionieren noch wunderbar.

Grüße
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 30 Juli 2013, 12:30:37
Hallo,

bei mir werden die Plots aus Dummies aber noch erzeugt. Nur eben von diesem Dummy nicht, der die Werte EIN und AUS enthält.

@justme1968
Zitat#dbLog <SPEC1>:data:$fld[2]=~"EIN"?1:0

Dies funktioniert bei mir nicht. Muß hier nicht auch eine Umsetzung für den Zustand "AUS" erfolgen?

Ich verstehe auch nicht, warum hier "data" verwendet werden muß, denn in der DB heißt das Reading doch "Status":

ZitatTIMESTAMP DEVICE TYPE EVENT READING VALUE UNIT
29.07.2013 00:01 HZ_ZPstatus DUMMY Status: AUS Status AUS



Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 30 Juli 2013, 13:32:33
alles was EIN ist wird 1 und alles andere 0

das 'reading' state eines dummys wird zu data im dbLog
alle andern readings eines dummys behalten sein ein paar wochen ihren namen. da gab es einen patch. (siehe hier: Link (http://forum.fhem.de/index.php?topic=12941.0))

gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 30 Juli 2013, 13:56:58
In meiner DB gibt es aber kein Reading "state" für dieses Dummy. Ich lese die Daten aus einer externen Log-Datei und "fülle" das Dummy mit folgendem Code:

Zitatdefine HZ_ZPstatus dummy
define at_HZ_ZPstatus at +*00:05:00 {\
my @a = split(" ", `tail -1 /opt/fhem/vcontrol/hz_statuszp.log`);;\
if (($a[2]) eq "EIN" || ($a[2]) eq "AUS") {\
fhem "setstate HZ_ZPstatus $a[2]";;\
fhem "trigger HZ_ZPstatus Status: $a[2]";;\
}\
}

Ist das falsch?

Gruß
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 30 Juli 2013, 14:06:10
nicht falsch. es ist die von rudi empfohlene methode...

es war nur bis eben nicht ganz eindeutig was du genau machst. die meisten verwenden set für einen dummy. ich erzeuge lieber wirklich ein reading mit readingsSingleUpdate. und alle drei varianten wirken sich halt unterschiedlich aus.

bei dir sollte es wirklich Status heissen. also so:#dbLog <SPEC1>:Status:::$val=($val=~"EIN"?1:0)

gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 30 Juli 2013, 14:42:14
@ALLE
Problem gelöst!
(In meiner Firma müßte ich jetzt zum Bäcker Kuchen holen gehen ;-)  )

Ursache:
Zitat#dbLog <SPEC1>:Status::$fld[2]=~"EIN"?1:0
anstatt
#DbLog <SPEC1>:Status::$fld[2]=~"EIN"?1:0

(dbLog ist falsch)

Gruß
Blueberry63

Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 31 Juli 2013, 11:36:15
Hallo,

ich habe mich etwas zu früh gefreut. Im Prinzip funktioniert es zwar, aber es wird immer nur der "Status=AUS" im Plot angezeigt. Über die Erhöhung des Verbose-Levels kann man sehen, daß folgendes SELECT-Statement abgesetzt wird:

ZitatExecuting SELECT
          DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'),
          VALUE
         
        FROM history
        WHERE
          DEVICE  = 'HZ_ZPstatus'
          AND READING = 'Status'
          AND TIMESTAMP > STR_TO_DATE('2013-07-31 00:00:00', '%Y-%m-%d %H:%i:%s')
          AND TIMESTAMP < STR_TO_DATE('2013-08-01 00:00:01', '%Y-%m-%d %H:%i:%s')
        ORDER BY TIMESTAMP

Das führt zu folgendem Ergebnis:
Zitat...
2013-07-31 05:38:01   AUS
2013-07-31 05:43:01   AUS
2013-07-31 05:48:01   AUS
2013-07-31 05:53:01   AUS
2013-07-31 05:58:03   EIN
2013-07-31 06:03:01   EIN
2013-07-31 06:08:01   EIN
2013-07-31 06:13:01   EIN
2013-07-31 06:18:01   EIN
2013-07-31 06:23:01   EIN
2013-07-31 06:28:17   EIN
2013-07-31 06:33:02   EIN
2013-07-31 06:38:01   EIN
2013-07-31 06:43:01   EIN
2013-07-31 06:48:01   EIN
2013-07-31 06:53:01   EIN
2013-07-31 06:58:02   EIN
2013-07-31 07:03:01   EIN
2013-07-31 07:08:01   EIN
2013-07-31 07:13:01   EIN
2013-07-31 07:18:01   EIN
2013-07-31 07:23:01   AUS
2013-07-31 07:28:01   AUS
2013-07-31 07:33:01   AUS
...

Die PLOT-Datei ist folgende:
Zitatset terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set grid xtics y2tics

set ytics ("AUS" 0, "EIN" 1)
set y2tics ("AUS" 0, "EIN" 1)
set ylabel "Status"
set y2label "Status"
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#DbLog <SPEC1>:Status:$fld[2]=~"EIN"?1:0

plot \
  1:2 ls l0 axes x1y2 title 'Status' with lines

Eigentlich kann es doch nur an den letzten beiden Zeilen der PLOT-Datei liegen. Ich habe schon einiges ausprobiert, komme aber zu keiner Lösung.

Hat jemand eine Idee?

Gruß
Blueberry63
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: justme1968 am 31 Juli 2013, 11:38:02
schau dir mal den $val teil aus meinem letzen post an. die syntax für das ersetzen per regex ist bei filelog und dblog unterschiedlich.

gruss
  andre
Titel: Aw: Umstellung von Filelog auf Dblog
Beitrag von: blueberry63 am 31 Juli 2013, 14:20:49
Hallo Andre,

man, ist das peinlich! Ich hatte das mit $val einfach überlesen. Also: nochmal zum Bäcker :-(

Jetzt ist alles perfekt.

Danke an alle.

Gruß
Blueberry63