Я новичок в MQTT и Raspberry Pi! Я запускаю клиентский скрипт и просто публикую сообщение, используя другой скрипт. Я использую своего собственного брокера Mosquitto.
Клиент:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("Example/test")
client.subscribe("Example/topic")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
if msg.payload == "Hello":
print("Received message #1, do something")
if msg.payload == "World":
print("Received message #2, do something else")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.1.4", 1883)
client.loop_forever()
Издатель:
import paho.mqtt.publish as publish
publish.single("Example/test", "Hello", hostname="192.168.1.4")
publish.single("Example/topic", "World", hostname="192.168.1.4")
print("OK")
Вот где вещи кажутся странными, и такие вещи случаются.
1.При запуске клиента и издателя с помощью команды python3 операторы if пропускаются и печатаются только тема + полезная нагрузка
2. Когда я запускаю клиент с помощью команды python, а издатель с помощью команд python3 и python, все работает отлично!
3. Когда я делаю все вышеперечисленное, во время запуска клиента на virtualenv операторы if игнорируются во всех случаях!
Я хотел бы знать, есть ли причина совместимости для этого или что-то не так в коде, так как я должен выполнить что-то более сложное, например, в virtualenv!
ОБНОВЛЕНИЕ: Я нашел решение, которое отлично работает!
В коде клиента в операторе if я использовал
if msg.payload == b"Hello":
и
if msg.payload == b"World":
Насколько я знаю, это должно быть из-за переменных типов, и они не совпадали.