[ gelöst ] "Probleme mit FileLog"

Begonnen von Michael, 08 Mai 2015, 17:04:51

Vorheriges Thema - Nächstes Thema

Michael

Moin

Ich habe ein Problem mit Filelog, und zwar wird nicht alles geloggt.

Habe das REGEXP  KS300:temperature.*|KS300:dewpoint.*|KS300:windchill.* in den
unterschiedlichen Arten versucht, und bekomme immer nur die ersten beiden in die Log Datei.
Bzw den zweiten Wert zweimal.

Hier ein Auszug der Log Datei.
2015-05-08_16:51:00 KS300 dewpoint: 6.9
2015-05-08_16:51:00 KS300 dewpoint: 6.9
2015-05-08_16:51:00 KS300 temperature: 18.1
2015-05-08_16:48:27 KS300 dewpoint: 7.1
2015-05-08_16:48:27 KS300 dewpoint: 7.1
2015-05-08_16:48:27 KS300 temperature: 18.0
2015-05-08_16:45:55 KS300 dewpoint: 6.7
2015-05-08_16:45:55 KS300 dewpoint: 6.7
2015-05-08_16:45:55 KS300 temperature: 17.9
2015-05-08_16:43:22 KS300 dewpoint: 6.8
2015-05-08_16:43:22 KS300 dewpoint: 6.8
2015-05-08_16:43:22 KS300 temperature: 18.0

Was mach ich da schon wieder falsch?  :-[
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

rudolfkoenig

MWn generiert das KS300 Modul keine Events mit dem Namen windchill

Michael

#2
Hallo rudolfkoenig

Dem Windchillwert bekommen ich so, sehe 1. Anhang
([KS300:temperature] < 5 and [KS300:wind] > 5) ({ my $temp = ReadingsVal("KS300","temperature","");;
my $speed = ReadingsVal("KS300","wind","");;
my $var = sprintf("%.1f",13.12 + 0.6215 * $temp -  11.37 * $speed**0.16 + 0.3965 * $temp *$speed**0.16 );;
fhem("setreading KS300 windchill $var")})
DOELSE (setreading KS300 windchill [KS300:temperature])


Im zweiten Anhang ist zusehen das der Windchill ins KS300
als Reading auftaucht.

EDIT: Auch im Event monitor taucht der Windchill Eintrag auf. Sehe Anhang.
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

rudolfkoenig

Fuer diesen Zweck ist userReadings vorgesehen.

Bereichern von Events ist leider nicht so einfach/ueberall moeglich, Module wie average oder dewpoint muessen dafuer spezielle Vorkehrungen treffen, was nicht ohne weiteres im Userlevel nachzustellen ist. Das Problem ist kein FileLog Problem, notify/DbLog/DOIF/usw sind davon genauso betroffen.

Michael

#4
ZitatAutor: rudolfkoenig
« am: Heute um 18:20:03 » Zitat einfügen
Fuer diesen Zweck ist userReadings vorgesehen.
Ist für mich erstmal etwas Unübersichtlich, da alles in einem kurzen Eingabefeld ist.  ::)
Und ich noch Anfänger bin. :-[

Jetzt habe ich es so gemacht:
In die 99_myUtils.pm
sub windchill()
{
my $wc;
my $var;
my $temp = ReadingsVal("KS300","temperature",0);
my $wind = ReadingsVal("KS300","wind",0);

my $var = sprintf ("%.1f",13.12 + 0.6215 * $temp -  11.37 * $wind**0.16 + 0.3965 * $temp *$wind**0.16 );;

return $wc = $temp;
return $wc = $var   if($var  < $temp);

}

und ein at
+*00:00:10 {my $wc =  $defs{KS300};
  readingsSingleUpdate($wc,"windchill", windchill(), 1) if( defined($wc) );}

Die 10 Sec sind nur zum testen.

Und nun werd auch das Windchill gelogt.  :) :) :)
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

rudolfkoenig

