FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: heikoh81 am 07 Januar 2015, 18:43:26

Titel: Rückmeldung einer Funktion nicht loggen?
Beitrag von: heikoh81 am 07 Januar 2015, 18:43:26
Hallo,

ich rufe mit dem Modul ECMD Werte von einem ebus-Gerät ab.
Verwende ich das Kommando direkt in einem Timer, erfolgt kein Eintrag im Log.

define VaillantWarmwasserJedeMinuteWerktag.Timer at +*00:01:05 get VaillantWarmwasser Warmwasser


Verwende ich den Timer dagegen eingebettet in fhem("");, dann wird dies jede Minnute im Log protokolliert.

define VaillantWarmwasserJedeMinuteWerktag.Timer at +*00:01:05 {
    fhem("get VaillantWarmwasser Warmwasser");
}


2015.01.07 18:33:06 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.50 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1
2015.01.07 18:34:11 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.50 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1
2015.01.07 18:35:16 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.50 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1
2015.01.07 18:38:24 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.50 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1
2015.01.07 18:39:29 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.50 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1
2015.01.07 18:41:07 3: get VaillantWarmwasser Warmwasser : Warmwasser Vorlauftemperatur 55.00 °C, Ruecklauftemperatur 48.50 °C, Warmwassertemperatur 48.00 °C, Brenner An (Heizbetrieb), 1


Wie kann ich dies verhindern?
Titel: Antw:Rückmeldung einer Funktion nicht loggen?
Beitrag von: vbs am 07 Januar 2015, 21:05:02
Versuch mal:

define VaillantWarmwasserJedeMinuteWerktag.Timer at +*00:01:05 {
    fhem("get VaillantWarmwasser Warmwasser"); return;
}

Wenn ich es richtig verstehe, wird ansonsten der Rückgabewert des fhem-Aufrufs als Returnwert zurückgeliefert und scheinbar geloggt.
Titel: Antw:Rückmeldung einer Funktion nicht loggen?
Beitrag von: heikoh81 am 07 Januar 2015, 21:41:20
Nein, das ändert leider nichts.
Titel: Antw:Rückmeldung einer Funktion nicht loggen?
Beitrag von: P.A.Trick am 07 Januar 2015, 22:28:01
Dreckig aber sollte funktionen!

attr VaillantWarmwasserJedeMinuteWerktag verbose 2
Titel: Antw:Rückmeldung einer Funktion nicht loggen?
Beitrag von: heikoh81 am 07 Januar 2015, 23:03:42
Hilft leider auch nicht, global verbose für fhem = 3.
Das hier ist die Funktion, die den Rückgabewert $zval hat:
$zval wird in den STATE geschrieben, und erscheint auch, wenn man in die FHEM-Befehlszeile get VaillantWarmwasser Warmwasser eintippt.


