MQTT2_DEVICE bekommt keine Nachrichten

Begonnen von kampi, 11 Mai 2021, 10:57:57

Vorheriges Thema - Nächstes Thema

kampi

Hi,

der Server ist ein privater von mir (gibt es auch als Probeversion: https://cloud.thingsboard.io/home). Für die MQTT-Verbindung werden Zugangsdaten (in Form eines zufälligen Usernames) benötigt, welche beim Erstellen des Gerätes im ThingsBoard erzeugt werden. Diese Zugangsdaten habe ich bei FHEM eingegeben:


attr MQTT_Client username abcdefghijklmnopqr

Beta-User

Username ist nach meinem Verständnis nur die halbe Miete, es muss vermutlich auch ein PW gesetzt werden. Es macht aber keine Freude, das alles dann erst auf Nachfrage zu erfahren...
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

kampi

Zitat von: Beta-User am 11 Mai 2021, 17:39:32
Username ist nach meinem Verständnis nur die halbe Miete, es muss vermutlich auch ein PW gesetzt werden. Es macht aber keine Freude, das alles dann erst auf Nachfrage zu erfahren...

Nein das Passwort ist optional. Das Senden per MQTT in Richtung ThingsBoard habe ich bereits im Vorfeld über MQTT.fx getestet und ohne Passwort, aber mit Username konnte ich eine Verbindung zum Broker herstellen. Als ich beides weg gelassen habe gab es Verbindungsfehler. So habe ich schon ausprobiert was ich senden muss und was ich zurück bekomme und aktuell scheitert halt nur das MQTT2_DEVICE, sprich der Weg von ThingsBoard zu FHEM. :(

kampi

Hab es gerade noch einmal direkt auf dem System mit FHEM über mosquitto probiert:


mosquitto_sub -h <IP> -p 1883 -t v1/devices/me/rpc/request/+ -u <Username>


Das klappt soweit und ich bekomme auch die Nachrichten.


{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}



Beta-User

Hmm, dann sorry für den Einwand :( .

Kannst du denn die Messages sehen, wenn du dich mit mosquitto_sub auf dem Server subscribest?
(ja, geht offenbar)
Wenn M2_CLIENT kein opened hinbekommt, kann jedenfalls nichts im DEVICE ankommen.

Ggf. musst du mal Rudi um Hilfe bitten, wenn das ganze so nicht klappt (wobei mir nicht klar ist, warum es einen speziellen Broker braucht; evtl. hat auch der Eigenheiten, die wir (noch) nicht kennen).
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

kampi

#20
Hi,

noch einmal kurz zusammengefasst was ich bereits weiß und probiert habe:

- Ich habe mich über MQTT.fx mit meinem ThingsBoard verbunden und das Topic "v1/devices/me/rpc/request/+" subscribed, woraufhin ich die gesendeten Nachrichten von ThingsBoard bekomme. Die Nachrichten hatten das Format (Beispiel):

Topic: v1/devices/me/rpc/request/256
Payload: {"method":"Fancy","params":"Method"}


- Ich habe FHEM mit einem mosquitto-Broker (ohne ThingsBoard) verbunden und folgendes konfiguriert:


defmod MQTT_Client MQTT2_CLIENT <IP>:1883
defmod MQTT_Device MQTT2_DEVICE
attr MQTT_Device IODev MQTT_Client
attr MQTT_Device readingList v1/devices/me/rpc/request/.* { json2nameValue($EVENT) }


Und dann per mosquitto die folgende Nachricht abgesetzt:


mosquitto_pub -t "v1/devices/me/rpc/request/256" -m '{"method":"Fancy","params":"Method"}'


Und die Nachricht tauchte im Log auf:


2021-05-11 18:09:55 Global global ATTR ThingsBoard_Device readingList v1/devices/me/rpc/request/.* { json2nameValue($EVENT) }
2021-05-11 18:10:10 MQTT2_DEVICE ThingsBoard_Device method: Fancy
2021-05-11 18:10:10 MQTT2_DEVICE ThingsBoard_Device params: Method


- Ich habe in FHEM die Verbindung zum Broker umgeändert in eine Verbindung zur ThingsBoard-Instanz (URL angepasst und den Username eingegeben). Daten von FHEM zur ThingsBoard-Instanz werden gesendet (sehe ich sowohl im Log, als auch im ThingsBoard). Daten von ThingsBoard zu FHEM werden nicht gesendet

- Wenn ich auf dem System mit FHEM mich per mosquitto auf das Topic von ThingsBoard subscribe erhalte ich die Nachrichten ebenfalls:


mosquitto_sub -h <IP> -p 1883 -t v1/devices/me/rpc/request/+ -u <UserName>
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}
{"method":"Fancy","params":"Method"}


Somit ist klar das die Nachrichten auf dem System ankommen. Aber irgendwie kommen sie nicht bei FHEM an.

Otto123

#21
Du hast meine Frage nach list MQTT_Client in #11 mit einem list MQTT_Device beantwortet.
Entweder bist Du wirr oder Dein System!!!

Kannst Du mal nachliefern damit man sich überzeugen kann, dass es überhaupt eine Verbindung gibt?! Und bitte nicht alles faken, private IP Adressen sind sowas von egal...
Accounts sollst Du natürlich rausnehmen!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kampi

Zitat von: Otto123 am 11 Mai 2021, 20:04:07
Du hast meine Frage nach list MQTT_Client in #11 mit einem list MQTT_Device beantwortet.

Sorry hab mich verlesen...


Internals:
   BUF       
   CFGFN     
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        h2907213.stratoserver.net:1883
   DeviceName h2907213.stratoserver.net:1883
   FD         10
   FUUID      609ac8da-f33f-15ff-8a04-73a5f2332f0adf21
   NAME       MQTT_Client
   NR         492
   PARTIAL   
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   MQTT_Client
   lastMsgTime 1620756774.97591
   nextOpenDelay 5
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2021-05-11 20:11:54   state           opened
Attributes:
   username   ...



Otto123

Warum hast Du das MQTT_Client Device nicht mal  auf autocreate simpel gestellt und geschaut was da angelegt wird? Wir rätseln doch immer noch um den richtigen topic?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kampi

Zitat von: Otto123 am 11 Mai 2021, 20:22:19
Warum hast Du das MQTT_Client Device nicht mal  auf autocreate simpel gestellt und geschaut was da angelegt wird? Wir rätseln doch immer noch um den richtigen topic?

Ich habe eben "simple" und "complex" probiert und bei beiden passiert nichts.

Das Topic ist m. M. n. soweit klar, weil ich mich (wie bereits geschrieben) über mosquitto verbinden kann und auch die Nachricht empfange (nur halt in FHEM nicht).

Otto123

simpel ist sinnvoll, complex ist speziell - deswegen habe ich simpel gesagt. Da wurde kein neues MQTT2_DEVICE erzeugt - nachdem dein MQTT mal gesendet hat?
list TYPE=MQTT2_DEVICE
Wenn das so ist behaupte ich: Dein MQTT2_CLIENT steht allein im Wald.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Vermutung: das mit User ohne Passwort ist nicht vorgesehen in m2c.
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

kampi

mmh wie kann man das Problem den jetzt möglichst elegant lösen?

Beta-User

Habe mal in den Code von M2C geschaut, aber eigentlicht sieht mir das (mit meinen diesbezüglich aber sehr ungeübten Augen!) nicht so aus, als wäre trotz user-Angabe zwingend ein PW erforderlich.

Und "opened" sieht mir auch ok aus.

Vermutlich wäre es sinnvoll, den M2C mal auf verbose 5 zu setzen, autocreate auf simple zu lassen und dann mal den Connect neu zu initiieren und ein paar Nachrichten zu schicken. Eigentlich müsste dann was im Log stehen. Falls da "schwierige Daten" drin stehen, müsstest du Rudi fragen, ob du das Log als Email-Anhang schicken kannst bzw. ihm ggf sagen, wie er selbst ein Testszenarium aufbauen kann. Falls du selbst eine Art Testserver aufziehen könntest, kannst du das ggf. auch hier einfach anpinnen (für code-Tags vermutlich zu viel).

Es wäre aber vermutlich hilfreich, wenn du Rudi die Vorarbeit dahingehend abnimmst, dass wenigstens klar ist, was das für ein Server-Typ ist, der da im Hintergrund den Broker mimt, warum 3.1.1 "richtig" ist, usw..

(Generell ist mir das vom Datenfluss her etwas suspekt, dass auf diese Art und Weise was von den Clients erfragt wird. Eventuell würde es auch genügen, einfach die "erwünschten Daten" jeweils bei der Generierung (also der Reading-Aktualisierung in FHEM) an die Zentrale (ThingsBoard soll das wohl sein) zu schicken; dafür wäre dann MQTT_GENERIC_BRIDGE vermutlich die zu wählende Lösung).
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

Otto123

#29
Wie sollen wir helfen? Meine Frage aus #25 hast Du nicht beantwortet  :'(
ZitatDa wurde kein neues MQTT2_DEVICE erzeugt - nachdem dein MQTT mal gesendet hat?
Ein list hast Du auch nicht geliefert.

Edit: Ich habe jetzt mal ganz frech den Client aus #22 als mqt ohne username angelegt. autocreate simpel gemacht, sofort wird ein Device angelegt:
Internals:
   CFGFN     
   CID        mqt
   DEF        mqt
   DEVICETOPIC MQTT2_mqt
   FUUID      609bf2f3-f33f-27f7-ad94-77f010afd54ab17e
   IODev      mqt
   LASTInputDev mqt
   MSGCNT     1
   NAME       MQTT2_mqt
   NR         402917
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqt_MSGCNT 1
   mqt_TIME   2021-05-12 17:24:31
   READINGS:
     2021-05-12 17:24:31   telemetry       {
'heartbeat' : 1620833071
}
Attributes:
   IODev      mqt
   readingList mqt:v1/devices/me/telemetry:.* telemetry
   room       MQTT2_DEVICE

Das Herz schlägt  :-*
Ich trage mal den Servernamen nicht weiter ?!
defmod mqt MQTT2_CLIENT hxx07xxy.stratoserver.net:1883
attr mqt autocreate simple
attr mqt rawEvents .*
attr mqt verbose 5
attr mqt username willi

Edit: Nach dem Motto: Namen sind Schall und Rauch hab ich ihm mal noch den usernamen willi gegeben. Das herz schlägt weiter und es kommt noch ein learning attribute :)

Wenn da mit einem mqtt Explorer etwas publishe topic v1/devices/me/otto dann bekommt mein Client das auch zurück:
2021-05-12 17:49:51   otto            "eins zwei drei"
Also ich sage mal Dein MQTT Server funktioniert und der Zugriff mit MQTT2_Client und MQTT2_DEVICE funktioniert auch !
Allerdings ist er völlig offen und jeder darf ...  :-X
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz