Problem mit Log für Ölstand / Brennerlaufzeit

Begonnen von Thomas81, 31 Juli 2013, 22:30:19

Vorheriges Thema - Nächstes Thema

Thomas81

Hallo

habe folgendes problem, seit einiger zeit wird der Wert für "Oelstand" nicht mehr im Log erfasst obwoh er mit set geschrieben wird, im dummy ist immer der richtige wert vorhanden, nur wird er nicht mehr ins log übergeben.


##### Brenner Laufzeit #########################################################
# BRENNER                                                                      #
# Mit Oelzähler                                                                #
################################################################################
define Brenner_on_h dummy
attr Brenner_on_h group Heizung
attr Brenner_on_h icon burner
attr Brenner_on_h room Heizung
define Oelstand dummy
attr Oelstand group Heizung
attr Oelstand icon oil-barrel-icon
attr Oelstand room Heizung

define Brenner_on_h_zaehler notify HMSensorArray1_Brenner:(open|closed) {\
if("$EVENT" eq "closed") {\
$data{zeit_last_brenner} = time();;\
} elsif("$EVENT" eq "open") {\
$data{zeit_min_brenner} += (time()-$data{zeit_last_brenner})/3600;;\
if($data{zeit_last_brenner} > "0") {\
$data{zeit_akt_brenner} = Value("Brenner_on_h") + $data{zeit_min_brenner};;\
fhem "set Brenner_on_h $data{zeit_akt_brenner}";;\
$data{oel} = Value("Oelstand") - ($data{zeit_min_brenner} * 2.7 / 0.84);;\
fhem "set Oelstand $data{oel}"};;\
}\
Log 4, "Brenner Anfang zaehler zlast:  $data{zeit_last_brenner}";;\
Log 4, "BrennerLaufzeit zmin:  $data{zeit_min_brenner}";;\
Log 1, "Brenner gesamtzeit akt:  $data{zeit_akt_brenner}";;\
Log 1, "Brenner Oelmenge:  $data{oel}";;\
$data{zeit_min_brenner} = 0;;\
}
attr Brenner_on_h_zaehler room CUL_HM
###### Rücksetzten bei Shutdown #####
define Shutdown1 notify global:SHUTDOWN {$data{zeit_min_brenner} += (time()-$data{zeit_last_brenner})/3600;;\
if(($data{zeit_last_brenner} > "0" )&&((Value("HMSensorArray1_Brenner") eq "closed")) {\
$data{zeit_akt_brenner} = Value("Brenner_on_h") + $data{zeit_min_brenner};;\
fhem "set Brenner_on_h $data{zeit_akt_brenner}";;\
$data{oel} = Value("Oelstand") - ($data{zeit_min_brenner} * 2.7 / 0.84);;\
fhem "set Oelstand $data{oel}"};;\
\
Log 4, "Brenner bei Shutdown Anfang zaehler zlast:  $data{zeit_last_brenner}";;\
Log 4, "BrennerLaufzeit bei Shutdown zmin:  $data{zeit_min_brenner}";;\
Log 4, "Brenner gesamtzeit akt bei Shutdown:  $data{zeit_akt_brenner}";;\
$data{zeit_min_brenner} = 0;;\
}

wenn ich aber z.B:
define Oelstand_write at *23:59:56 {\
my $val = Value("Oelstand");;;;fhem "set Oelstand $val"}

verwende wird der Wert ins Log übernommen.
kann es sein das die Abarbeitung der notify zu lange dauert?

LG
Thomas

fiedel

Hi Thomas,

poste doch mal bitte noch deine FileLog- oder DbLog- Definition!
Vielleicht geht das mit den globalen Var. aber so nur, wenn die Logik z.B in der 99_myUtils steht?

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

rudolfkoenig

Wenn Du mit "Log" das fhem "global logfile" meinst, dann ist das einer Aenderung im 98_dummy geschuldet:
das "set" wird mit loglevel 4 (und damit normalerweise nicht) geschrieben. Man kann das alte Verhalten aber per "attr dumy loglevel 2" wieder zum Leben erwecken.

Falls es was anderes ist, dann bitte einen deutlich staerker abgespeckten Fehlerfall basteln, damit man das ohne passenden Hardware nachstellen kann.

Thomas81

Hallo

define OelstandLog FileLog /mnt/USBROT/FHEMLOG/OelstandLog-%Y.log Oelstand
attr OelstandLog logtype text


ist die def. des Logs., hab da auch schon mehrere sachen getestet...

Ich denke aber mittlerweile es liegt am notify HMSensorArray1_Brenner:(open|closed),da  öfter getriggert wird da ich einen HM-SCI-3-FM verwende:

2013-07-22_09:32:09 HMSensorArray1_Brenner closed
2013-07-22_09:32:09 HMSensorArray1_Brenner contact: closed (to HMLAN1)
2013-07-22_09:43:48 HMSensorArray1_Brenner open
2013-07-22_09:43:48 HMSensorArray1_Brenner contact: open (to HMLAN1)

kann das sein?


LG

fiedel

Hi Thomas,

das ist doch kein zu häufiges Triggern. Da liegen ja Minuten dazwischen. Gib doch mal in der Befehlsmaske ein:

{fhem "set Oelstand $data{oel}"}

In der Variable muss zu dem Zeitpunkt natürlich ein Wert stehen. Dann versuche es mal mit:

{fhem "set Oelstand 50"}

Also direkt mit einem sinnvollen Wert. Sieht mir eher so aus, als ob es an der Variable liegt. In deinem Beispiel welches geht, verwendest du ja auch eine lokale Var.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Thomas81

Hallo Frank

wenn ich {$data{oel}} eingebe wird mir der Letzte Wert angezeigt, er wird auch korrekt ins Dummy geschrieben.

Unabhängig davon sollte dann ja der Eintrag ins Log erfolgen weil sich der Wert im dummy geändert hat, nur da passiert nichts...

in Systemlog wird sie mit "Log 1, "Brenner Oelmenge: $data{oel}";;\" ebenfalls korrekt geschrieben, nur eben ins OelstandLog nicht.

LG
Thomas

fiedel

Hi Thomas,

so sehe ich das auch. Da wüßte ich jetzt auch nicht weiter. Versuche doch mal wie Rudi sagt, die Funktion auf ein Minimum zu reduzieren, sodass aber der Fehler noch auftritt und poste das. Dann kriegst du Hilfe von ganz oben. ;o)

