Ich setze mqtt zwar erfolgreich ein, verstanden habe ich es aber noch nicht wirklich.
Mittlerweile habe ich 3 Clients für mqtt2 - glaube aber irgendwie nicht, dass das so richtig ist.
Mein MQTT2_FHEM_Server lauscht auf Port 11883 (zur Abgrenzung des parallel laufenden Mosquitto)
Ich setze Tasmota- und zigbee_Devices ein.
Client_1: mqtt2client
Internals:
BUF
DEF 192.168.0.19:11883
DeviceName 192.168.0.19:11883
FD 27
NAME mqtt2client
NR 1047
PARTIAL
STATE opened
TYPE MQTT2_CLIENT
WBCallback
clientId mqtt2client
lastMsgTime 1542962578.77919
nextOpenDelay 5
READINGS:
2018-11-22 20:30:18 state opened
Attributes:
autocreate 1
disable 0
room MQTT
Client_2: MQTT2_mqtt2client
Internals:
CID mqtt2client
DEF mqtt2client
DEVICETOPIC MQTT2_mqtt2client
IODev mqtt2client
LASTInputDev mqtt2client
MSGCNT 3834
NAME MQTT2_mqtt2client
NR 1048
STATE true
TYPE MQTT2_DEVICE
mqtt2client_MSGCNT 3834
mqtt2client_TIME 2018-11-23 09:47:24
READINGS:
2018-11-23 09:43:14 ENERGY_ApparentPower 0.0
2018-11-23 09:43:14 ENERGY_Current 0.000
2018-11-23 09:43:14 ENERGY_Factor 0.00
2018-11-23 09:43:14 ENERGY_Period 0.0
2018-11-23 09:43:14 ENERGY_Power 0.0
2018-11-23 09:43:14 ENERGY_ReactivePower 0.0
2018-11-23 09:43:14 ENERGY_Today 0.000
2018-11-23 09:43:14 ENERGY_Total 14.945
2018-11-23 09:43:14 ENERGY_TotalStartTime 2018-11-06T12:34:59
2018-11-23 09:43:14 ENERGY_Voltage 222
2018-11-23 09:43:14 ENERGY_Yesterday 0.000
2018-11-23 09:27:23 LWT online
2018-11-23 09:43:14 POWER on
2018-11-23 09:42:33 SI7020_Humidity 79.0
2018-11-23 09:42:33 SI7020_Temperature 13.5
2018-11-23 09:42:33 Switch1 off
2018-11-23 09:42:33 TempUnit C
2018-11-23 09:43:14 Time 2018-11-23T09:43:14
2018-11-23 09:43:14 Uptime 16T21:08:18
2018-11-23 09:43:14 Vcc 3.112
2018-11-23 09:43:14 Wifi_AP 1
2018-11-23 09:43:14 Wifi_BSSId 80:2A:A8:C1:27:39
2018-11-23 09:43:14 Wifi_Channel 5
2018-11-23 09:43:14 Wifi_RSSI 76
2018-11-23 09:43:14 Wifi_SSId IoTGW4H
2018-11-23 09:38:37 battery 19.00
2018-11-22 20:30:47 brightness 254
2018-11-23 09:38:37 dewpoint 2.6
2018-11-23 09:38:37 humidity 95.88
2018-11-23 09:47:24 linkquality 92
2018-11-23 08:20:16 message device incoming
2018-11-23 09:38:37 pressure 1007.81
2018-11-23 09:47:24 state true
2018-11-23 09:38:37 temperature 3.16
2018-11-23 08:20:16 type pairing
2018-11-23 09:38:37 voltage 2935
Attributes:
DbLogExclude .*
IODev mqtt2client
readingList mqtt2client:zigbee2mqtt/0x00124b001aa663dc:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.1/STATE:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.1/SENSOR:.* { json2nameValue($EVENT) }
mqtt2client:tele/esp.02/STATE:.* { json2nameValue($EVENT) }
mqtt2client:tele/esp.02/SENSOR:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.2/STATE:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.2/SENSOR:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00158d00022fdcd9:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00158d00022fdcd9:.* { json2nameValue($EVENT) }
mqtt2client:tele/esp.02/UPTIME:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.1/UPTIME:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.2/UPTIME:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00158d00023891b6:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00158d00023891b6:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00158d00023891b6:.* { json2nameValue($EVENT) }
mqtt2client:stat/esp.02/RESULT:.* { json2nameValue($EVENT) }
mqtt2client:stat/esp.02/POWER:.* POWER
mqtt2client:stat/esp.02/RESULT:.* { json2nameValue($EVENT) }
mqtt2client:stat/esp.02/POWER:.* POWER
mqtt2client:tele/gosund.2/LWT:.* LWT
mqtt2client:tele/gosund.1/LWT:.* LWT
mqtt2client:tele/esp.02/LWT:.* LWT
mqtt2client:cmnd/gosund.2/POWER:.* POWER
mqtt2client:cmnd/gosund.1/POWER:.* POWER
mqtt2client:cmnd/esp.02/POWER:.* POWER
mqtt2client:zigbee2mqtt/undefined:.* { json2nameValue($EVENT) }
mqtt2client:tele/gosund.4/LWT:.* LWT
mqtt2client:tele/esp.01/LWT:.* LWT
mqtt2client:tele/gosund.3/LWT:.* LWT
mqtt2client:zigbee2mqtt/mq2.TH.Kuehlschrank:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/bridge/state:.* state
mqtt2client:zigbee2mqtt/0x000b57fffed523cd:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/bridge/log:.* { json2nameValue($EVENT) }
mqtt2client:zigbee2mqtt/0x000b57fffed523cd/set:.* { json2nameValue($EVENT) }
room MQTT
Client_3: MQTT2_zigbee_pi
Internals:
CID zigbee_pi
DEF zigbee_pi
DEVICETOPIC MQTT2_zigbee_pi
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_MSGCNT 1149
MQTT2_FHEM_Server_TIME 2018-11-23 09:48:24
MSGCNT 1149
NAME MQTT2_zigbee_pi
NR 1040
STATE true
TYPE MQTT2_DEVICE
READINGS:
2018-11-23 09:47:54 battery 16.00
2018-11-23 09:47:54 dewpoint -6.7
2018-11-23 09:47:54 humidity 41.75
2018-11-23 09:48:24 linkquality 92
2018-11-23 08:20:16 message device incoming
2018-11-23 09:47:54 pressure 1007
2018-11-23 09:48:24 state true
2018-11-23 09:47:54 temperature 5.31
2018-11-23 08:20:16 type pairing
2018-11-23 09:47:54 voltage 2915
Attributes:
DbLogExclude .*
IODev MQTT2_FHEM_Server
readingList zigbee_pi:zigbee2mqtt/bridge/state:.* state
zigbee_pi:zigbee2mqtt/0x00158d00022fdcd9:.* { json2nameValue($EVENT) }
zigbee_pi:zigbee2mqtt/0x00158d00023891b6:.* { json2nameValue($EVENT) }
zigbee_pi:zigbee2mqtt/0x00124b0018ed2581:.* { json2nameValue($EVENT) }
zigbee_pi:zigbee2mqtt/bridge/log:.* { json2nameValue($EVENT) }
zigbee_pi:zigbee2mqtt/0x00124b001aa663dc:.* { json2nameValue($EVENT) }
room MQTT
setList permit_join:true,false zigbee2mqtt/bridge/config/permit_join $EVTPART1
remove:textField zigbee2mqtt/bridge/config/remove $EVTPART1
log_level:debug,info,warn,error zigbee2mqtt/bridge/config/log_level $EVTPART1
rename:textField zigbee2mqtt/bridge/config/rename {"old":"$EVTPART1","new":"$EVTPART2"}
network_map:raw,graphviz zigbee2mqtt/bridge/networkmap $EVTPART1
devicelist:noArg zigbee2mqtt/bridge/config/devices
Meine Fragen:
1. Sind die 3 Clients so wirklich notwendig?
2. Welchen Client benötige ich wirklich wofür?
3. Client_2 enthält zwar auch in der readingList alle zigbee-Devices, nicht aber das attr setList aus Client_3. Kann / sollten Client_2 und Client_3 sinnvoll zusammengefasst werden?
4. Wenn ich es richtig verstanden habe, fehlt mir noch (zumindest für die zigbee-Devices) das attr bridgeRegexp zigbee2mqtt/([^:]*):.* "zigbee_$1". Wo gehört das jetzt hin (Client_2, Client_3 oder in beide)?
5. readingList: ein Device in Client_2 heißt "mq2.TH.Kuehlschrank". In Client_3 heißt es "0x00158d00022fdcd9". Ein identisches Device ist bei mir "mq2.TH.Garten". In beiden Clients (2 und 3) heißen sie "0x00158d00023891b6". In der configuration.yaml habe ich nichts geändert (also keine friendly_name Änderung).
6. Eine Tradfri_GU10-Lampe. In Client_2 ist sie vorhanden ("0x000b57fffed523cd"), in Client_3 nicht. Sollte so doch eigentlich auch nicht sein?
LG
Holger
Die Frage verstehe ich nicht so ganz: Du hast bei den 3 Devices 1 MQTT2_CLIENT-Gerät (TYPE=...) und zwei MQTT2_DEVICE-Geräte (davon wird eines vom MQTT2_SERVER versorgt). Verwirrend ist nur, dass die Daten scheinbar an beiden Servern ankommen und dann teilweise eben auch in beiden MQTT2_DEVICE-Geräten auftauchen. Das dürfte aber eine Altlast sein, eigentlich dürfte nur einer der Server aktuell Daten bekommen.
Ansonsten paßt das m.E. eigentlich so, auch wenn es Sinn machen würde, dann mit dem bridgeRegex-Attribut aus den 4 eigentlichen Zigbee-Geräten (Hardware mit eigener ID) dann 4 weitere Devices (TYPE=MQTT2_DEVICE) zu bilden und dasselbe für die Sonoffs usw. zu machen, die über MQTT2_CLIENT kommen.
Hoffentlich war das jetzt nachvollziehbar, das ist erfahrungsgemäß erst mal verwirrend...
Um die Frage im Betreff zu beantworten: gar keins, ein MQTT2_SERVER reicht :)
Meiner Ansicht nach ist MQTT2_CLIENT fuer die, die unbedingt mit einem externen MQTT-Server wie mosquitto arbeiten wollen, alles manuell definieren, oder MQTT als FHEM2FHEM Erstatz (miss)brauchen. MQTT2_SERVER ist fuer die, die Geraete per MQTT an FHEM anbinden, und moeglichst alles automatisch angelegt haben wollen.
autocreate funktioniert bei MQTT2_CLIENT nur beschraenkt, es ist hauptsaechlich nur eine Hilfe fuer die manuelle Spezifikation.
In diesem Fall wuerde ich mqtt2client und MQTT2_mqtt2client entfernen und in MQTT2_zigbee_pi bridgeRegexp setzen. Damit werden (wie Beta-User schon schrieb) automatisch MQTT2_DEVICE Instanzen fuer jedes einzelne zigbee Geraet angelegt.
Danach wuerde ich per attrTemplate in den angelegten Instanzen die Befehle/Icons spezifizieren.
Client_1: mqtt2client ist der Client für Fhem, um mit den mosquitto Server zu kommunizieren.
Client_2: MQTT2_mqtt2client ist praktisch erstmal das Sammelbecken für alle MQTT Geräte.
Dort müsstest du wie Beta-User schon schrieb ein bridgeRegexp setzen.
Dadurch werden die Zigbee2mqtt Geräte in Fhem unterteilt in mehrere Devices, je nach Topic.
Client_3: MQTT2_zigbee_pi ist für die Steuerung für Zigbee, um z.B. das joinen von neuen Geräten zu erlauben/verbieten...
Erst einmal meinen herzlichsten Dank für eure Unterstützung!
ZitatMQTT2_SERVER ist fuer die, die Geraete per MQTT an FHEM anbinden, und moeglichst alles automatisch angelegt haben wollen.
Das ist auch mein eigentliches Ziel. :)
Was ich jetzt verstanden habe:
Client_1 (mqtt2client) kann ich ersatzlos löschen.
Client_2 (MQTT2_mqtt2client) ist zwar das ganz große Sammelbecken für alle mqtt2-Devices. Ich brauche es aber nicht, da z.B. Tasmota-Devices direkt per attr autocreate aus dem mqtt2-Server erzeugt werden.
Client_3 (MQTT2_zigbee_pi) ergänze ich um attr bridgeRegexp zur Vereinfachung der Anlage neuer Devices.
Den fehlenden readingList Eintrag der Tradfri_GU10-Lampe kann ich händisch nachtragen (obwohl nicht notwendig, da ich das Device händisch angelegt habe und es sich schalten lässt)
Schön, wenn alles verständlicher und übersichtlicher wird.
Vielen Dank noch einmal.