From d87770d93ee1b05364c8524aa85c7458c0483cae Mon Sep 17 00:00:00 2001
From: Ellis Percival <flyte@failcode.co.uk>
Date: Sat, 17 Oct 2020 19:27:48 +0100
Subject: [PATCH] Publish initial output value. #125

---
 config.schema.yml        | 7 +++++++
 pi_mqtt_gpio/__init__.py | 4 ++++
 pi_mqtt_gpio/server.py   | 9 +++++++++
 3 files changed, 20 insertions(+)

diff --git a/config.schema.yml b/config.schema.yml
index 7feb3c4..823b0f2 100644
--- a/config.schema.yml
+++ b/config.schema.yml
@@ -275,6 +275,10 @@ digital_outputs:
         type: boolean
         required: no
         default: no
+      publish_initial:
+        type: boolean
+        required: no
+        default: no
 
 sensor_inputs:
   type: list
@@ -306,6 +310,9 @@ sensor_inputs:
         required: no
         default: 2
         min: 0
+      unit_of_measurement:
+        type: string
+        required: no
 
 stream_reads:
   type: list
diff --git a/pi_mqtt_gpio/__init__.py b/pi_mqtt_gpio/__init__.py
index f23934d..7dd2eb1 100644
--- a/pi_mqtt_gpio/__init__.py
+++ b/pi_mqtt_gpio/__init__.py
@@ -279,6 +279,10 @@ digital_outputs:
         type: boolean
         required: no
         default: no
+      publish_initial:
+        type: boolean
+        required: no
+        default: no
 
 sensor_inputs:
   type: list
diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index 4802a8f..67fd95c 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -1110,6 +1110,15 @@ 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:
-- 
GitLab