From ea8c9a150c0d59718ba3dfd679ed1c9a1b2834f5 Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Fri, 7 Jul 2023 22:40:10 +0200 Subject: [PATCH] configure 24h format over MQTT --- include/display.h | 3 ++- include/ha.h | 9 +++++++++ include/mqtt.h | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/display.h b/include/display.h index f2ed269..60a53b0 100644 --- a/include/display.h +++ b/include/display.h @@ -21,12 +21,13 @@ namespace Display { uint8_t brightness = BRIGHTNESS_NIGHT; int currentHour = -1; int currentMin = -1; + bool hourFormat24 = false; // Create display object Adafruit_7segment clockDisplay = Adafruit_7segment(); void drawTime() { - int displayHour = hourFormat12(); + int displayHour = hourFormat24 ? hour() : hourFormat12(); int displayMinute = minute(); int displayValue = displayHour * 100 + displayMinute; diff --git a/include/ha.h b/include/ha.h index 48ba942..9b628c1 100644 --- a/include/ha.h +++ b/include/ha.h @@ -85,4 +85,13 @@ namespace Ha { jsonDoc["command_topic"] = topic; serializeJson(jsonDoc, output); } + + void buildHourFormatConfig(char(&output)[JSON_SIZE], const char* topic) { + StaticJsonDocument jsonDoc; + buildDeviceConfig(jsonDoc); + jsonDoc["name"] = "ESP Clock Format 24h"; + jsonDoc["unique_id"] = "esp_clock_format_24h"; + jsonDoc["command_topic"] = topic; + serializeJson(jsonDoc, output); + } } diff --git a/include/mqtt.h b/include/mqtt.h index dcac782..b0c4b9f 100644 --- a/include/mqtt.h +++ b/include/mqtt.h @@ -37,6 +37,7 @@ namespace Mqtt { const char* bmpTopic = "homeassistant/sensor/esp_clock/state"; const char* restartTopic = "homeassistant/button/esp_clock/restart"; const char* ledTopic = "homeassistant/switch/esp_clock/led/set"; + const char* hourFormatTopic = "homeassistant/switch/esp_clock/hour_format/set"; const char* espClockTopic = "homeassistant/+/esp_clock/#"; void connect() { @@ -78,12 +79,19 @@ namespace Mqtt { client.publish("homeassistant/switch/esp_clock/led/config", 0, true, message); } + void publishHourFormatConfig() { + char message[JSON_SIZE]; + Ha::buildHourFormatConfig(message, hourFormatTopic); + client.publish("homeassistant/switch/esp_clock/hour_format/config", 0, true, message); + } + void publishConfig() { publishTempConfig(); publishPressureConfig(); publishAltitudeConfig(); publishRestartConfig(); publishLedConfig(); + publishHourFormatConfig(); ts.deleteTask(tPublishConfig); } @@ -124,6 +132,15 @@ namespace Mqtt { digitalWrite(LED_BUILTIN, HIGH); } } + if (String{ hourFormatTopic }.equals(topic)) { + if (String{ "ON" }.equals(msg)) { + Display::hourFormat24 = true; + Display::drawTime(); + } else { + Display::hourFormat24 = false; + Display::drawTime(); + } + } } void setup() {