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
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
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.
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.
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() :)
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
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.
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
ZitatFunktioniert nicht.
Liegt vmtl. daran, dass wir vom Gesamtbild nur einen kleinen Ausschnitt kennen, und den Rest zusammenfantasieren.