Python,如何检查 mqtt 中的值是否改变
Python, how to check if value changed in mqtt
我正在从获得 kw 的机器传感器获取数据。作为一个脚本,我只需要不同的 KW 编号,这样我就可以将它发送到数据库。如果新数字值等于最后一个数字(相同数字),我想打印 "Same number" ,否则如果它已更改则打印可变数字值。如果是 forever_loop,我该怎么做?我已经问过这个问题,但那是我在没有 mqtt forever_loop 的情况下使用 while 循环的时候,但我不能在这个脚本中使用 while。
import paho.mqtt.client as mqtt
import json
import pymysql.cursors
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it
def on_message(client, userdata, msg):
arv=int(float(msg.payload.split(' ')[0]))
print(msg.payload.split(' ')[0])
if (arv>arv+1 or arv>arv-1):
print("Same number {0}".format(arv))
else:
print(" Number is {0} ".format(arv))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("blank", password="blank")
client.connect("local", 0, 0)
client.loop_forever()
Output:
6.12
Same number 6
6.91
Same number 6
6.38
Same number 6
5.44
Same number 5
6.75
Same number 6
6.50
Same number 6
6.15
Same number 6
5.67
Same number 5
5.80
Same number 5
6.21
Same number 6
5.21
Same number 5
6.25
Same number 6
6.66
Same number 6
5.14
Same number 5
只需将最后一个值存储在全局变量中,这样您就可以在每条新消息上对其进行测试:
import paho.mqtt.client as mqtt
import json
import pymysql.cursors
lastValue = 0
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it
def on_message(client, userdata, msg):
global lastValue
arv=int(float(msg.payload.split(' ')[0]))
print(msg.payload.split(' ')[0])
if arv == lastValue:
print("Same number {0}".format(arv))
else:
print(" Number is {0} ".format(arv))
lastValue = arv
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("blank", password="blank")
client.connect("local", 0, 0)
client.loop_forever()
我正在从获得 kw 的机器传感器获取数据。作为一个脚本,我只需要不同的 KW 编号,这样我就可以将它发送到数据库。如果新数字值等于最后一个数字(相同数字),我想打印 "Same number" ,否则如果它已更改则打印可变数字值。如果是 forever_loop,我该怎么做?我已经问过这个问题,但那是我在没有 mqtt forever_loop 的情况下使用 while 循环的时候,但我不能在这个脚本中使用 while。
import paho.mqtt.client as mqtt
import json
import pymysql.cursors
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it
def on_message(client, userdata, msg):
arv=int(float(msg.payload.split(' ')[0]))
print(msg.payload.split(' ')[0])
if (arv>arv+1 or arv>arv-1):
print("Same number {0}".format(arv))
else:
print(" Number is {0} ".format(arv))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("blank", password="blank")
client.connect("local", 0, 0)
client.loop_forever()
Output:
6.12
Same number 6
6.91
Same number 6
6.38
Same number 6
5.44
Same number 5
6.75
Same number 6
6.50
Same number 6
6.15
Same number 6
5.67
Same number 5
5.80
Same number 5
6.21
Same number 6
5.21
Same number 5
6.25
Same number 6
6.66
Same number 6
5.14
Same number 5
只需将最后一个值存储在全局变量中,这样您就可以在每条新消息上对其进行测试:
import paho.mqtt.client as mqtt
import json
import pymysql.cursors
lastValue = 0
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it
def on_message(client, userdata, msg):
global lastValue
arv=int(float(msg.payload.split(' ')[0]))
print(msg.payload.split(' ')[0])
if arv == lastValue:
print("Same number {0}".format(arv))
else:
print(" Number is {0} ".format(arv))
lastValue = arv
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("blank", password="blank")
client.connect("local", 0, 0)
client.loop_forever()