# Warmwasser
get Warmwasser cmd {"read -c THER Status\n"}
get Warmwasser expect ".*\n"
get Warmwasser postproc { my ($VORLAUF,$RUECKLAUF,$POSITION3,$POSITION4,$WARMWASSERTEMP,$BRENNER,$BRENNERNUMERISCH,$zval);\
my $hash  = $defs{"%NAME"};\
if( ($_ eq "")||($_ eq "no data stored") ){\
    $VORLAUF = "err";\
    $RUECKLAUF = "err";\
    $POSITION3 = "err";\   
    $POSITION4 = "err";\
    $WARMWASSERTEMP = "err";\
    $BRENNER = "err";\
    $BRENNERNUMERISCH = "err";\
}else{\
    my @values=split(';',$_);\
    if( $values[0] < 15 ){\
       $VORLAUF = "Werte kleiner 15";\
       $RUECKLAUF = "Werte kleiner 15";\
       $POSITION3 = "Werte kleiner 15";\       
       $POSITION4 = "Werte kleiner 15";\
   $WARMWASSERTEMP = "Werte kleiner 15";\
   $BRENNER = "Werte kleiner 15";\
    } else { \
       $VORLAUF = sprintf("%5.2f °C",$values[0]);\
       $RUECKLAUF = sprintf("%5.2f °C",$values[1]);\
       $POSITION3 = $values[2];\
       $POSITION4 = $values[3];\
       $WARMWASSERTEMP = sprintf("%5.2f °C",$values[4]);\       
   if( $values[5] == 0 ){\
          $BRENNER = "Brenner Aus";\
          $BRENNERNUMERISCH = 0;\
       }elsif( $values[5] == 1 ){\
          $BRENNER = "Brenner An (Heizbetrieb)";\
          $BRENNERNUMERISCH = 1;\
       }elsif( $values[5] == 4 ){\
          $BRENNER = "Brenner An (Warmwasser)";\
          $BRENNERNUMERISCH = -1;\
       }else{\
          $BRENNER = $values[5];\
          $BRENNERNUMERISCH = $values[5];\
       }\
       $zval = sprintf("Vorlauftemperatur %5.2f °C, Ruecklauftemperatur %5.2f °C, Warmwassertemperatur %5.2f °C, %s, %s",\
         $values[0],$values[1],$values[4],$BRENNER,$BRENNERNUMERISCH);\
    }\
}\
readingsSingleUpdate($hash, "Vorlauftemperatur", $VORLAUF, 1);\
readingsSingleUpdate($hash, "Ruecklauftemperatur", $RUECKLAUF, 1);\
readingsSingleUpdate($hash, "Warmwassertemperatur", $WARMWASSERTEMP, 1); \
readingsSingleUpdate($hash, "Brenner_Status", $BRENNER, 1); \
readingsSingleUpdate($hash, "Brenner_Status_Numerisch", $BRENNERNUMERISCH, 1); \
readingsSingleUpdate($hash, "Wert3_unbekannt", $POSITION3, 1);\
readingsSingleUpdate($hash, "Wert4_unbekannt", $POSITION4, 1);\
$zval;\
}
Titel: Aw: Rückmeldung einer Funktion nicht loggen?
Beitrag von: All-Ex am 09 Oktober 2024, 00:37:53
Ja, der Thread ist schon was älter ;-)

Da ich aber in der Suche nichts finde und vor dem gleichen Problem stehe: Wer weiß weiter?
$cal = fhem("get caldevice events);fügt bei jedem Aufruf diesen Logeintrag hinzu:

2024.10.09 00:34:42 3: get caldevice events

Wie kann ich den Logeintrag unterdrücken?
Titel: Aw: Rückmeldung einer Funktion nicht loggen?
Beitrag von: frank am 09 Oktober 2024, 08:59:30
die commandref sagt:
ZitatTo use FHEM commands from the perl expression, use the function fhem(), which takes a string argument, this string will be evaluated as a FHEM command:

    { fhem "set light on" }
    define n1 notify piri:on { fhem "set light on" }

Note: if this function returns a value, it will also be logged into the global FHEM log. Use 1 as a second argument to disable this logging, this makes sense when obtainig some values via FHEM "get...".

dem entsprechend würde ich folgendes probieren:
$cal = fhem("get caldevice events",1);
Titel: Aw: Rückmeldung einer Funktion nicht loggen?
Beitrag von: All-Ex am 09 Oktober 2024, 17:04:56
Super, Dank dir, das ist die Lösung!
Titel: Aw: Rückmeldung einer Funktion nicht loggen?
Beitrag von: betateilchen am 09 Oktober 2024, 18:58:46
Als "Developer" könnte man ja auch einfach mal einen Blick in die Funktion fhem() werden, dann käme man da selbst drauf, wenn man sich schon nicht die Mühe macht, die Doku zu lesen.

Außerdem funktioniert das

Zitat von: All-Ex am 09 Oktober 2024, 00:37:53$cal = fhem("get caldevice events);

sowieso nicht, weil da ein abschließendes Anführungszeichen innerhalb der Klammer fehlt.