Guten Abend,
ich setze Xiaomi FlowerSens Sensoren ein, welche sich teils an der Grenze der Reichweite. Das führt dazu das diese vom Modul nicht immer angefragt werden können und da das Modul Blocking.pm einsetzt habe ich häufig folgende Einträge im Log
2017.09.23 20:16:25 1: Timeout for XiaomiFlowerSens_BlockingRun reached, terminated process 19796
Besteht eine Möglichkeit diese Art von Logeintrag zu unterdrücken(bevorzugt nur für "XiaomiFlowerSens_BlockingRun") ohne gleich verbose 0 global setzen zu müssen?
Mit dem Programmierer des Moduls war ich bereits in Kontakt: [74_XiaomiFlowerSens.pm] Xiaomi Flower Monitor (https://forum.fhem.de/index.php/topic,60914.msg684670.html#msg684670)
Bitte um Unterstützung. Danke!
Habe Blocking.pm erweitert:
- BlockingCall liefert einen Zeiger auf einem internen Hash zurueck.
- wenn man in diesem Hash loglevel setzt, dann wird das in der Timeout-Meldung verwendet.
Beispiel:
my $h = BlockingCall($BlockingFn, $parameter, $DoneFn, $timeOut, $AbortFn, $myParam);
$h->{loglevel} = 4;
Mahlzeit,
herzlichen Dank für den schnellen Fix!
Grüße
Pyro
Vielen Dank Rudi.
Grüße
Guten Abend,
Wie auch Pyromane, setze ich Xiaomi FlowerSens Sensoren ein, mit Hilfe des Moduls 74_XiaomiBTLESens.pm. Auch dieses Modul benutzt Blocking.pm. Ich habe auch häufig folgende Einträge im Log, die ich aber unterdrücken möchte.
Zitat2022.05.27 21:50:24 1: Timeout for FHEM::XiaomiBTLESens::ExecGatttool_Run reached, terminated process 4024
BlockingCallLoglevel im Modul 74_XiaomiBTLESens.pm ist gesetzt, dort wird auch der hash auf den loglevel gesetzt wie Rudi geschrieben hat, ab Zeile 353. Trotzdem kommt die Meldung. Was mache ich falsch?
Auszug aus dem 74_XiaomiBTLESens.pm
elsif ( $attrName eq 'blockingCallLoglevel' ) {
if ( $cmd eq 'set' ) {
$hash->{loglevel} = $attrVal;
Log3( $name, 3,
"XiaomiBTLESens ($name) - set blockingCallLoglevel to $attrVal"
);
}
List des Devices:
Internals:
BTMAC C4:7C:8D:63:86:10
DEF C4:7C:8D:63:86:10
FUUID 5c42ee45-f33f-97bf-5bf9-7d4fdd9dd426392d
FVERSION 74_XiaomiBTLESens.pm:v3.0.0-s22474/2020-07-26
INTERVAL 10807
NAME Blume07
NOTIFYDEV global,Blume07
NR 2365
NTFY_ORDER 50-Blume07
STATE <font color="red">M[25]: 00   B(75)     T: 22.1°C   Lx: 215   Ft: 97   <style="text-align:right">05-24 11:24</style>   Nr: 07</font>
TYPE XiaomiBTLESens
VERSION v3.0.0
loglevel 2
OLDREADINGS:
READINGS:
2021-05-10 15:44:56 BatterieWechsel 01.05.2021 (8 Monate last 20.09.2020 20.12.2019 20.05.2019 20.09.2018)
2022-05-24 02:12:40 OldMoist 0
2022-05-23 17:02:42 batteryPercent 75
2022-05-23 17:02:42 batteryState ok
2022-05-24 11:24:41 fertility 97
2022-05-23 17:02:42 firmware 3.1.9
2022-05-27 21:50:24 lastGattError The BlockingCall Process terminated unexpectedly. Timedout
2022-05-24 11:24:41 lux 215
2022-05-24 11:24:41 moisture 0
2022-05-27 21:50:24 state error
2022-05-24 11:24:41 temperature 22.1
2022-05-27 21:24:38 toggle 0
helper:
CallBattery 0
CallSensDataCounter 0
updateTimeCallBattery 1653318162.06549
updateTimestampCallBattery 2022-05-23 17:02:42
hmccu:
Attributes:
alias Zamie/Glücksfeder
blockingCallLoglevel 2
devStateStyle style="text-align:left"
event-on-change-reading moisture
event-on-update-reading lastGattError
group BLUMEN
hciDevice hci1
interval 10807
maxMoisture 50
minMoisture 25
minTemp 15
model flowerSens
room Favourites,AllRooms->Wohnung
sortby 02
sshHost root@flurry
stateFormat {MyFlowerCheck($name)}
timeout 2
verbose 3
webCmd upd
ZitatBlockingCallLoglevel im Modul 74_XiaomiBTLESens.pm ist gesetzt, dort wird auch der hash auf den loglevel gesetzt wie Rudi geschrieben hat, ab Zeile 353.
Beim "wird auch gesetzt" bin ich dabei, beim "wie Rudi geschrieben hat" eher nicht.
74_XiaomiBTLESens.pm setzt in der Zeile 340 "nur" $hash->{loglevel}, wobei $hash die eigene Definition ist ($defs{...}).
Um die erwaehnte Ausgabe zu unterdruecken muss loglevel in dem Hash gesetzt werden, was BlockingCall zurueckliefert, und was dieses Modul unter $hash->{helper}{RUNNING_PID} speichert.
Wobei die Benennung irrefuehrend ist, weil es kein PID sondern ein Hash mit allerlei Daten ist (siehe den blockinginfo Befehl).
Hallo Rudi,
danke, ich habe es jetzt wie folgt umgebaut, bis jetzt funktioniert es, ich hoffe das ist richtig so. Der code ist vereinfacht.
VORHER:sub CreateParamGatttool {
...
if ( $mod eq 'read' ) {
$hash->{helper}{RUNNING_PID} = BlockingCall( .....................);
...
}
NACHER:
sub CreateParamGatttool {
...
if ( $mod eq 'read' ) {
my $tempVar = BlockingCall(.....................);
$tempVar->{loglevel} = AttrVal($name,'blockingCallLoglevel',2);
$hash->{helper}{RUNNING_PID} = $tempVar;
...
}