Tipps MQTT2 Debugging - autocreate Probleme

Begonnen von cortmen, 14 Juli 2023, 22:43:19

Vorheriges Thema - Nächstes Thema

cortmen

Hallo ich habe ein Problem mit MQTT2 Devices und autocreate innerhalb FHEM.

Gegeben: externer Broker als MQTT2_DEVICE in FHEM eingebunden

MQTT2_CLIENT  =  Mosquito Broker 2.0.15, mit autocreate "simple"
ca. 10 zigbee2mqtt Devices,  wo auch perfekt per autocreate ein MQTT2_Device anlegt wird.
Passende Template rüber, kleine Anpassungen, läuft.


Problem mit den autocreate habe ich mit einem Shelly Plug-S
In allen fällen kann ich mit: 
defmod Device_Name  MQTT2_Device  TOPICNAME  ein Device MQTT"_DEVICE Typ anlegen und mit einem Template versehen, und dann alle Readings und Aktionen nutzen

Beispiel: Shelly PlugS (Neues Modell)

siehe kl.screenshot (Anhang)  Publishing - TOPIC shellyPlug aus dem Broker

Verbose 5 am MQTT2_Device  Mosquito Server
mosquitto_srv: dispatch autocreate=simple\000mosquitto_srv\000shellyplusplugs-80646fc7b80c/events/rpc\000
2023.07.14 22:25:30 4: mosquitto_srv received PUBLISH
2023.07.14 22:25:30 5: mosquitto_srv: received PUBLISH (0),shellyplusplugs-80646fc7b80c/status/switch:0
2023.07.14 22:25:30 5: mosquitto_srv: dispatch autocreate=simple\000mosquitto_srv\000shellyplusplugs-80646fc7b80c/status/switch_0\000

Doch warum kommt wenn ein des Device Aktionen ausführt und kurz drauf die Einträge im Mosquito aktualisiert werden, kein autocreate in FHEM an  ?
Bei zigbee2mqtt Geräten klappt autocreate immer.

Ich habe auch noch OPEN_DTU und Ahoy_Dtu  Devices getestet, per CMD defmod anlegen geht, aber keine autocreate funktion.

Selbst ein :
#mosquitto_pub -h x.x.x.x-u ******** -P *********** -i 999988881 -t Shelly/test/chipsensor/temperature -m 32liegt einen Eintrag sauber im Broker an, aber leider keine autocreate des Devices in FHEM.

Jemand einen Tipp ?

Generic status update over MQTT
  •   und clientID sind gesetzt,





rudolfkoenig

ZitatDoch warum kommt wenn ein des Device Aktionen ausführt und kurz drauf die Einträge im Mosquito aktualisiert werden, kein autocreate in FHEM an  ?
Weil kein passendes bridgeRegexp existiert.
Mit einem MQTT2_SERVER waere das auch nicht notwendig :)

cortmen

#2
Thx, magst mir bitte noch einen Hinweis geben zu bridgeRegexp

in diese Richtung ?
https://forum.fhem.de/index.php?topic=98206.0

Beta-User

Zitat von: cortmen am 14 Juli 2023, 23:29:34Thx, magst mir bitte noch einen Hinweis geben zu bridgeRegexp

in diese Richtung ?
https://forum.fhem.de/index.php?topic=98206.0
Eine konsolidierte Zusammenfassung findest du eher in https://wiki.fhem.de/wiki/MQTT2_CLIENT#autocreate_und_bridgeRegexp.

Wie sieht dein "zentrales MQTT2_DEVICE" aus? (Also das, in dem per default alle bisher unbekannten Topics landen)
Server: HP-elitedesk@Debian 12, 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: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cortmen

sorry für die späte Antwort.

Das ursprüngliche MQTT2 Device war eine Milight_Bridge die nicht mehr vorhanden ist.

ich habe jetzt einfach ein anderes MQTT2 Device von meinen zigbee2mqtt Devices per copy cmd dupliziert.
und das Template "MQTT2_CLIENT_general_bridge" drübergelegt, Readings werden ja gelöscht und die 3-4 noch "alten" vorhandenen Attr. habe gelöscht.

Ich hoffe, das war der richtige weg ?  Jedenfalls wurde der Shelly S Plug per autocreate angelegt, dann template "shellyPlus_2pm_split"  drüber. (Habe kein besseres gefunden) ?

Hätte es einen anderen Weg, als den copy cmd gegeben ?



