Autor Thema: [gelöst] MQTT2_DEVICE: Attribut bridgeRegexp nach deleteattr weiterhin aktiv?  (Gelesen 196 mal)

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Hallo!

Experimentiere gerade nach 2 Jahren MQTT-Pause mal wieder mit MQTT und "stolpere" dabei über das Verhalten von MQTT2_DEVICE beim Löschen des Attrbuts bridgeRegexp.

Wenn ich das Attribut über den "deleteattr"-Link im Device lösche, bleibt der gelöschte Attributwert weiterhin aktiv.
"Save config" habe ich (bewusst) nicht ausgeführt, da ich testen möchte.

Ist das Verhalten gewollt bzw. von anderen nachvollziehbar?

Gruß, Christian
« Letzte Änderung: 10 September 2021, 07:57:00 von krikan »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24485
Antw:MQTT2_DEVICE: Attribut bridgeRegexp nach deleteattr weiterhin aktiv
« Antwort #1 am: 09 September 2021, 20:49:44 »
deleteattr sollte funktionieren: $modules{MQTT2_DEVICE}{defptr}{bridge} wird nach Setzen/Loeschen des Attributes oder Definieren/Loeschen/Umbenennen einer MQTT2_DEVICE Instanz von Grund auf neu aufgebaut:
fhem> attr m2d bridgeRegexp .* BLA
fhem> { $modules{MQTT2_DEVICE}{defptr}{bridge} }
HASH(0x55875cc01008)
fhem> deleteattr m2d bridgeRegexp
fhem> { $modules{MQTT2_DEVICE}{defptr}{bridge} }
fhem>


Kannst Du bitte was zum Nachstellen zeigen?

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:MQTT2_DEVICE: Attribut bridgeRegexp nach deleteattr weiterhin aktiv
« Antwort #2 am: 09 September 2021, 21:13:49 »
Das ist mein Ausgangsdevice:
defmod MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt MQTT2_DEVICE ZWAVE_GATEWAY_zwavejs2mqtt
attr MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt bridgeRegexp zwave/(nodeID_\d+)[/]?.*:.* "zwave_$1"
attr MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt readingList ZWAVE_GATEWAY_zwavejs2mqtt:zwave/_CLIENTS/ZWAVE_GATEWAY-zwavejs2mqtt/status:.* { json2nameValue($EVENT, 'status_', $JSONMAP) }\
ZWAVE_GATEWAY_zwavejs2mqtt:zwave/_CLIENTS/ZWAVE_GATEWAY-zwavejs2mqtt/version:.* { json2nameValue($EVENT, 'version_', $JSONMAP) }
attr MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt room MQTT2_DEVICE

setstate MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt 2021-09-09 20:47:13 IODev fhemMqtt
setstate MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt 2021-09-09 20:47:16 status_time 1631213236231
setstate MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt 2021-09-09 20:47:16 status_value true
setstate MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt 2021-09-09 20:47:16 version_time 1631213236231
setstate MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt 2021-09-09 20:47:16 version_value 5.5.3

Die Nachrichten für die jeweiligen nodeIDs werden an die jeweiligen MQTT2_zwave_nodeID_NN weitergeleitet.

Nach dem Löschen vom Attribut bridgeRegexp ergibt sich:
defmod MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt MQTT2_DEVICE ZWAVE_GATEWAY_zwavejs2mqtt
attr MQTT2_ZWAVE_GATEWAY_zwavejs2mqtt room MQTT2_DEVICE

Wenn jetzt Nachrichten kommen, wird das vorherige Attribut readingList wiederhergestellt. Die Nachrichten die auf die gelöschte bridgeRegexp matchen, werden weiterhin an die "alten" vereinzelten Devices MQTT2_zwave_nodeID_NN weitergeleitet.

Bin unsicher was Du noch brauchst.

Eventuell habe ich ja auch nur ein Verständnisproblem mit MQTT und es liegt nicht an FHEM.


Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15641
Antw:MQTT2_DEVICE: Attribut bridgeRegexp nach deleteattr weiterhin aktiv
« Antwort #3 am: 09 September 2021, 21:19:46 »
Es wird bei MQTT2_DEVICE immer zuerst geschaut, ob (irgendwo) ein readingList-Eintrag matcht. Alles andere (bridgeRegexp, originale CID) kommt erst später zum tragen, wenn der autocreate-Mechanismus ins Spiel kommt.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline krikan

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7026
Antw:MQTT2_DEVICE: Attribut bridgeRegexp nach deleteattr weiterhin aktiv
« Antwort #4 am: 09 September 2021, 21:29:04 »
Es wird bei MQTT2_DEVICE immer zuerst geschaut, ob (irgendwo) ein readingList-Eintrag matcht. Alles andere (bridgeRegexp, originale CID) kommt erst später zum tragen, wenn der autocreate-Mechanismus ins Spiel kommt.
Danke, dann ist das Verhalten nachvollziehbar. Ich habe die bereits angelegten vereinzelten Devices bzw. deren Attribut readingList nicht gelöscht. Das wollte ich gerade nicht; aber die Folge nicht gekannt.