FHEM hängt für 5 Minuten nach zigbee2mqtt-Nachricht

Begonnen von smilee27, 21 April 2024, 10:35:34

Vorheriges Thema - Nächstes Thema

smilee27

Hallo,
ich benutze den MQTT2_SERVER von FHEM mit zigbee2mqtt.
Beim Start und mehrmals unter Tags schickt zigbee2mqtt eine fast 200kB große JSON-Nachricht mit dem Status aller Geräte.
Anschließend hängt FHEM für fast 5 Minuten bei 100% CPU-Load ohne Lebenszeichen.

2024.04.21 09:12:28 4: MQTT2_DEVICE_Parse: MQTT2_zigbee_bridge zigbee2mqtt/bridge/devices => devices
2024.04.21 09:16:56 4: MQTT2_DEVICE_Parse: MQTT2_zigbee_bridge zigbee2mqtt/bridge/groups => groups

Habt ihr einen Tipp, wie ich das Problem weiter eingrenzen kann?
Danke für eure Hilfe!

isy

Ich habe zigbee2mqtt 1.31.2 im Einsatz, ich habe eine solche Meldung noch nicht gehabt.
Es sind um die 50 Zigbee Devices aktiv, alles läuft rund, daher würde ich am Zigbee Gateway suchen.

VG Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

TomLee

Hallo,

kann man mal ein list -r MQTT2_zigbee_bridge sehen ?

Thomas

rudolfkoenig

Ich habe den Anhang durch json2nameValue gejagt, es hat mir 6679 Eintraege erzeugt.
Das bedeutet genausoviele Readings, und ein Event mit dieser Anzahl an Eintraegen.
Ja nach Anzahl der notifies / FileLogs / etc, die auf diese Daten reagieren, kann die Auswertung lange dauern.

Ich wuerde diese Daten entweder per readingsList komplett ignorieren, oder per json2nameValue Filter nur die wirklich benotigten Teile behalten.

Alternativ kann auch helfen, die Regexps der Notifies/FileLogs, die diese Daten nicht benoetigen, so zu gestalten, dass das NOTIFYDEV Internal gesetzt ist.
Sonst wird es kompliziert: man koennte die Daten mit einer eigenen Routinen "nach und nach" in die Eventverarbeitung einspeisen.

Natuerlich waere es am besten diese Datenmenge in FHEM gar nicht zu bekommen.

TomLee

#4
Im Bridge-Template ist vorgesehen den devices-Zweig zu ignorieren.
Darum die Frage nach einem list.

$\DEVICETOPIC/bridge/config/devices:.* {}\

smilee27

Ja ist drin, ich hab das Template unverändert übernommen ...

defmod MQTT2_zigbee_bridge MQTT2_DEVICE zigbee_bridge
attr MQTT2_zigbee_bridge IODev mqttBroker
attr MQTT2_zigbee_bridge autocreate 1
attr MQTT2_zigbee_bridge bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_bridge comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
attr MQTT2_zigbee_bridge devicetopic zigbee2mqtt
attr MQTT2_zigbee_bridge getList networkmap_raw:noArg raw $DEVICETOPIC/bridge/request/networkmap raw\
  networkmap_graphviz:noArg graphviz $DEVICETOPIC/bridge/request/networkmap graphviz
