Как отправить сообщение с различными типами данных через mqtt? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отправить сообщение брокеру через веб-сокет. Сообщение содержит числа, которые представляют данные датчика, поэтому сообщение может быть комбинацией целых чисел и чисел с плавающей точкой. Когда я запускаю код, я получаю TypeError: payload must be a string, bytearray, int, float or None. Как изменить код для отправки сообщения, содержащего целые числа и числа с плавающей запятой? Я использую CloudMQTT в качестве брокера.

Полный код:

import paho.mqtt.client as mqtt
import time

client = mqtt.Client()
client.username_pw_set("User", "Password")
client.connect("Server", "Port")

num_one = 5.83
num_two = -12.46
num_three = 2

message = (num_one, num_two, num_three)

while True:
    client.publish("topic", message)
    time.sleep(1)

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Выберите подходящий двоичный или текстовый формат для вашего сообщения и закодируйте свою структуру в этом формате. Тогда он будет либо байтовым массивом, либо строкой.

Если нет веских причин для прокрутки собственного формата, я бы предложил SenML , так как он чуть сложнее, чем большинство нестандартных JSON форматов, но достаточно стандартизирован, вы можете по крайней мере сказать, что вы пытаетесь быть совместимым с другими приложениями.

0 голосов
/ 13 февраля 2020

Похоже, ваша проблема в том, что отправляемое вами сообщение является кортежем. Вы, вероятно, захотите

message = (num_one, num_two, num_three)
message = ''.join([str(x) for x in message])

Это преобразует каждое число в строку, а затем объединяет их в одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...