FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: Dr. Boris Neubert am 22 August 2024, 12:19:19

Titel: Bluetooth-to-MQTT-Gateway: überlange Laufzeit
Beitrag von: Dr. Boris Neubert am 22 August 2024, 12:19:19
Hallo,

habe mich mal mit apptime auf die Suche nach den Hängern in FHEM mit 100 % CPU-Auslastung gemacht (FHEM läuft einer virtualisierten Maschine mit 6 VCPUS einer 8-Kern Xeon CPU E3-1230):


active-timers: 53; max-active timers: 88; max-timer-load: 53  min-tmrHandlingTm: 0.0ms; max-tmrHandlingTm: 30653.8ms; totAvgDly: 2991.9ms

 name                                     function                               max    count      total  average   maxDly   avgDly TS Max call     param Max call
 nice-__ANON__                                                                 29993      234 2272361.11  9710.94    82.38     0.42 22.08. 12:03:24 (undef)
 MQTT2_oMQTTgw_BT                         MQTT2_DEVICE_Attr                    16533       80 1191088.96 14888.61     0.00     0.00 22.08. 12:03:11 set; MQTT2_oMQTTgw_BT; readingList; home/OMG1/BTtoMQTT/([0-9A-Z]+):.* { $TOPIC =~ m,BTtoMQTT/([0-9A-Z]+),; json2nameValue($EVENT,"$1"."_") }
  home/OMG1/BTtoMQTT/([0-9A-Z]+)/[^:]+:.* { $TOPIC =~ m,BTtoMQTT/([0-9A-Z]+)/([^:]+),; { "${1}_$2"=>$EVENT }}
  home/home_presence/OMG1:.* { return unless $EVENT =~ m,(..):(..):(..):(..):(..):(..),; json2nameValue($EVENT,"BT_".uc($1.$2.$3.$4.$5.$6)."_"); {"last"=>uc($1.$2.$3.$4.$5.$6)}}
home/OMG2/BTtoMQTT/413EEE604FB6:.* { json2nameValue($EVENT, '413EEE604FB6_', $JSONMAP) }
home/OMG2/BTtoMQTT/A4C138F8B38E:.* { json2nameValue($EVENT, 'A4C138F8B38E_', $JSONMAP) }
...

Im Schnitt ca. 15 Sekunden ist lange für MQTT2_oMQTTgw_BT. Das Gerät setzt die über ein OpenMQTTGateway empfangene Bluetooth-Signale um, damit ich damit die Bluetooth-Temperatur-Feuchte-Sensoren auslese.

Gucke ich ins Device, finde ich dort Zillionen Einträge im Attibut readingList:

define MQTT2_oMQTTgw_BT MQTT2_DEVICE oMQTTgw_BT
attr MQTT2_oMQTTgw_BT model OpenMQTTGateway_BT_scanner
attr MQTT2_oMQTTgw_BT periodicCmd deleteReadings:1440
attr MQTT2_oMQTTgw_BT readingList home/OMG1/BTtoMQTT/([0-9A-Z]+):.* { $TOPIC =~ m,BTtoMQTT/([0-9A-Z]+),;; json2nameValue($EVENT,"$1"."_") }\
  home/OMG1/BTtoMQTT/([0-9A-Z]+)/[^:]+:.* { $TOPIC =~ m,BTtoMQTT/([0-9A-Z]+)/([^:]+),;; { "${1}_$2"=>$EVENT }}\
  home/home_presence/OMG1:.* { return unless $EVENT =~ m,(..):(..):(..):(..):(..):(..),;; json2nameValue($EVENT,"BT_".uc($1.$2.$3.$4.$5.$6)."_");; {"last"=>uc($1.$2.$3.$4.$5.$6)}}\
home/OMG2/BTtoMQTT/413EEE604FB6:.* { json2nameValue($EVENT, '413EEE604FB6_', $JSONMAP) }\
home/OMG2/BTtoMQTT/A4C138F8B38E:.* { json2nameValue($EVENT, 'A4C138F8B38E_', $JSONMAP) }\
home/OMG2/BTtoMQTT/7DF14524B2B7:.* { json2nameValue($EVENT, '7DF14524B2B7_', $JSONMAP) }\
home/OMG2/BTtoMQTT/A4C138E3E155:.* { json2nameValue($EVENT, 'A4C138E3E155_', $JSONMAP) }\
home/OMG2/BTtoMQTT/4E4319E949F0:.* { json2nameValue($EVENT, '4E4319E949F0_', $JSONMAP) }\
home/OMG2/BTtoMQTT/5C4A1603BBA7:.* { json2nameValue($EVENT, '5C4A1603BBA7_', $JSONMAP) }\
home/OMG2/BTtoMQTT/77568F97B597:.* { json2nameValue($EVENT, '77568F97B597_', $JSONMAP) }\
home/OMG2/BTtoMQTT/644F892029B5:.* { json2nameValue($EVENT, '644F892029B5_', $JSONMAP) }\
home/OMG2/BTtoMQTT/5356A163430F:.* { json2nameValue($EVENT, '5356A163430F_', $JSONMAP) }\
...

Die eigentliche Readings-Liste mit den Sichtungen der letzten 24 Stunden ist deutlich kürzer.

Was tun?

Viele Grüße
Boris
Titel: Aw: Bluetooth-to-MQTT-Gateway: überlange Laufzeit
Beitrag von: rudolfkoenig am 22 August 2024, 14:51:05
Eigentlich(TM) muesste man bei den BT-Endgeraeten die temporaere BT-IDs deaktivieren.

Workaround: im readingList in den ersten drei Zeilen OMG1 nach OMG[12] aendern, und die Zeilen mit den "konkreten" Werten entfernen.
Optional: das autocreate Attribut auf 0 setzen.
Titel: Aw: Bluetooth-to-MQTT-Gateway: überlange Laufzeit
Beitrag von: Dr. Boris Neubert am 23 August 2024, 16:15:08
Danke. Das funktioniert.

apptime läuft und zeigt keine Anomalien mehr. Die Zeilen der Form

home/OMG2/BTtoMQTT/413EEE604FB6:.* { json2nameValue($EVENT, '413EEE604FB6_', $JSONMAP) }

erscheinen auch nicht mehr. Es waren übrigens fast 70.000  :o