LG und schönes WE

Frank

Edit:

Habe das mal schnell selbst gemacht und bei mir geht es:


define Oelstand dummy
attr Oelstand room Test
# Dummy zuerst per Hand (set Oelstand 1) auf Wert 1 gesetzt

define Brenner_on_h_zaehler notify Brenner_on_h_zaehler {\
$data{oel} = Value("Oelstand") + 1;;\
fhem "set Oelstand $data{oel}";;\
Log 1, "Brenner Oelmenge: $data{oel}";;\
}
attr Brenner_on_h_zaehler room Test

define OelstandLog FileLog /media/sd_intern_4gb/fhem/log/OelstandLog-%Y.log Oelstand
attr OelstandLog logtype text
attr OelstandLog room Test
# notify mehrmals per Hand getriggert (trigger Brenner_on_h_zaehler)

Im Oelstand Log nach 2 mal triggern:
2013-08-03_09:33:43 Oelstand 1
2013-08-03_09:36:25 Oelstand 2
2013-08-03_09:36:33 Oelstand 3

Im FHEM Log nach 2 mal triggern:
2013.08.03 09:36:25 1: Brenner Oelmenge: 2
2013.08.03 09:36:33 1: Brenner Oelmenge: 3



(siehe Anhang / see attachement)


Edit2:

Habe in deinem Prog. noch einen kl. Fehler gefunden:

$data{zeit_min_brenner} += (time()-$data{zeit_last_brenner})/3600;;\

Das "+" gehört doch da sicher nicht hin , oder? ;o)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Thomas81

Hallo Frank

danke für deine Bemühungen, mit dem "+" hast Du natürlich recht, leider bin ich derzeit nicht zuhause, es wird also etwas dauern bis ich zugriff zur Hardware habe und den code reduzieren kann...

LG