CloudMQTT Python в Raspberry Pi - PullRequest
       31

CloudMQTT Python в Raspberry Pi

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

Я пытаюсь создать что-то с моим Raspberry pi, где, если я сделаю одно действие, я отправлю MQTT-сообщение в CloudMQTT, чтобы тот, кто его слушает, знал, что делать.

В одном примере: Пользователь 1нажмите кнопку. RBP знает об этом и отправляет MQTT-сообщение в CloudMQTT, а другой RBP обнаруживает, что пользователь 1 нажал кнопку, чтобы пользователь 2 знал, когда нужно нажать кнопку.

Что я сделал:

import paho.mqtt.client as mqtt

def on_connect(client, userData, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe("MyInstanceName/topic")

def on_message(client,userdata,msg):
    print(msg.topic+ " "+ str(msg.payload))
    if(msg.payload == "button"):
        print("something")
    if(msg.payload == "button2"):
        print("something")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("user","password")
client.connect("m21.cloudmqtt.com",port,60)
client.loop_forever()

Я создал два Users and ACL, потому что мне нужно только 2 пользователя, поэтому я создал User1 с темой и могу читать и писать также для User2

Что я не знаю, как это публиковатьпотому что у меня есть это:

import paho.mqtt.publish as publish

publish.single("MyInstanceName/topic","button",hostname="m21.cloudmqtt.com")
publish.single("MyInstanceName/topic","button2",hostname="m21.cloudmqtt.com")
print("Done") 

Но я получаю эту ошибку:

Traceback (most recent call last):
  File "mqtt_publisher.py", line 3, in <module>
    publish.single("MyInstanceName/topic","button",hostname="m21.cloudmqtt.com")
  File "/Library/Python/2.7/site-packages/paho/mqtt/publish.py", line 223, in single
    protocol, transport)
  File "/Library/Python/2.7/site-packages/paho/mqtt/publish.py", line 159, in multiple
    client.connect(hostname, port, keepalive)
  File "/Library/Python/2.7/site-packages/paho/mqtt/client.py", line 839, in connect
    return self.reconnect()
  File "/Library/Python/2.7/site-packages/paho/mqtt/client.py", line 962, in reconnect
    sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 575, in create_connection
    raise err
socket.error: [Errno 61] Connection refused

Теперь все жестко закодировано, но когда я подключаю кнопку в свой RBP, как я долженобнаружить это нажатие кнопки?Я все еще могу использовать Python?

1 Ответ

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

Если вы посмотрите на doc для функции publish.single, вы увидите, что она может принимать аргумент под названием auth, который содержит имя пользователя / пароль для подключения к брокеру

auth

дикт, содержащий параметры аутентификации для клиента:

auth = {'username': ””, 'password': ””}

Имя пользователя требуется, пароль является необязательным и по умолчанию имеет значение Нет, если не указано.

По умолчанию Нет, что означает, что аутентификация не должна использоваться.

...