Moin
Wahrscheinlich eine dumme Frage von mir.
Aber ich habe noch kein Möglichkeit gefunden.
Ist es möglich ein Logfile von verschiedenen Device und deren Redings
in eine Datei zu Schreiben?
Bitte um Hilfe.
Natürlich...
Internals:
DEF ./log/out_Balkon-%Y-%m.log (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
NAME FileLog_out_Balkon
REGEXP (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
STATE active
TYPE FileLog
in dieser Definition werden Readings der devices
- out_Balkon
- BMP180
- Helligkeit
- sunDummy
- out_Regen_Sensor
gemeinsam in die Datei FileLog_out_Balkon-2013-09.log geschrieben.
Die Definition, was geloggt werden soll, besteht einfach aus regex-Anteilen auf events (das ist der Teil, der in der Klammer steht), die Du gestalten kannst, wie Du möchtest.
---
Danke.
Das klappt, aber jedes Device wird in eine Zeile geschrieben.
Ich hatte mich bei meiner Frage schlecht Ausgedrückt, weil mir
die Zeit im Nacken saß. Sorry !!! ;-)
Vorgestellt hatte ich es mir so:
out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*
nur alles in einer Zeile.
Das macht doch keinen Sinn, weil die Werte von unterschiedlichen Devices nicht gleichzeitig in fhem ankommen.
Das Schreiben der Logdatei wird aber von jedem Event einzeln (also nacheinander) getriggert.
Das was Du machen möchtest, müsstest Du Dir als Funktion selbst programmieren und z.B. in die 99_myUtils unterbringen.
Oder Du schaust mal das Modul DbLog an, dort wird jeweils die letzten Werte aller geloggten Devices in einer gesonderten Tabelle abgelegt, was Deinen Plan erheblich vereinfacht.
Hallo betateilchen
ZitatDas macht doch keinen Sinn, ....
Da hast du wohl Recht, aber mir reichen die Werte alle x Minuten.
ZitatDas was Du machen möchtest, müsstest Du Dir als Funktion selbst programmieren und z.B. in die 99_myUtils unterbringen.
Das habe ich getan.
Könntest du mal dir den Code ansehen aber keine grauen Haare bekommen.
Und das eine oder andere kritisieren.
fhem.cfgdefine updatetest at +*00:15:00 {eigenLog}
99_myUtils.pmsub eigenLog()
{
my $tm = localtime(time);
my $T = int(ReadingsVal("Wittingen","temperature",0));
my $H = int(ReadingsVal("Wittingen","humidity",0));
my $W = int(ReadingsVal("Wittingen","wind",0));
my $R = int(ReadingsVal("Wittingen","rain",0));
my $IR = int(ReadingsVal("Wittingen","israining",0));
my $D = int(ReadingsVal("Wittingen","dewpoint",0));
my $cB = int(ReadingsVal("Wittingen","cloudBase",0));
my $RD = int(ReadingsVal("Wittingen","rain24",0));
my $wI = int(ReadingsVal("Wittingen","windIndex",0));
my $wT = ReadingsVal("Wittingen","windText",0);
my $pT = int(ReadingsVal("Luftdruck","temperature",0));
my $P = int(ReadingsVal("Luftdruck","pressure",0));
my $PN = int(ReadingsVal("Luftdruck","pressure-nn",0));
open (DATEI, ">>/opt/fhem/log/test.csv") or die $!;
print DATEI "$tm T: $T H: $H W: $W R: $R IR: $IR D: $D cB: $cB RD: $RD wI: $wI wT: $wT pT: $pT P: $P PN: $PN\n";
close (DATEI);
return
}
Jetzt hab ich zumindest mal verstanden, was Du eigentlich genau vorhast.
Das wird so sicher funktionieren, aber ich würde einen anderen Weg gehen und keine eigene Datei schreiben.
Definiere in fhem einen dummy und weise diesem den gewünschten Sammelwert (ohne Timestamp) zu, dann kann fhem das selbst "fhem-konform" loggen.
Vermutlich könnte man das sogar per stateFormat abdecken.
(Und wenn man einer Datei die Endung .csv gibt, sollte man auch den Inhalt entsprechend angeben (C = comma S = separated V = values) und Kommata kann ich in Deinem Code nicht finden.)
---
Hallo ,
ich kriegs nicht in meinen Schädel. Ich möchte
define SB_THL_T ModbusRegister 0 14804
attr SB_THL_T IODev SB
attr SB_THL_T alias UG-Temp
attr SB_THL_T plcDataType REAL
attr SB_THL_T room Smartbox
attr SB_THL_T stateFormat {sprintf("%0.1f °C", ReadingsVal($name,"state",0))}
attr SB_THL_T updateInterval 60
den hier erfassten Wert in ein log schreiben und als Plot abbilden. Was ich auch mache nüscht will klappen.
Kann mir wer das so für "Dummies" erklären. Der Mechanismus ist mir nicht klar.
Hab das hier oben durch Anpassung mit copy&paste hinbekommen.
Danke
Fredolino
Zitat von: betateilchen am 28 September 2013, 20:21:20
Internals:
DEF ./log/out_Balkon-%Y-%m.log (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
NAME FileLog_out_Balkon
REGEXP (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
STATE active
TYPE FileLog
Wo trage ich diesen Code ein? Ich habe bisher immer nur mit der oberen "Kommandozeile" gearbeitet. Danke.
define FileLog_out_Balkon FileLog ./log/out_Balkon-%Y-%m.log (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
sollte in
Zitatder oberen "Kommandozeile"
klappen wenn KEIN Device namens FileLog_out_Balkon existiert - sonst bekommst du eine Meldung.
Zitat von: Puschel74 am 13 September 2015, 19:52:52
define FileLog_out_Balkon FileLog ./log/out_Balkon-%Y-%m.log (out_Balkon.T:.*|BMP180.T:.*|Helligkeit|sunDummy|out_Regen_Sensor.*)
sollte inklappen wenn KEIN Device namens FileLog_out_Balkon existiert - sonst bekommst du eine Meldung.
Herzlichen Dank! Aber wo kann ich derartige AUflistungen von Codes in FHEM (oder der passenden Datei im System) einfügen. Bspw hab ich dasselbe Problem mit folgendem Thread (erstes Posting) http://forum.fhem.de/index.php/topic,23912.msg171292.html#msg171292 (http://forum.fhem.de/index.php/topic,23912.msg171292.html#msg171292)
Zitat von: betateilchen
Definition des SVG plots:
Internals:
CFGFN
DEF sunDummyLog:SVG_sunDummy:CURRENT
GPLOTFILE SVG_sunDummy
LOGDEVICE sunDummyLog
LOGFILE CURRENT
NAME SVG_sunDummy
NR 276
STATE initialized
TYPE SVG
Attributes:
fixedrange year
room 19 Balkon
title {"".dec2hms($data{min1})." - ".dec2hms($data{max1})." - ".dec2hms($data{min2})." - ".dec2hms($data{max2})}
zugehörige gplot-Datei:
# Created by FHEM/98_SVG.pm, 2014-05-18 23:36:13
set 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 '<TL>'
set ytics
set y2tics
set grid ytics
set ylabel "Sonnenaufgang"
set y2label "Sonnenuntergang"
set yrange [4:10]
set y2range [16:22]
#FileLog 4:sunDummy.sunrise\x3a::time2dec($fld[3])
#FileLog 4:sunDummy.sunset\x3a::time2dec($fld[3])
#FileLog 4:sunDummy.sunset\x3a::time2dec($fld[3])
plot "<IN>" using 1:2 axes x1y1 title 'Sonnenaufgang' ls l6fill lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title 'Sonnenuntergang' ls l0 lw 1 with lines,\
"<IN>" using 1:2 axes x1y2 title ' ' ls l4fill lw 1 with lines