python - 在 MQTT paho python 中收到期望消息时如何发布数据?
问题描述
为物联网测试设置 MQTT 代理和数据库 MySQL。
我想实现客户端订阅 MQTT 主题,如果它从 MQTT 代理接收到确切的消息(例如“读取”),它将读取数据库并将数据发布到代理。
现在,我的 python 客户端可以接收消息并检查消息。它还连接 MySQL 数据库以读取数据。但我不知道如何将这些数据发布到 MQTT 代理。
这是我的代码:
import paho.mqtt.client as mqttClient
import time
import MySQLdb
#connect database
db_local = MySQLdb.connect("localhost","root","root123","mqtt")
def read_action():
with db_local:
cur = db_local.cursor(MySQLdb.cursors.DictCursor)
cur.execute("SELECT * FROM `hengio_action` WHERE username ='lam'")
rows = cur.fetchall()
for row in rows:
command = row['command']
return command
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
global Connected #Use global variable
Connected = True #Signal connection
else:
print("Connection failed")
def on_message(client, userdata, message):
print "Message received: " + message.payload
if(message.payload=="read"):
command = read_action()
print command
Connected = False #global variable for the state of the connection
broker_address= "MQTT broker IP" #Broker address
port = 1883 #Broker port
keepalive = 0 #always listen
user = "lam" #Connection username
password = "lam" #Connection password
client = mqttClient.Client("Python") #create new instance
client.username_pw_set(user, password=password) #set username and password
client.on_connect= on_connect #attach function to callback
client.on_message= on_message #attach function to callback
client.connect(broker_address, port=port,keepalive=keepalive) #connect to broker
client.loop_start() #start the loop
while Connected != True: #Wait for connection
time.sleep(0.1)
client.subscribe("LAM_TEST_ANDROID")
try:
while True:
time.sleep(0.5)
except KeyboardInterrupt:
print "exiting"
client.disconnect()
client.loop_stop()
解决方案
推荐阅读
- c++ - 分解模板参数包操作
- ios - 使用 DispatchSemaphore wait() 冻结应用程序
- python - 在 python 中读取 csv 文件时跳过第二行数据帧
- java - 带有 Thymeleaf4 的 Spring Boot mvc。嵌套片段
- java - 在 Java 8 中启用列表连接的强制转换和泛型
- excel - 运行时错误 1004 对象应用程序定义或对象定义错误
- python - 使用 python/pandas 将分类数据分组到其他分类数据上
- php - Mysql查询在2个不同的表中获取项目作为ID
- excel - VBA 使用自己的宏创建新工作簿(没有指向以前工作簿的链接)
- javascript - Mak js 文件可在 react-app 中全局访问,无需包含为脚本