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
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.
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