Hallo zusammen,
ich habe ein Dummy Device erstellt, welches einen Wert der Regenmenge pro Tag enthält.
Der Notify setzt diesen Wert:
Wetterstation {fhem("set Regenmenge ". (ReadingsVal("Wetterstation", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0)))}
Mein At Job berechnet diesen Wert alle 5 Minuten neu und setzt um 00:00:00 Uhr den neuem Offset.
+*00:05:00 {BestimmeRegenmengeProTag()}
99_MyUtils.pm
sub BestimmeRegenmengeProTag()
{
my $logfile = @_;
my $menge = "";
my $tagmenge = "";
my $offset = "";
# my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
my $Stunde = (strftime("%H",localtime(time())));
my $Minute = (strftime("%M",localtime(time())));
my $Sekunde = (strftime("%S",localtime(time())));
# Log 3, "Uhrzeit: $Stunde:$Minute:$Sekunde Uhr";
if($Stunde == 00 && $Minute < 06 && $Sekunde < 59)
{
$offset .= ReadingsVal("Wetterstation", "rain", 0);
Log 4, "File: $logfile, RegenmengeOffset: $offset";
{ fhem("set RegenmengeOffset $offset") };
Log 4, "File: $logfile, Bedingung Reset erfüllt: $Stunde:$Minute:$Sekunde Uhr";
}
else
{
$menge .= (ReadingsVal("Wetterstation", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));
$tagmenge .= (ReadingsVal("Wetterstation", "rain", 0));
Log 4, "File: $logfile, Regenmenge gesamt: $menge mm";
Log 4, "File: $logfile, RegenmengeTag: $tagmenge mm";
{ fhem("set RegenmengeTag $tagmenge");
# Log 4, "File: $log, Bedingung nicht erfüllt: $Stunde:$Minute:$Sekunde Uhr";
}
return $tagmenge;
}
}
Ich möchte gerne den durch das Sub errechneten Wert direkt in das Logfile "./log/Regenmege_Pro_Tag-%Y.log Regenmenge_Tag" schreiben.
Ich habe das mit AddLog versucht, leider ohne Erfolg:
##########################################################
#### Log-abriss vermeiden
# called by
# define addLog notify addLog {addLog("ez_Aussensensor","state");;\
# addLog("ez_FHT","actuator");;\
# addLog("MunichWeather","humidity");;\
# addLog("MunichWeather","pressure");;\
# addLog("MunichWeather","temperature");;\
# addLog("MunichWeather","wind_chill");;}
# define a_midnight1 at *23:59 trigger addLog
# define a_midnight2 at *00:01 trigger addLog
sub
addLog($$) {
my ($logdevice, $reading) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ($reading =~ m,state,i) {
fhem "trigger $logdevice $logentry << addLog";
} else {
fhem "trigger $logdevice $reading: $logentry << addLog";
}
}
Wo muss ich AddLog einbinden und wie?
Oder kann ich mit einen Perl Befehl direkt in das Log schreiben?
Vielen Dank
Wieso schreibt RegenmengeTag nicht in das Log?
Das geht doch über die Definition des Log.
Warum willst Du es kompliziert machen?
Vorschlag einfach direkt in FHEM? Was spricht dagegen?
define FileLog_Regenmenge FileLog ./log/Regenmenge-%Y.log Regenmenge.*
attr FileLog_Regenmenge logtype text
Hinweis: bitte CodeTags verwenden https://forum.fhem.de/index.php/topic,71806.0.html
Gruß Otto
Frage:
Gab's für diese Art der Datenerfassung nicht statistics (https://wiki.fhem.de/wiki/Statistics)?
Und allg. der Hinweis: Log verwendet intern Log3. Es wäre mir neu, dass damit in was anderes als das fhem-log geschrieben werden könnte.
Dafür müßtest du "normale" Dateioperationen verwenden...
Danke Otto, geht!