Author Topic: Probleme Callback MQTT  (Read 1791 times)

ftr

  • Newbie
  • *
  • Posts: 5
    • View Profile
Probleme Callback MQTT
« on: June 05, 2019, 16:13:53 »
Hallo zusammen,

ich habe Probleme bei der Verwendung der MQTT Bindings: Es gelingt mir nicht die Callbacks zu registrieren. Hoffe hier kann mir jemand weiterhelfen.

Ich orientiere mich an der Doku und gehe wie folgt vor:

1. Abonnieren des Callback-Topics:
Code: [Select]
mosquitto_sub -v -t tinkerforge/callback/rgb_led_button_bricklet/Doe/button_state_changed
2. Registieren Callback:
Code: [Select]
mosquitto_pub -t tinkerforge/register/rgb_led_button_bricklet/Doe/button_state_changed -m '{"register": true}'
Über das abonnierte Callback-Topic bekomme ich dann immer folgende Fehlermeldung, wenn ich die Nachricht zur Registrierung des Callbacks sende:
Code: [Select]
tinkerforge/callback/rgb_led_button_bricklet/Doe/button_state_changed {"_ERROR": "Could not parse payload for button_state_changed callback registration of <class '__main__.RGBLEDButtonBricklet'> rgb_led_button_bricklet as JSON encoding a boolean: the JSON object must be str, not 'bytes'"}
Als Alternative zum Mosquitto-Client habe ich das Registrieren des Callbacks auch mittels der MQTT-Funktionalität von NodeRED versucht. Dies führt zum gleichen Fehler.

Grundsätzlich funktioniert die Kommunikation zwischen Tinkerforge Hardware, MQTT Bindings, Broker und Clients übrigens offenbar, denn wenn ich die request und response Topics nutze, arbeitet alles wie erwartet.

Ein paar Daten zum verwendeten System:
Betriebssystem: Raspian
MQTT Bindings V2.0.4
MQTT Broker: Mosquitto

Viele Grüße
FTR

rtrbt

  • Tinkerforge Staff
  • Administrator
  • Full Member
  • *****
  • Posts: 120
    • View Profile
Re: Probleme Callback MQTT
« Reply #1 on: June 05, 2019, 16:34:49 »
Moin,
Das scheint ein seltsames Problem zu sein. Wenn ich die Befehle copy-paste und die UID anpasse, funktioniert es bei mir. Du kannst mal versuchen, die Bindings mit --debug --show-payload starten. Dann sollte in der Fehlermeldung die du bekommst hinten der Payload stehen, wie ihn die Bindings empfangen haben.

Erik

ftr

  • Newbie
  • *
  • Posts: 5
    • View Profile
Re: Probleme Callback MQTT
« Reply #2 on: June 05, 2019, 17:05:53 »
Hallo,

danke für die schnelle Reaktion. Es wird folgende Payload angezeigt:
Code: [Select]
Payload was: b'{"register": true}'
Steht das b für Byte oder ist das Bestandteil des Payloads?

Ich hatte in der Mosquitto-Doku übrigens schon vor meinem ersten Posting geschaut, inwiefern man beeinflussen kann, ob String oder Byte als Datentyp verwendet wird, aber nichts dazu gefunden. Weiß diesbezüglich jemand was?
Bei Node-Red habe ich sowohl String als auch JSON als Payload-Typ ausprobiert. Auch hier wird die Payload vom Binding, wie oben, mit dem vorangestellten b angegeben.

Viele Grüße
FTR

rtrbt

  • Tinkerforge Staff
  • Administrator
  • Full Member
  • *****
  • Posts: 120
    • View Profile
Re: Probleme Callback MQTT
« Reply #3 on: June 06, 2019, 11:19:11 »
Code: [Select]
Payload was: b'{"register": true}'
Steht das b für Byte oder ist das Bestandteil des Payloads?
Das b steht für Byte. Dass der Payload an der Stelle des Codes noch (nicht dekodierte) Bytes sind, ist ein Bug in den Bindings. Ich habe mal eine Version mit Bugfix angehangen.

Ich hatte in der Mosquitto-Doku übrigens schon vor meinem ersten Posting geschaut, inwiefern man beeinflussen kann, ob String oder Byte als Datentyp verwendet wird, aber nichts dazu gefunden. Weiß diesbezüglich jemand was?
Du kannst mosquitto_pub mit -s beliebige Dinge auf der Standardeingabe füttern, die Bindings verstehen aber nur UTF-8 kodiertes JSON.

Bei Node-Red habe ich sowohl String als auch JSON als Payload-Typ ausprobiert. Auch hier wird die Payload vom Binding, wie oben, mit dem vorangestellten b angegeben.
Das sollte auch an dem Bug in den Bindings liegen.

ftr

  • Newbie
  • *
  • Posts: 5
    • View Profile
Re: Probleme Callback MQTT
« Reply #4 on: June 06, 2019, 15:55:42 »
Hallo,

mit der Bugfix-Version funktioniert das Registrieren des Callbacks nun, sowohl mittels Mosquitto-Client als auch per NodeRED. Danke.

Gruß
FTR