mehrere at zusammenfassen, aber mit Logging

Begonnen von gelbwichtel, 13 Februar 2013, 21:25:36

Vorheriges Thema - Nächstes Thema

gelbwichtel

Hallo,
momentan steh ich total auf dem Schlauch, wie ich das hier umsetzen kann.
Ich habe momentan 12 Temperatursensoren im Einsatz, die alle in ein gemeinsames Log schreiben.
Jeder einzelne Sensor wird z.B. alle 90sek angesprochen.
Nun denke ich, dass das die vielen at zum einen nicht unbedingt notwendig sind, zum anderen ev. auch das System runterziehen und verlangsamen.

vorher:
define 1W_Temp1 at +*00:01:30 set Temp1 messen;; sleep 2;; get Temp1 temp
define Log_1W_Temp1  FileLog /var/log/temp.log Temp1:(temp).*
#... usw ...
define 1W_Temp12 at +*00:01:30 set Temp12 messen;; sleep 2;; get Temp12 temp
define Log_1W_Temp12 FileLog /var/log/temp.log Temp12:(temp).*


Nun wollte ich das Ganze in einer 99.pm umlagern wie z.B.

define 1W_All at +*00:01:30 { myMessenAlle() }

sub myMessenAlle()
{
  fhem("set Temp1 messen; sleep 2; get Temp1 temp");
  # ... usw ...
  fhem("set Temp12 messen; sleep 2; get Temp12 temp");
}

Aber wie bekomme ich jetzt die jeweilige Temperatur mit dem passenden Logeintrag ins Logfile ?

Muss das in myMessenAlle() oder in fhem.cfg, ev. ein Array füllen und zurückgeben ?
Hoffe, dass ich jemand erlösen kann.



cu
gelbwichtel

MisterEltako

Hi!

Ich würde es so versuchen:

fhem.cfg
define Messendummy1 dummy
attr Messendummy1 setList state: on,off
attr Messendummy1 room Experiment
attr Messendummy1 webCmd on:off

define Messendummy2 dummy
attr Messendummy2 setList state: on,off
attr Messendummy2 room Experiment
attr Messendummy2 webCmd on:off

define n_Taster3 notify Taster3 {Messen("Messendummy1 Messendummy2")}


99_myUtils.pm:
sub
Messen($){
    my ($Parameter)= @_;
    my @Sen_all = split(/ /,$Parameter);
    Log 1, "Test beginnt: @Sen_all, $Parameter";
    my $all=join ("|", @Sen_all);
    fhem("define Log_Messen FileLog /usr/local/FHEM/var/log/Test-%Y.log $all");
    fhem("attr Log_Messen room Logfiles");
    foreach (@Sen_all){
    fhem("set $_ on");}
}


Die beiden Dummy stehen symbolhaft für deine Sensoren (brauchst du also nicht in fhem.cfg!!!)

Aufruf der Funktion mit:
define n_Taster3 notify Taster3 {Messen("Messendummy1 Messendummy2 ...")} Die einzelnen Sensoren müssen mit Leerzeichen getrennt sein!!!

Die letzte Zeile:
fhem("set $_ on");} musst du mit dem entsprechenden Messbefehl ergänzen.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

gelbwichtel

Vielen Danke MisterEltako,
hätte nie damit gerechnet um die unchristliche Zeit (04:20) eine Antwort zu erhalten.
Ich werde das mal spätestens zum Wochenende ausprobieren.
Kann es aber sein, dass ab dem 2ten Messereignis, eine Fehlermeldung kommen wird, dass Log_Messen bereits definiert sei und erst mit delete wieder undefined werden muss? Meine so was in der Form schon mal gehabt zu haben.
Nochmal vielen Dank, dass ihr immer wieder Zeit findet, ecuh mit den nervigen Anfängern auseinanderzusetzen.
cu
gelbwichtel
cu
gelbwichtel

MisterEltako

Also so vielleicht:

99_myUtils.pm:
sub
Messen($){
my ($Parameter)= @_;
my @Sen_all = split(/ /,$Parameter);
Log 1, "Test beginnt: @Sen_all, $Parameter";
my $all=join ("|", @Sen_all);
if ($defs{Log_Messen}){fhem("delete Log_Messen")}

fhem("define Log_Messen FileLog /usr/local/FHEM/var/log/Test-%Y.log $all");
fhem("attr Log_Messen room Logfiles");
foreach (@Sen_all){
fhem("set $_ on");}
}


Viel Spaß beim ausprobieren, falls Fehler kommen bitte Logfileeinträge mit posten.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

gelbwichtel

Vielen lieben Dank MisterEltako für deine Mithilfe.
Ich hab nun 2 lauffähige Varianten, die ich hier mal posten will, damit auch andere Newbies davon profitieren können.

Aufgabenstellung war mittels eines einzigen at Kommandos unter Zuhilfenahme von eigenen Methoden die Temperaturen von mehreren Sensoren zu erfassen und in ein gemeinsames Logfile zu schreiben.

Variante 1: LogFile in fhem.cfg
fhem.cfg
define Temp1 ECMDDevice ONEWIRE 100acbb00108002a
attr Temp1 room Testroom
define Temp2 ECMDDevice ONEWIRE 109b29ca01080046
attr Temp2 room Testroom

define Log_Messen7 FileLog /var/InternerSpeicher/fhem/log/Test.log Temp1|Temp2
attr Log_Messen7 room Testroom
define 1Wire_All at +*00:00:30 { Messen7("Temp1 Temp2") }


99_myUtils.pm:
sub
Messen7($)
{
__my ($Parameter)= @_;
__my @Sen_all = split(/ /,$Parameter);
__my $all=join ("|", @Sen_all);
__foreach (@Sen_all)
__{
____fhem("set $_ messen; get $_ temp");
__}
}


Variante 2: LogFile in sub-Methode
fhem.cfg

define Temp1 ECMDDevice ONEWIRE 100acbb00108002a
attr Temp1 room Testroom
define Temp2 ECMDDevice ONEWIRE 109b29ca01080046
attr Temp2 room Testroom

define 1Wire_All at +*00:00:30 { Messen6("Temp1 Temp2") }


99_myUtils.pm:
sub
Messen6($)
{
__my ($Parameter)= @_;
__my @Sen_all = split(/ /,$Parameter);
__my $all=join ("|", @Sen_all);
__fhem("define Log_Messen FileLog /var/InternerSpeicher/fhem/log/Test.log $all");
__fhem("attr Log_Messen room Logfiles");
__foreach (@Sen_all)
__{
____fhem("set $_ messen; get $_ temp");
__}
__fhem("delete Log_Messen");
}


cu
gelbwichtel