GPIO Raspberry Pi pin поддерживать последнее состояние при прерывании сценария и перезапустить его

Я работаю с MQTT и GPIO, и я заметил, что pin поддерживают последнее состояние, как память, я делаю пример это мой сценарий:

#!/usr/bin/python3

#required libraries
import sys                                 
import ssl
import paho.mqtt.client as mqtt
import RPi.GPIO as gpio
import json
from time import sleep

try:

    ledPin = 25
    gpio.setmode(gpio.BCM)
    gpio.setup(ledPin, gpio.OUT)

    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("topic/led_switch",1)

    def on_message(client, userdata, msg):

        json_data = msg.payload.decode('utf-8')

        print("Message received: "+json_data)

        parsed_json = json.loads(json_data)

        if "on" in parsed_json:
            gpio.output(ledPin, gpio.HIGH)
        elif "off" in parsed_json:
            gpio.output(ledPin, gpio.LOW)


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


    mqttc = mqtt.Client(client_id="RaspberryPi_Sub", clean_session=True)

    mqttc.on_connect = on_connect
    mqttc.on_message = on_message
    mqttc.on_subscribe = on_subscribe



    mqttc.connect("...my_server", port=8883)

    mqttc.loop_forever()

except KeyboardInterrupt:
    pass
finally:
    gpio.cleanup()

если я останавливаю сценарий с CTRL+C, и светодиод был, например, высоким, когда я начинаю сценарий снова LED start HIGH, но он должен начинаться с низкого состояния, viceversa если я останавливаюсь, когда низкий, а затем перезапустить низкий, есть идеи?

1 ответ

  1. Если вы хотите, чтобы клиент эффективно запомнил последнее состояние при перезапуске, то следует опубликовать управляющие сообщения с сохраненным флагом true.

    Это означает, что брокер доставит клиенту последнее опубликованное сообщение при подписке.

    Это то, что должно быть установлено в клиенте публикации, а не подписчике.