python - 树莓派中的 CloudMQTT python
问题描述
我正在尝试用我的 Raspberry pi 创建一些东西,如果我做一个动作,我会向 CloudMQTT 发送一条 MQTT 消息,这样听这个消息的人就知道该怎么做。
在一个示例中:用户 1 按下按钮 RBP 知道这一点,并向 CloudMQTT 发送 MQTT 消息,而另一个 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 吗?
解决方案
如果您查看该函数的文档publish.single
,您会看到它可以接受一个名为的参数,该参数auth
包含用户名/密码以连接到代理
授权
包含客户端身份验证参数的字典:
auth = {'用户名':””, '密码':””}
用户名是必需的,密码是可选的,如果不提供,默认为无。
默认为 None,表示不使用身份验证。
推荐阅读
- mongodb - MongoDB查找传入的不匹配的值
- java - 改造不在Android中解析
- ruby-on-rails - 您的 Ruby 版本是 2.6.3,但您的 Gemfile 指定的是 2.6.4?
- c - C中的gdb:以字符串形式获取变量类型
- zendesk - Zendesk Web 小部件状态未正确更新且按钮未隐藏
- c++ - 使函数参数默认为周围范围
- sqlite - 有没有办法有效地测试新插入/更新的行是否与 SQLite 查询匹配?
- registration - 使用 itkNormalizedMutualInformationHistogramImageToImageMetric 时出错
- kotlin - Kotlin long 主构造函数和继承
- xml - 在 Coldfusion 2016 中无法使用 CFHTTP 读取 XML