Hauptmenü

Eigenes Logfile erstellen

Begonnen von Michael, 28 September 2013, 20:09:46

Vorheriges Thema - Nächstes Thema

Michael

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.
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

betateilchen

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.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michael

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.
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michael

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.cfg
define updatetest at +*00:15:00 {eigenLog}

99_myUtils.pm
sub 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
}
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

betateilchen

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.)


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fredolino

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


chr2k

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.

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

chr2k

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

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