From 109b7b4f98ff5fa02d37b767fc49fd1d7654fa8d Mon Sep 17 00:00:00 2001 From: Ellis Percival <flyte@failcode.co.uk> Date: Thu, 27 Jul 2017 00:22:12 +0100 Subject: [PATCH] Implement status topic and last-will functionality. #17 --- pi_mqtt_gpio/server.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py index 1a2ab6c..ce470bc 100644 --- a/pi_mqtt_gpio/server.py +++ b/pi_mqtt_gpio/server.py @@ -291,6 +291,16 @@ def init_mqtt(config, digital_outputs): _LOG.info( "Connected to the MQTT broker with protocol v%s.", config["protocol"]) + status_topic = "%s/%s" % (topic_prefix, config["status_topic"]) + client.will_set( + status_topic, + payload=config["status_payload_dead"], + qos=1, + retain=True) + _LOG.debug( + "Last will set on %r as %r.", + status_topic, + config["status_payload_dead"]) for out_conf in digital_outputs: for suffix in (SET_TOPIC, SET_ON_MS_TOPIC, SET_OFF_MS_TOPIC): topic = "%s/%s/%s/%s" % ( @@ -300,6 +310,11 @@ def init_mqtt(config, digital_outputs): suffix) client.subscribe(topic, qos=1) _LOG.info("Subscribed to topic: %r", topic) + client.publish( + status_topic, + config["status_payload_running"], + qos=1, + retain=True) elif rc == 1: _LOG.fatal( "Incorrect protocol version used to connect to MQTT broker.") @@ -486,6 +501,9 @@ if __name__ == "__main__": except KeyboardInterrupt: print("") finally: + client.publish( + "%s/%s" % (topic_prefix, config["mqtt"]["status_topic"]), + config["mqtt"]["status_payload_stopped"], qos=1, retain=True) client.disconnect() client.loop_stop() for name, gpio in GPIO_MODULES.items(): -- GitLab