MQTT связь с несколькими клиентами - PullRequest
0 голосов
/ 01 октября 2018

Я внедряю связь клиентов MQTT между тележкой, лифтом и мобильным телефоном.Пример сценария состоит в том, что корзина возьмет документ в комнату 331 и передаст комнату 442 через лифт и мобильный телефон.

Я хочу объявить 3 клиента в одном файле python, но встроенные функции из Paho MQTTon_connect, on_message, ... доступны только для «одного» клиента.Следовательно, в моем случае работает только клиент корзины, и моя консоль выглядит так:

Cart connected with result code 0
cart/status b'ON'
cart/room/starting_room_number b'331'

Не могли бы вы помочь мне, как заставить 3 клиентов взаимодействовать друг с другом?Это мой mqtt.py файл кода:

import paho.mqtt.client as mqtt 
import time

### Cart definition
def on_connect(client, obj, flags, rc):
    if rc == 0:
        print("Cart connected with result code " + str(rc))
    else:
        print("Bad connection returned code = ", rc)

def on_message(client, obj, msg):
    print(msg.topic + " " + str(msg.payload))

cart = mqtt.Client()
mobile = mqtt.Client()
elevator = mqtt.Client()

cart.on_connect = on_connect
cart.on_message = on_message

cart.connect("test.mosquitto.org", 1883, 60)
mobile.connect("test.mosquitto.org", 1883, 60)
elevator.connect("test.mosquitto.org", 1883, 60)

###(1)Call dolly
cart.subscribe("cart/status")
mobile.publish("cart/status", "ON")
time.sleep(1)

###(2)Get starting room number
cart.subscribe("cart/room/starting_room_number")
mobile.publish("cart/room/starting_room_number", "331")
time.sleep(1)

###(3)Call elevator
elevator.subscribe("elevator/status")
cart.publish("elevator/status", "ON")
time.sleep(1)

###(4)Enter floor
elevator.subscribe("elevator/starting_floor_number")
cart.publish("elevator/starting_floor_number", "3")
time.sleep(1)

###(5)Take document
mobile.subscribe("cart/document_status")
cart.publish("cart/document_status", "TAKEN")

###(6)Get destination room number
cart.subscribe("cart/room/destination_room_number")
mobile.publish("cart/room/destination_room_number", "442")

###(7)Call elevator
elevator.subscribe("elevator/status")
cart.publish("elevator/status", "ON")

###(8)Enter floor
elevator.subscribe("elevator/destination_floor_number")
cart.publish("elevator/destination_floor_number", "4")

###(9)Take document
mobile.subscribe("cart/document_status")
cart.publish("cart/document_status", "GIVEN")

cart.loop_forever()
# mobile.loop_forever()
# elevator.loop_forever()

1 Ответ

0 голосов
/ 01 октября 2018

Вы можете объявить альтернативные функции для каждого клиента:

...
def on_connect_cart(client, obj, flags, rc):
    if rc == 0:
        print("Cart connected with result code " + str(rc))
    else:
        print("Bad connection returned code = ", rc)

def on_message_cart(client, obj, msg):
    print(msg.topic + " " + str(msg.payload))


def on_connect_mobile(client, obj, flags, rc):
    if rc == 0:
        print("Cart connected with result code " + str(rc))
    else:
        print("Bad connection returned code = ", rc)

def on_message_mobile(client, obj, msg):
    print(msg.topic + " " + str(msg.payload))
cart = mqtt.Client()
mobile = mqtt.Client()
elevator = mqtt.Client()

cart.on_connect = on_connect_cart
cart.on_message = on_message_cart
mobile.on_connect = on_connect_mobile
mobile.on_message = on_message_mobile
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...