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()