diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py index 1a2ab6c5451354f3b1231f90c30098c00fb77db5..ce470bc4caca1a025e7977ee592fba5a0e9c7f6a 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():