Rückmeldung einer Funktion nicht loggen?

Begonnen von heikoh81, 07 Januar 2015, 18:43:26

Vorheriges Thema - Nächstes Thema

heikoh81

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?

vbs

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.

heikoh81


P.A.Trick

Dreckig aber sollte funktionen!

attr VaillantWarmwasserJedeMinuteWerktag verbose 2
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

heikoh81

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;\
}

All-Ex

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?

frank

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);
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

All-Ex


betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!