attr MQTT2_zigbee_bridge icon mqtt
attr MQTT2_zigbee_bridge model zigbee2mqtt_bridge
attr MQTT2_zigbee_bridge readingList $DEVICETOPIC/bridge/state:.* state\
  $DEVICETOPIC/bridge/config/devices:.* {}\
  $DEVICETOPIC/bridge/config/log_level:.* log_level\
  $DEVICETOPIC/bridge/config/permit_join:.* permit_join\
  $DEVICETOPIC/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  $DEVICETOPIC/bridge/config:.* { json2nameValue($EVENT) }\
  $DEVICETOPIC/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  $DEVICETOPIC/bridge/log:.* log\
  $DEVICETOPIC/bridge/logging:.* { json2nameValue($EVENT,'log_') }\
  $DEVICETOPIC/bridge/response/networkmap:.* { my $type = $EVENT =~ m/.*,"type":"(raw|graphviz)",.*/ ? $1 : 'networkmap';; $EVENT =~ m/{"data":\{.*"value":"?(.*[^"])"?\},"status":"ok"\}/ ? { $type=>$1 } : {} }\
  $DEVICETOPIC/bridge/devices:.* devices\
  $DEVICETOPIC/bridge/info:.* info\
  $DEVICETOPIC/bridge/groups:.* groups\
  $DEVICETOPIC/bridge/event:.* { json2nameValue($EVENT) }\
  $DEVICETOPIC/bridge/extensions:.* extensions\
  $DEVICETOPIC/bridge/response/permit_join:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_bridge room MQTT2_DEVICE
attr MQTT2_zigbee_bridge setList log_level:debug,info,warn,error $DEVICETOPIC/bridge/config/log_level $EVTPART1\
  permit_join:true,false $DEVICETOPIC/bridge/request/permit_join $EVTPART1\
  remove:textField $DEVICETOPIC/bridge/config/remove $EVTPART1\
  ota_update:textField $DEVICETOPIC/bridge/ota_update/update $EVTPART1\
  ota_update_check:textField $DEVICETOPIC/bridge/ota_update/check $EVTPART1\
  y_device_setting:textField $DEVICETOPIC/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField $DEVICETOPIC/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField $DEVICETOPIC/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField $DEVICETOPIC/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField $DEVICETOPIC/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField $DEVICETOPIC/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField $DEVICETOPIC/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField $DEVICETOPIC/bridge/config/elapsed $EVTPART1\
  z_last_seen:disable,ISO_8601,epoch,ISO_8601_local $DEVICETOPIC/bridge/config/last_seen $EVTPART1\
  z_ban:textField $DEVICETOPIC/bridge/config/ban $EVTPART1\
  z_rename:textField $DEVICETOPIC/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg $DEVICETOPIC/bridge/config/reset
attr MQTT2_zigbee_bridge setStateList on off
attr MQTT2_zigbee_bridge verbose 1

setstate MQTT2_zigbee_bridge online
setstate MQTT2_zigbee_bridge 2024-04-21 11:58:54 attrTemplateVersion 20231205
setstate MQTT2_zigbee_bridge 2024-04-21 11:58:59 log_level info

TomLee

Ist das List gekürzt oder gibts in der Definition wirklich nur die drei Readings ?


TomLee

Sry, war nicht ganz bei der Sache, den Pfad meinte ich und hab ich nur bei mir ausgeknipst:
$DEVICETOPIC/bridge/devices:.* {}\
Hat aber wohl nix mit dem Problem zu tun.

smilee27

Es gibt noch ein paar mehr, aber ob die hilfreich sind ...!?

setstate MQTT2_zigbee_bridge online
setstate MQTT2_zigbee_bridge 2024-04-21 11:58:54 attrTemplateVersion 20231205
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 commit ffc2ff1
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_maintrel 1
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_majorrel 2
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_minorrel 7
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_product 1
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_revision 20230507
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_meta_transportrev 2
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 coordinator_type zStack3x0
setstate MQTT2_zigbee_bridge 2024-04-21 12:33:01 devices [ ... siehe Attachment im ersten Post ... ]
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 extensions []
setstate MQTT2_zigbee_bridge 2024-04-21 12:42:57 groups [{"friendly_name":"1","id":1,"members":[],"scenes":[]},{"friendly_name":"100","id":100,"members":[],"scenes":[]},{"friendly_name":"default_bind_group","id":901,"members":[],"scenes":[]}]
setstate MQTT2_zigbee_bridge 2024-04-21 12:42:53 info { ... lange Liste der Devices samt IDs ... ,"permit_join":true,"restart_required":false,"version":"1.36.1","zigbee_herdsman":{"version":"0.40.3"},"zigbee_herdsman_converters":{"version":"19.11.2"}}
setstate MQTT2_zigbee_bridge 2024-04-21 15:06:31 log_level info
setstate MQTT2_zigbee_bridge 2024-04-21 15:06:31 log_message MQTT publish: topic 'zigbee2mqtt/Garage_links', payload '{"garage_door_contact":true,"linkquality":193,"trigger":false}'
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 network_channel 11
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 network_extendedPanID 0x00124b001cdd2940
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 network_panID 6754
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 permit_join true
setstate MQTT2_zigbee_bridge 2024-04-21 12:42:53 state online
setstate MQTT2_zigbee_bridge 2024-04-21 12:43:24 version 1.36.1

Ich hab im zigbee2mqtt die Publish-Routine für das Topic bridge/devices auskommentiert, jetzt läuft FHEM durch, aber das ist natürlich keine Dauerlösung.

Gibt es eine Möglichkeit, den Perl-Code zu monitoren, um zu schauen, womit sich FHEM während des Blackouts beschäftigt?

Danke.

rudolfkoenig

ZitatGibt es eine Möglichkeit, den Perl-Code zu monitoren, um zu schauen, womit sich FHEM während des Blackouts beschäftigt?
attr global verbose 5

smilee27

#10
Zitat von: rudolfkoenig am 21 April 2024, 15:22:51attr global verbose 5

Ja, aber leider kommt da absolut nichts. Siehe mein erster Post oben - das sind die beiden Einträge direkt vor und nach den viereinhalb Minuten Funkstille.

EDIT: Auf Level 5 sind es diese beiden Meldungen:
2024.04.21 16:27:24 5: Starting notify loop for MQTT2_zigbee_bridge, 1 event(s), first is devices:     ... dann die 200kB-Nachricht ...
2024.04.21 16:31:52 5: End notify loop for MQTT2_zigbee_bridge
Aber dazwischen wie gesagt kein einziger Eintrag, auch nicht von anderen Modulen.