[Gelöst] FileLog loggt mein reading nicht

Begonnen von bismosa, 20 August 2017, 09:39:02

Vorheriges Thema - Nächstes Thema

bismosa

Hallo,

eigentlich ist es mir sehr unangenehm schon wieder fragen zu müssen...ich suche nun leider schon seit Stunden und bin eigentlich der Meinung das ich alles korrekt eingerichtet habe...
Ich bin immer noch mit meiner Heizungsüberwachung beschäftigt.
Ich nutze als Device ein RPI_GPIO um die Brennerlaufzeit zu erfassen:
defmod GPIO_Heizung_Brenner RPI_GPIO 5
attr GPIO_Heizung_Brenner active_low yes
attr GPIO_Heizung_Brenner direction input
attr GPIO_Heizung_Brenner icon icoHEIZUNG
attr GPIO_Heizung_Brenner interrupt both
attr GPIO_Heizung_Brenner pud_resistor up
attr GPIO_Heizung_Brenner room Heizung
attr GPIO_Heizung_Brenner toggletostate yes
attr GPIO_Heizung_Brenner webCmd :

setstate GPIO_Heizung_Brenner off
setstate GPIO_Heizung_Brenner 2017-08-20 06:27:54 Dblclick off
setstate GPIO_Heizung_Brenner 2017-08-20 08:27:49 Gesamtmenge 3.83550496347396
setstate GPIO_Heizung_Brenner 2017-08-20 08:27:48 LastStartTime 1503210468.99642
setstate GPIO_Heizung_Brenner 2017-08-20 08:27:49 LetzteLaufzeit 0.13384241660436
setstate GPIO_Heizung_Brenner 2017-08-20 08:27:49 LetzterVerbauch 0.00484909209807714
setstate GPIO_Heizung_Brenner 2017-08-20 06:27:54 Longpress off
setstate GPIO_Heizung_Brenner 2017-08-20 09:29:03 Pinlevel low
setstate GPIO_Heizung_Brenner 2017-08-20 08:27:48 Recording none
setstate GPIO_Heizung_Brenner 2017-08-20 08:28:51 Restmenge 3000.1174965079
setstate GPIO_Heizung_Brenner 2017-08-20 06:27:54 state off


Dann habe ich mir ein Notify eingerichtet um die Readings zu setzen:
GPIO_Heizung_Brenner {
if("$EVENT" eq "on") {
   #$data{brenner_last} = time();;
   my $Recording = ReadingsVal ("GPIO_Heizung_Brenner","Recording", "");;
   if ($Recording ne "running"){ #Doppeltes Starten verhindern
    fhem("setreading GPIO_Heizung_Brenner LastStartTime ".time());;
    fhem("setreading GPIO_Heizung_Brenner Recording running");;
   }
   
} elsif("$EVENT" eq "off") {
   fhem("setreading GPIO_Heizung_Brenner Recording none");;
   my $StartTime = ReadingsVal ("GPIO_Heizung_Brenner","LastStartTime", "");;
   fhem("setreading GPIO_Heizung_Brenner LastStartTime ".time());;
   my $brenner_verbrauch = (time()-$StartTime)/60*0.03626;; #0,03626=2,5kg/h Dichte:0,820-0,860 / 60 (Anzeige in Min)
   #$data{brenner_min} = (time()-$data{brenner_last})/60*0.03626;; #0,03626=2,5kg/h Dichte:0,820-0,860 / 60 (Anzeige in Min)
   #fhem "trigger n_Heizung_Brenner $data{brenner_min}";;
   fhem "trigger n_Heizung_Brenner $brenner_verbrauch";;
   fhem("setreading GPIO_Heizung_Brenner LetzterVerbauch ".$brenner_verbrauch);;
   
   #Zeit
   my $brenner_time = (time()-$StartTime)/60;;
   fhem "trigger n_Brenner_time $brenner_time";;
   fhem("setreading GPIO_Heizung_Brenner LetzteLaufzeit ".$brenner_time);;

   #Gesamtmenge
   my $Menge = ReadingsVal ("GPIO_Heizung_Brenner","Gesamtmenge", 0);;
   my $Gesamt = $Menge + $brenner_verbrauch;;
   fhem("setreading GPIO_Heizung_Brenner Gesamtmenge ".$Gesamt);;
   
   #Restmenge
   my $Rest = ReadingsVal("GPIO_Heizung_Brenner","Restmenge", 0);;
   my $RestNeu = $Rest - $brenner_verbrauch;;
   fhem("setreading GPIO_Heizung_Brenner Restmenge ".$RestNeu);;
  }
}


Soweit funktioniert auch alles perfekt. Die readings werden alle korrekt gesetzt.

Um die Restmenge in einem SVG anzuzeigen, versuche ich die Restmenge zu loggen:
defmod log_Brenner_Restmenge FileLog ./log/Brenner_Restmenge-%Y.log GPIO_Heizung_Brenner:(Restmenge).*
attr log_Brenner_Restmenge room Heizung

setstate log_Brenner_Restmenge active
setstate log_Brenner_Restmenge 2017-08-20 08:28:51 linesInTheFile 9


Wenn ich nun manuell ein neues reading setze:
setreading GPIO_Heizung_Brenner Restmenge 3000
Wird auch fleißig in mein Logfile geschrieben.
Wenn das Reading jedoch über das Notify neu gesetzt wird, wird nichts geloggt.
Gesetzt wird das Reading korrekt, auch die Events sehen identisch aus:
#Setzen der readings über das Notify:
2017-08-20 08:27:49 notify n_Heizung_Brenner 0.00484909209807714
2017-08-20 08:27:49 notify n_Brenner_time 0.13384241660436
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner off
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner Recording: none
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner LastStartTime: 1503210468.99642
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner LetzterVerbauch: 0.00484909209807714
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner LetzteLaufzeit: 0.13384241660436
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner Gesamtmenge: 3.83550496347396
2017-08-20 08:27:49 RPI_GPIO GPIO_Heizung_Brenner Restmenge: 3000.1174965079
#Manuelles setzen, das auch geloggt wird:
2017-08-20 08:28:51 RPI_GPIO GPIO_Heizung_Brenner Restmenge: 3000.1174965079


Wo liegt mein Fehler? Wie kann ich den Fehler weiter eingrenzen?

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

amenomade

Vielleicht ist das die Ursache?

Zitat von: CommandREFAchtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bismosa

Hallo!

Exakt! Genau das scheint die Ursache zu sein. Jetzt funktioniert es!
Ich habe nun (nachdem ich ja nun weiß wonach ich suche) diesen Beitrag gefunden:
Zitat von: justme1968 am 17 Oktober 2014, 19:34:49
das fhem sleep macht genau das. es legt intern ein temporäres at an und alles was danach kommt wird unsbhängig und nicht mehr im notify ausgeführt.

Ok. Verstehe ich. Auch wenn ich nicht glaube, das ich den (meinen) Fehler jemals selbst gefunden hätte.

Vielen vielen Dank!!!!

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...