ZitatIst für mich erstmal etwas Unübersichtlich, da alles in einem kurzen Eingabefeld ist.  (http://forum.fhem.de/Smileys/default/rolleyes.gif)
Soll einen dazu animieren, die Funktion nach 99_myUtils.pm auszulagern.
Testen kannt man es mit
Zitat{ windchill() }
oder
Zitat{ readingsSingleUpdate($defs{KS300},"windchill", windchill(), 1) }
Letzteres mache ich am liebsten in einem telnet Fenster mit aktivierten "inform timer", da sehe ich direkt die generierten Events.
Oder man verwendet statt telnet "socat TCP:fhemhost:7072 readline", dann hat man auch command-line history.

In deiner Funktion verstehe ich die letzten zwei Zeilen nicht:
- die Ueberpruefung sollte vor der bedingungslosen return kommen, sonst ist es sinnfrei.
- die Zuweisung im Return finde ich sinnlos, da reicht doch auch ein "return $temp"

Und natuerlich sollte man statt at userReadings verwenden :)

Michael

Moin

Bitte habe Rücksicht, bin kein Profi und suche mir einiges Zusammen.  :o

ZitatIn deiner Funktion verstehe ich die letzten zwei Zeilen nicht:
- die Ueberpruefung sollte vor der bedingungslosen return kommen, sonst ist es sinnfrei.
- die Zuweisung im Return finde ich sinnlos, da reicht doch auch ein "return $temp

1 die Ueberpruefung sollte vor ...
Ich denke mal du meinst das : return $wc = $var   if($var  < $temp); das habe ich so
übernommen, als du mir mal bei der Windstärken Bezeichnung geholfen hast. (Windstille, leiser Zug, ...)

2 die Zuweisung im Return ...
Die erste Zuweisung trifft ein wenn die Temperatur > 5 und Wind < 5, dann ist Windchill = Temperatur.
Die zweite habe ich erstmal geändert in return $wc = $var   if($temp < 5 and $wind > 5); das wird wohl eher stimmen, denn Windchill wird erst Berechnet wenn Temperatur < 5 und Wind > 5 ist.

ZitatUnd natuerlich sollte man statt at userReadings verwenden :)
Also sollte man ins Device attr userReadings {my $wc =  $defs{KS300}; readingsSingleUpdate($wc,"windchill", windchill(), 1) if( defined($wc) );}
Verstehe ich das so richtig?
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

rudolfkoenig

Zitatdas habe ich so übernommen, als du mir mal bei der Windstärken Bezeichnung geholfen hast
Kannst du mir noch sagen, wo? Nach einem bedingungslosen return wird kein Code mehr ausgefuehrt, deswegen ist alles danach sinnlos.

Zitatgeändert in return $wc = $var
Das ist verwirrend, weil die Zuweisung an $wc ueberfluessig ist. "return $var" reicht, und verwirrt nicht.

Ich muss zugeben, dass ich deine Formel nicht verstanden habe , aber ich habe die Funktion syntaktisch korrigiert:
sub
windChill($)
{
  my ($name) = @_;
  my $temp = ReadingsVal($name, "temperature", 0);
  my $wind = ReadingsVal($name, "wind", 0);
  my $var = sprintf ("%.1f", 13.12 + 0.6215 * $temp - 11.37 * $wind**0.16 + 0.3965 * $temp *$wind**0.16 );
  return ($var < $temp ? "yes" : "no");
}


Verwendung:
attr KS300 userReadings windchill { windChill("KS300") }

Test im telnet oder socat:
fhem> info timer
fhem> { Dispatch($defs{CUL}, "810d04xx4027a00171881358002503", undef) }
2015-05-14 11:54:29.969 KS300 out1 T: 18.8  H: 53  W: 0.8  R: 20.9  IR: no  Wi: 0
2015-05-14 11:54:29.969 KS300 out1 rain: 20.9
2015-05-14 11:54:29.969 KS300 out1 wind: 0.8
2015-05-14 11:54:29.969 KS300 out1 humidity: 53
2015-05-14 11:54:29.969 KS300 out1 temperature: 18.8
2015-05-14 11:54:29.969 KS300 out1 israining: no
2015-05-14 11:54:29.969 KS300 out1 windchill: no
2015-05-14 11:54:29.969 KS300 out1 dewpoint: 9.0

Der Hex-String stammt aus der KS300-Detail-Ansicht, RAWMSG Zeile.
Den {Dispatch...} kann man auch in der FHEMWEB Kommandozeile eingeben, ist mAn aber etwas umstaendlicher.