Hier kurz das ´Listing vom MQTT2-Device
Internals:
  CID        zigbee_0x00158d0004aaf224
  DEF        zigbee_0x00158d0004aaf224
  FUUID      64b2dd4a-f33f-0190-63be-b76b823cf639b530
  FVERSION  10_MQTT2_DEVICE.pm:0.276740/2023-06-12
  IODev      mosquitto_srv
  NAME      MQTT2_CLIENT_general_bridge
  NR        404
  STATE      ???
  TYPE      MQTT2_DEVICE
  READINGS:
    2023-07-16 10:35:38  IODev          mosquitto_srv
Attributes:
  DbLogExclude .*
  autocreate 1
  bridgeRegexp (tele|stat|shellies|valetudo|Advantech)/([^/]+)/.*:.* "$2"
  (shellyp(lus|ro4pm)[^/:_]{4,}+)/.*:.* "$1"
  zigbee2mqtt/bridge/.*:.* "zigbee2mqtt"
  sonos/connected.* "sonos"
  tvheadend/[^/:]+.* "tvheadend"
  milight/LWT:.* "milight"
  (ESPClient_[^/]+)/.*:.* "$1"
  (ebusd[^/]*)/global/.*:.* "$1"
  [^/]+/(ems-esp[^/]+)/start:.* "$1"
  (mygateway[\d]+)-(in|out)/.* "$1"
  (wallpanel|wled)/([^/]+)/.*:.* "$1_$2"
  go-eCharger/([^/]+)/.*:.* "go_eCharger_$1"
  owntracks/[^/]+/([^/:]+).* "owntracks_$1"
  home/(O[^/]*M[^/]*G[^/]*)/LWT:.* "$1"
  instar/([^/]+)/.*:.* "instar_$1"
  homeassistant/.*/config:.* ""
  tasmota/discovery/[^/:]+/(config|sensors):.* ""
  comment    Do not use very open bridgeRegexp expressions! This might lead to irritating results... Especially make sure to not have two regexpes that may both match!
  devicetopic zigbee2mqtt/0x00158d0004aaf224
  group      MQTT2-Bridges
  icon      mqtt_bridge_2
  model      MQTT2_CLIENT_general_bridge
  room      Homebridge,MQTT
  setList    clear_all:noArg {fhem("deleteattr $NAME readingList; deletereading -q $NAME (?!associatedWith|IODev).*");return undef}
  setStateList on off

Hier noch das vom shelly S Plug

