如何解决Python Mqtt client.loop_forever如何跳转n行
此代码使我订阅了代理,并且我输出了针对该特定主题系列的消息。现在,当我第一次开始时,我有一个与设备数量一样多的消息列表……一种在所有设备上的状态检查。在为每行编写的代码中,通过pyautogui库在远程屏幕上产生了一个动作。是否可以告诉他,在前n行中,他让我什么也不做,然后开始执行我告诉他的动作?
import paho.mqtt.client as paho
import pandas as pd
import pyautogui
import os
import platform
def on_subscribe(client,userdata,mid,granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_message(client,msg):
pyautogui.FAILSAFE=False
os_system=platform.system()
# Selezione area dello screenshot
if os_system == 'Darwin':
region=(10,80,850,100) #MAC
else:
region=(60,130,900,250) #RASP
tab_pos=pd.read_csv('table_position.csv')
print(msg.topic+" "+str(msg.payload)+" "+str(msg.qos))
mqtt_name=str(msg.topic).split("click/")[0]+str(msg.topic).split("click/")[1]
mqtt_payload=msg.payload.decode('utf-8')
index_loc=tab_pos.index[tab_pos['mqtt_topic'] == mqtt_name].tolist()
x_loc=tab_pos.iloc[index_loc[0]][0]
y_loc=tab_pos.iloc[index_loc[0]][1]
new_xloc=x_loc+region[0]
new_yloc=y_loc+region[1]
if tab_pos.iloc[index_loc[0]][5] == "cover":
if str(mqtt_payload) == "OPEN":
if str(mqtt_payload) == "STOP":
pyautogui.click(new_xloc+8,new_yloc+2)
pyautogui.moveTo(region[0],region[1])
print(str(new_xloc)+","+str(new_yloc))
else:
pyautogui.click(new_xloc+8,"+str(new_yloc))
if str(mqtt_payload) == "CLOSE":
if str(mqtt_payload) == "STOP":
pyautogui.click(new_xloc+8,new_yloc+25)
pyautogui.moveTo(region[0],"+str(new_yloc))
else:
pyautogui.click(new_xloc+10,new_yloc+10)
pyautogui.moveTo(region[0],region[1])
print(str(new_xloc)+","+str(new_yloc))
client = paho.Client(client_id = "atena_mqtt_click")
client.on_subscribe = on_subscribe
client.on_message = on_message
client.username_pw_set("xxxx","xxxxx")
client.connect("XXX.XXX.XXX.XXX",1883)
client.subscribe("house/click/#",qos=1)
client.loop_forever()
这是输出
Subscribed: 1 (1,)
house/click/xxxxxx/light b’OFF’ 0
711,104
house/click/xxxxxx/alarm b’OFF’ 0
454,134
house/click/xxxxxx/light b’OFF’ 0
795,104
house/click/xxxxxxx/cover b’STOP’ 0
解决方法
否,您不能告诉MQTT客户端库忽略有关已订阅主题的消息。
正如您之前问这个问题的答案中提到的那样,这些是最有可能发布的带有保留标志集的消息。订阅带有保留消息的主题的任何客户端将在发布任何新消息之前始终收到此消息。
在这种情况下,听起来好像保留的消息保留了系统的当前状态,因此忽略它们是没有意义的,您应该使用它们来确保所创建的GUI与系统同步。
如果您已将发布者更改为不再设置保留标志,并且由于它们不再反映系统的当前状态,而现在正尝试从代理中删除这些消息,则可以发布带有NULL负载的消息,并保留但已设置。例如使用mosquitto_pub
命令行工具:
mosquittto_pub -t house/click/xxxxxxx/cover -n
您可以在HiveMQ博客here
上了解有关保留的MQTT消息的更多信息。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。