FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Mihca am 27 März 2023, 12:13:28

Titel: [gelöst] "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: Mihca am 27 März 2023, 12:13:28
Ein Timer "at" zählt alle 5 Minuten die MQTT2-Devices, die nicht erreichbar sind über folgende Zeile:

my $counts = fhem( "count TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected) raw" )
Das funktioniert auch prima. Global steht verbose = 3, was ich auch gerne so lassen würde. Was stört, ist, dass mit verbose = 3 bei jedem Aufruf von "count" im Logfile z.B. erscheint:

2023.03.26 16:04:15 3: count TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected) raw : 4
Verbose im Timer auf 2 zu setzen hilft nicht. Global verbose = 2 hilft, dann kommen aber die anderen 3er Meldungen, die ich gerne hätte auch nicht. Hat jemand eine Idee, was man tun kann, ohne alle Devices händisch auf verbose = 3 und Global verbose = 2 zu setzen?

Vielen Dank vorab.

Achim
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: DeeSPe am 27 März 2023, 12:26:48
Es gibt einen "quiet"-Schalter für den FHEM Befehl, einfach als zweiten Parameter eine 1 übergeben:
my $counts = fhem( "count TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected)",1 );
oder gleich (und besser?) als ganzen Perl-Code:
my $counts = int(devspec2array("TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected)"));
Gruß
Dan
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: rudolfkoenig am 27 März 2023, 12:28:21
at protokolliert bei verbose 3 das, was die aufgerufene Funktion bzw Perl-Code zurueckgeliefert hat.

Vermutlich reicht ein undef am Ende der Funktion bzw. als letztes Element im Perl-Code, um die Log-Ausgabe zu verhindern.
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: betateilchen am 27 März 2023, 12:34:22
Zitat von: DeeSPe am 27 März 2023, 12:26:48oder gleich (und besser?) als ganzen Perl-Code:

Das int() kann man im scalaren Kontext ($counts ist scalar!) sogar weglassen.
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: betateilchen am 27 März 2023, 12:35:36
Zitat von: rudolfkoenig am 27 März 2023, 12:28:21Vermutlich reicht ein undef am Ende der Funktion bzw. als letztes Element im Perl-Code, um die Log-Ausgabe zu verhindern.

Vermutlich reicht aber auch der bereits genannte Schalter für "quiet" im Funktionsaufruf von fhem()  :)
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: DeeSPe am 27 März 2023, 12:43:25
Zitat von: betateilchen am 27 März 2023, 12:34:22Das int() kann man im scalaren Kontext ($counts ist scalar!) sogar weglassen.

Das weiß ich.
Finde es dennoch besser so zu schreiben da (gerade für Anfänger) die Intention dahinter besser zu erkennen ist.

Gruß
Dan
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: betateilchen am 27 März 2023, 12:52:24
Zitat von: DeeSPe am 27 März 2023, 12:43:25Finde es dennoch besser so zu schreiben da (gerade für Anfänger) die Intention dahinter besser zu erkennen ist.

In den meisten Programmiersprachen wäre es ein völlig sinnloses Unterfangen, zu versuchen, ein Array in ein Integer wandeln zu wollen. So einen Quatsch lässt wohl nur perl zu.

Wenn es um das "Erkennen der Intention" geht, würde ich das hier

scalar(devspec2array("TYPE=MQTT2_DEVICE"))
problemlos unterschreiben. Aber int() finde ich an der Stelle einfach absurd.
Titel: Aw: "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: Mihca am 27 März 2023, 14:24:24
my $counts = int(devspec2array("TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected)"));
Funktioniert mit und ohne int(..)

my $counts = fhem( "count TYPE=MQTT2_DEVICE:FILTER=LWT!~([Oo]nline|Connected)",1 );
Funktioniert nicht.

undef am Ende der Funktion bzw. als letztes Element im Perl-Code
Funktioniert nicht.

Vielen Dank an Alle  :)

VG Achim

Titel: Aw: [gelöst] "count"-Meldungen im Logfile bei Global verbose=3 vermeiden
Beitrag von: rudolfkoenig am 27 März 2023, 14:30:42
ZitatFunktioniert nicht.
Liegt vmtl. daran, dass wir vom Gesamtbild nur einen kleinen Ausschnitt kennen, und den Rest zusammenfantasieren.