MQTT: Format von zu abonnierenden Topics

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
NewPython19

Hallo zusammen,

eine Frage bezüglich der Arbeit mit MQTT in Python.
Wenn ich ein Topic abonniere, dann wird mir bei "on_log" beim SUBSCRIBE-Paket das abonnierte Topic so angezeigt:
[(b'topic', 0)]

Was ich bisher gelesen habe ist, dass das b'XXX' bedeutet, dass das Topic als Byte gelesen wird?
In der Norm zu MQTT steht jedoch, dass "The Topic Filters in a SUBSCRIBE packet payload MUST be UTF-8 encoded strings". Bedeutet das, dass ich das zu abonnierende Topic vorher wandeln muss? Oder versteh ich da irgendwas falsch?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es kann sein, dass das logging bewusst NICHT dekodiert ist, um Nachrichten die ggf nicht korrekt sind trotzdem vorher zu zeigen.
NewPython19

__deets__ hat geschrieben: Dienstag 30. Juli 2019, 08:36 Es kann sein, dass das logging bewusst NICHT dekodiert ist, um Nachrichten die ggf nicht korrekt sind trotzdem vorher zu zeigen.
Also meinst du, dass ich mein zu abonnierendes Topic nicht noch umwandeln bzw. kodieren muss?
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NewPython19: “UTF-8 encoded strings” sind Bytes, keine Strings. Jedenfalls in Python (3).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke du musst eine andere Methode benutzen. on_message oder was auch immer. Logging ist eine Hilfefunktion. NICHT der standardweg wie man Daten von einem MQTT Server bekommt.
NewPython19

Ich benutze logging nicht zum Datensammeln, sondern um zu prüfen, welche Pakete zwischen Client und Server ausgetauscht werden.

Zum erhalten verwende ich folgendes:

Code: Alles auswählen

import paho.mqtt.subscribe as subscribe
...
def on_message_return(client, userdata, message):
    print("%s %s" % (message.topic, message.payload))
 ...
subscribe.callback(on_message_return, topic)

__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und wozu dann noch das Logging? Das ist eine Funktionalitaet um Problemen auf die Spur zu kommen. NICHT um die daraus erhaltenen Daten als normale Nachrichten weiter zu verarbeiten. Und in dem Moment ist die Form auch irrelevant. Im Gegenteil, je roher je besser, denn damit kann man Fehlern wie illegalem encoding auf den Grund gehen.
NewPython19

__deets__ hat geschrieben: Dienstag 30. Juli 2019, 10:08 Und wozu dann noch das Logging? Das ist eine Funktionalitaet um Problemen auf die Spur zu kommen. NICHT um die daraus erhaltenen Daten als normale Nachrichten weiter zu verarbeiten. Und in dem Moment ist die Form auch irrelevant. Im Gegenteil, je roher je besser, denn damit kann man Fehlern wie illegalem encoding auf den Grund gehen.
Wie gesagt ich nutze nicht das Logging um Daten weiterzuverarbeiten. Ich benutze es nur um die Pakete anzuzeigen
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann ist doch alles gut. Die Daten kommen nunmal als Bytes ueber die Leitung, und so bekommst du die zu sehen. Da selbst was dekodieren ist ueberfluessig fuer den Zweck.
Antworten