Internals:
  CID        shellyplusplugs-80646fc7b80c
  DEF        shellyplusplugs-80646fc7b80c
  FUUID      64b30240-f33f-0190-eb5f-191f336b0239a6f2
  FVERSION  10_MQTT2_DEVICE.pm:0.276740/2023-06-12
  IODev      mosquitto_srv
  LASTInputDev mosquitto_srv
  MSGCNT    1140
  NAME      ShellyPlugS01
  NR        407
  STATE      off
  TYPE      MQTT2_DEVICE
  eventCount 1140
  mosquitto_srv_MSGCNT 1140
  mosquitto_srv_TIME 2023-07-16 20:04:34
  Helper:
    DBLOG:
      temperature:
        mydblog:
          TIME      1689530580.46303
          VALUE      38.5
  JSONMAP:
    params_switch_0_aenergy_total aenergy_total
    params_switch_0_apower apower
    params_switch_0_state state
    params_switch_0_temperature_tC temperature
    params_switch_0_temperature_tF 0
    params_wifi_sta_ip ip
    temperature_tC temperature
    temperature_tF 0
  READINGS:
    2023-07-16 10:35:39  IODev          mosquitto_srv
    2023-07-16 20:03:00  aenergy_by_minute_1 0.000
    2023-07-16 20:03:00  aenergy_by_minute_2 0.000
    2023-07-16 20:03:00  aenergy_by_minute_3 0.000
    2023-07-16 20:03:00  aenergy_minute_ts 1689530579
    2023-07-16 20:03:00  aenergy_total  7.940
    2023-07-16 20:03:00  apower          0.0
    2023-07-15 22:40:37  associatedWith  MQTT2_CLIENT_general_bridge
    2023-07-15 22:40:32  attrTemplateVersion 20230111
    2023-07-16 10:28:22  available_updates_stable_version 0.14.4
    2023-07-16 10:28:15  ble            {}
    2023-07-16 10:28:22  cfg_rev        15
    2023-07-16 10:28:15  connected      true
    2023-07-16 20:03:00  current        0.000
    2023-07-16 20:03:00  dst            shellyplusplugs-80646fc7b80c/events
    2023-07-16 10:28:22  fs_free        86016
    2023-07-16 10:28:22  fs_size        458752
    2023-07-16 20:03:00  id              0
    2023-07-16 10:28:15  ip              x.x.x.x
    2023-07-16 10:28:22  kvs_rev        0
    2023-07-16 10:28:22  mac            80646FC7B80C
    2023-07-16 20:03:00  method          NotifyStatus
    2023-07-16 20:04:34  online          false
    2023-07-16 20:03:00  output          false
    2023-07-16 10:28:15  params_cloud_connected false
    2023-07-15 22:40:33  params_events_1_component sys
    2023-07-15 22:40:33  params_events_1_event scheduled_restart
    2023-07-15 22:40:33  params_events_1_time_ms 996
    2023-07-15 22:40:33  params_events_1_ts 1689453632.99
    2023-07-16 10:29:17  params_id      0
    2023-07-16 10:28:15  params_mqtt_connected true
    2023-07-16 20:03:00  params_switch_0_aenergy_by_minute_1 0.000
    2023-07-16 20:03:00  params_switch_0_aenergy_by_minute_2 0.000
    2023-07-16 20:03:00  params_switch_0_aenergy_by_minute_3 0.000
    2023-07-16 20:03:00  params_switch_0_aenergy_minute_ts 1689530579
    2023-07-16 10:31:21  params_switch_0_current 0
    2023-07-16 20:03:00  params_switch_0_id 0
    2023-07-16 10:31:21  params_switch_0_source WS_in
    2023-07-16 10:31:21  params_switch_0_voltage 0
    2023-07-16 10:28:22  params_sys_available_updates_stable_version 0.14.4
    2023-07-16 10:28:15  params_sys_cfg_rev 15
    2023-07-16 10:28:15  params_sys_fs_free 86016
    2023-07-16 10:28:15  params_sys_fs_size 458752
    2023-07-16 10:28:15  params_sys_kvs_rev 0
    2023-07-16 10:28:15  params_sys_mac  80646FC7B80C
    2023-07-16 10:28:15  params_sys_ram_free 152088
    2023-07-16 10:28:15  params_sys_ram_size 244328
    2023-07-16 10:28:15  params_sys_restart_required false
    2023-07-16 10:28:15  params_sys_schedule_rev 0
    2023-07-16 10:28:15  params_sys_uptime 1
    2023-07-16 10:28:15  params_sys_webhook_rev 0
    2023-07-16 20:03:00  params_ts      1689530580.39
    2023-07-16 10:28:15  params_wifi_rssi -57
    2023-07-16 10:28:15  params_wifi_ssid UniFi-M
    2023-07-16 10:28:15  params_wifi_status got ip
    2023-07-16 10:28:15  params_ws_connected false
    2023-07-16 10:28:15  plugs_ui        {}
    2023-07-16 10:28:22  ram_free        151440
    2023-07-16 10:28:22  ram_size        244284
    2023-07-16 10:28:22  restart_required false
    2023-07-16 10:28:15  rssi            -57
    2023-07-16 10:28:22  schedule_rev    0
    2023-07-16 20:03:00  source          WS_in
    2023-07-16 20:03:00  src            shellyplusplugs-80646fc7b80c
    2023-07-16 10:28:15  ssid            UniFi-M
    2023-07-16 10:28:15  sta_ip          x.x.x.x
    2023-07-16 10:31:21  state          off
    2023-07-16 10:28:15  status          got ip
    2023-07-16 20:03:00  temperature    38.5
    2023-07-16 10:28:22  time            10:28
    2023-07-16 10:28:22  unixtime        1689496102
    2023-07-16 10:28:22  uptime          8
    2023-07-16 20:03:00  voltage        0.0
    2023-07-16 10:28:22  webhook_rev    0
    2023-07-15 22:40:31  x_reboot        set
