【问题标题】:Compare previous and current published value on MQTT topic比较 MQTT 主题上先前和当前发布的值
【发布时间】:2018-10-23 09:42:50
【问题描述】:

我的问题是如何将每个主题的当前发布值与之前发布的值进行比较,并决定是否向设备发送命令以开启/关闭。 如果状态已从以前的状态更改,我想将命令发送到灯光,否则将不会发送任何命令。 我有以下代码。

import paho.mqtt.client as mqtt #import the client1
import time
def on_message(client, userdata, message):
    print("message received " ,str(message.payload.decode("utf-8")))    
    print("message topic=", message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)

def on_connect(client, userdata, flags, rc):    
    print("Connected with result code "+str(rc))    

broker_address="127.0.0.1"
print("creating new instance")
client = mqtt.Client("P1") 
client.on_connect=on_connect
client.on_message=on_message 
print("connecting to broker")
client.connect(broker_address) #connect to broker
client.loop_start()
print("Subscribing to all topics")
client.subscribe("#")
print("Publishing message to topic","house/bulbs/bulb1")
client.publish("house/bulbs/bulb1","OFF",qos=0,retain=true)
client.publish("house/bulbs/bulb1","ON",qos=0,retain=true)

print("Publishing message to topic", "house/bulbs/bulb2")
client.publish("house/bulbs/bulb2", "ON")
client.publish("house/bulbs/bulb2", "ON")
time.sleep(4) # wait
client.loop_stop() #stop the loop

【问题讨论】:

    标签: python mqtt mosquitto paho


    【解决方案1】:

    这样做的唯一方法是将状态存储在代码中,并将传入消息与存储的值进行比较。

    import paho.mqtt.client as mqtt #import the client1
    
    bulb1 = OFF
    bulb2 = OFF
    
    def on_message(client, userdata, message):
        global bulb1
        global bulb2
        print("message received " ,str(message.payload.decode("utf-8")))    
        print("message topic=", message.topic)
        print("message qos=",message.qos)
        print("message retain flag=",message.retain)
    
        if message.topic == 'house/bulbs/bulb1':
          if bulb1 != str(message.payload.decode("utf-8")):
              #State changed
              bulb1 = str(message.payload.decode("utf-8"))
    
    def on_connect(client, userdata, flags, rc):    
        print("Connected with result code "+str(rc))  
        client.subscribe("#")  
    
    broker_address="127.0.0.1"
    print("creating new instance")
    client = mqtt.Client("P1") 
    client.on_connect=on_connect
    client.on_message=on_message 
    print("connecting to broker")
    client.connect(broker_address) #connect to broker
    client.loop_start()
    
    
    print("Publishing message to topic","house/bulbs/bulb1")
    client.publish("house/bulbs/bulb1","OFF",qos=0,retain=true)
    client.publish("house/bulbs/bulb1","ON",qos=0,retain=true)
    
    print("Publishing message to topic", "house/bulbs/bulb2")
    client.publish("house/bulbs/bulb2", "ON")
    client.publish("house/bulbs/bulb2", "ON")
    time.sleep(4) # wait
    client.loop_stop() #stop the loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多