Как изменить уровень qos и сохранение сообщений?

Привет, у меня есть код для публикации/подписки mqtt в python. Я хочу изменить значение qos и сохранить сообщение, но я не знаю, как это сделать, потому что на данный момент значение qos всегда печатает только 0, и я хочу изменить флаг сохранения сообщения либо на true, либо на false, а не на 0. Вся помощь приветствуется .

import paho.mqtt.client as mqtt
import time
class laser(mqtt.Client):
    def on_connect(self, mqttc, obj, flags, rc):
        print("rc: "+str(rc))
        print("Subscribing to topic","microscope/light_sheet_microscope/laser")
        mqttc.subscribe("microscope/light_sheet_microscope/laser")

    def on_message(self, mqttc, 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_publish(self, mqttc, obj, mid):
        print("mid: "+str(mid))

    def on_subscribe(self, mqttc, obj, mid, granted_qos):
        print("Subscribed: "+str(mid)+" "+str(granted_qos))

    def on_log(self, mqttc, userdata, level, buf):
        print("log: ",buf)

    def run(self):
        self.connect("broker.hivemq.com", 1883, 60)

print("creating new instance")
client = laser("Laser")
client.run()

client.loop_start() #start the loop
time.sleep(2)
print("Publishing message to topic","microscope/light_sheet_microscope/laser")
client.publish("microscope/light_sheet_microscope/laser","Hello World Im a laser!")
time.sleep(2) # wait
client.loop_stop() #stop the loop

Спасибо


person Spencer Du    schedule 01.08.2019    source источник


Ответы (1)


Из документов Paho Python

ПУБЛИКАЦИЯ()

publish(topic, payload=None, qos=0, retain=False)

Это вызывает отправку сообщения брокеру, а затем от брокера всем клиентам, подписавшимся на соответствующие темы. Он принимает следующие аргументы:

  • topic тема, в которой должно быть опубликовано сообщение.
  • payload фактическое сообщение для отправки. Если не задано или установлено значение None, будет использоваться сообщение нулевой длины. Передача int или float приведет к тому, что полезная нагрузка будет преобразована в строку, представляющую это число. Если вы хотите отправить истинный int/float, используйте struct.pack() для создания необходимой полезной нагрузки.
  • qos используемый уровень качества обслуживания
  • сохранить, если установлено значение True, сообщение будет установлено как «последнее известное хорошее»/сохраненное сообщение для темы.

Чтобы установить QOS на 2 и сохранить флаг на true, измените строку публикации на следующее:

client.publish("microscope/light_sheet_microscope/laser","Hello World Im a laser!",2,True)
person hardillb    schedule 01.08.2019