Attributes:
  comment    Channel 1 for MQTT2_shellyplusplugs_80646fc7b80c, see also MQTT2_shellyplusplugs_80646fc7b80c_CH2
  devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot': ReadingsVal($name,'new_fw','false') eq 'true' ? '10px-kreis-gelb' : '10px-kreis-gruen'; $onl = FW_makeImage($onl); my $light = FW_makeImage(ReadingsVal($name,'state','off')); my $cons = ReadingsNum($name,'apower',0); my $total = round(ReadingsNum($name,'aenergy_total',0)/1000,1); my $temp = ReadingsVal($name,'temperature','-100'); my $ip = ReadingsVal($name,'ip','none'); qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a><div>Verbrauch: $cons W / Total: $total kwh / Temp: $temp °C</div>)}
  devicetopic shellyplusplugs-80646fc7b80c
  genericDeviceType switch
  getList    in_mode:noArg in_mode $DEVICETOPIC/rpc {"id": 1,"src":"$DEVICETOPIC", "method": "Switch.GetConfig", "params": {"id": 0}}
  icon      message_socket
  jsonMap    params_switch_0_state:state params_switch_0_aenergy_total:aenergy_total params_switch_0_apower:apower params_switch_0_temperature_tC:temperature params_switch_0_temperature_tF:0 params_wifi_sta_ip:ip temperature_tC:temperature temperature_tF:0
  model      shellyPlus_2pm_split
  readingList $DEVICETOPIC/online:.* online
  $DEVICETOPIC/events/rpc:.* { return if $EVENT =~ m{switch:[1-3]}; $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT,'',$JSONMAP) }
  $DEVICETOPIC/status/switch.0:.* { json2nameValue($EVENT, '', $JSONMAP) }
  $DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, '', $JSONMAP) }
  fhem2shelly/rpc:.* {}
shellyplusplugs-80646fc7b80c/rpc:.* { json2nameValue($EVENT) }
shellyplusplugs-80646fc7b80c/status/ble:.* ble
shellyplusplugs-80646fc7b80c/status/cloud:.* { json2nameValue($EVENT) }
shellyplusplugs-80646fc7b80c/status/plugs_ui:.* plugs_ui
shellyplusplugs-80646fc7b80c/status/sys:.* { json2nameValue($EVENT) }
shellyplusplugs-80646fc7b80c/status/wifi:.* { json2nameValue($EVENT) }
shellyplusplugs-80646fc7b80c/status/ws:.* { json2nameValue($EVENT) }
  room      MQTT
  setList    toggle:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}
  off:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false}}
  on:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true}}
  on-for-timer $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":true,"toggle_after":$EVTPART1}}
  off-for-timer $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":false,"toggle_after":$EVTPART1}}
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}
  setStateList on off toggle on-for-timer off-for-timer
  webCmd    :

rudolfkoenig

ZitatHätte es einen anderen Weg, als den copy cmd gegeben ?
Man haette auch ein neues MQTT2_DEVICE definieren koennen, ob das besser ist, sei hingestellt.

Gedacht ist das Verfahren mit MQTT2_CLIENT so:
- eine MQTT2_CLIENT Instanz definieren, und autocreate Attribut setzen
- eine MQTT2_DEVICE Instanz wird als "Sammelgeraet" automatisch angelegt, sobald eine Nachricht eintrifft.
- man wendet das general_bridge Template auf diese Instanz an.
- fuer jedes reale Geraet wird eine MQTT2_DEVICE Instanz automatisch angelegt
- man setzt das passende Template bei jeder diesen Instanzen (wenn man Kommandos senden will)
Dieses Verfahren funktioniert nur fuer bekannte Geraete, die im general_bridge Template hinterlegt sind, ansonsten muss man das bridge Attribut selbst erweitern.


Mit MQTT2_SERVER laeuft das so:
- eine MQTT2_SERVER Instanz definieren
- fuer jedes reale Geraet wird eine MQTT2_DEVICE Instanz automatisch angelegt
- man setzt das passende Template bei jeder diesen Instanzen (wenn man Kommandos senden will)
Fuer Bridge-Geraete (wie zigbee2mqtt) muss man auch in diesem Fall das bridge Attribut setzen.

Beta-User

Ad copy: Damit werden auch vorhandene Internals mit kopiert, was manchmal zu Problemen führen kann, die sich dann nach einem Neustart "unerklärlicherweise" in Luft auflösen. Für MQTT2_DEVICE und einige andere TYPE mehr ist es eher zu empfehlen, den Weg über eine Kopie der RAW-Definition zu gehen. Hat sich hier aber wohl erledigt....

Konkrete Anmerkungen noch:
- Da du eine vorhandene beliebige CID in die DEF übernommen hast, fehlt der (gweollte) Effekt, dass erst mal alles unbekannte in diesem Gerät landet und man daher nicht weiß, wo man suchen muss. "mosquitto_srv" dürfte in deinem Fall die geschicktere CID sein...
- Alle split-Template erzeugen immer weitere Devices für weitere Kanäle, die man dann ggf. wieder löschen sollte; es müßte eigentlich auch ein einkanaliges attrTEmplate für die 2nd Gen. Shelly geben.

Anmerkung an mich selbst: Da scheint sich mal wieder einiges geändert zu haben, und die Beschreibungen könnte man ggf. auch mal einem review unterziehen....
Server: HP-elitedesk@Debian 12, 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: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files