From cf0c0063ed772a7679871a9739d1f755efcccbc4 Mon Sep 17 00:00:00 2001
From: Ellis Percival <flyte@failcode.co.uk>
Date: Sun, 18 Oct 2020 16:15:37 +0100
Subject: [PATCH] Move initial state publishing to after MQTT connection

---
 config.stdio.yml       |  2 ++
 pi_mqtt_gpio/server.py | 20 +++++++++++---------
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/config.stdio.yml b/config.stdio.yml
index 329347a..da8f855 100644
--- a/config.stdio.yml
+++ b/config.stdio.yml
@@ -26,3 +26,5 @@ digital_outputs:
     pin: 20
     on_payload: "ON"
     off_payload: "OFF"
+    publish_initial: yes
+    initial: high
diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index 67fd95c..c448af3 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -1110,15 +1110,6 @@ def main(args):
 
     for out_conf in digital_outputs:
         initialise_digital_output(out_conf, GPIO_MODULES[out_conf["module"]])
-        # If configured to do so, publish the initial states of the outputs
-        initial_setting = out_conf.get("initial")
-        if initial_setting is not None and out_conf.get("publish_initial", False):
-            payload = out_conf["on_payload" if initial_setting else "off_payload"]
-            client.publish(
-                "%s/%s/%s" % (topic_prefix, OUTPUT_TOPIC, out_conf["name"]),
-                retain=out_conf["retain"],
-                payload=payload,
-            )
 
     for sens_conf in sensor_inputs:
         try:
@@ -1172,6 +1163,17 @@ def main(args):
         sys.exit(1)
     client.loop_start()
 
+    for out_conf in digital_outputs:
+        # If configured to do so, publish the initial states of the outputs
+        initial_setting = out_conf.get("initial")
+        if initial_setting is not None and out_conf.get("publish_initial", False):
+            payload = out_conf["on_payload" if initial_setting else "off_payload"]
+            client.publish(
+                "%s/%s/%s" % (topic_prefix, OUTPUT_TOPIC, out_conf["name"]),
+                retain=out_conf["retain"],
+                payload=payload,
+            )
+
     scheduler = Scheduler()
 
     try:
-- 
GitLab