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 32
liegt 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,
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 :)
Thx, magst mir bitte noch einen Hinweis geben zu bridgeRegexp
in diese Richtung ?
https://forum.fhem.de/index.php?topic=98206.0
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)
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 :
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.
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....