[gelöst] MQTT2_Client(s) - wie viele braucht man?

Begonnen von Omega, 23 November 2018, 10:16:50

Vorheriges Thema - Nächstes Thema

Omega

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






NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

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.

mark79

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...

Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Omega

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.

NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave