From 482cda6898faffb8e87ba89ea1d805aeefb84b06 Mon Sep 17 00:00:00 2001 From: marsman7 Date: Sun, 7 Apr 2024 21:03:59 +0200 Subject: [PATCH] fix: Custom Group Topic name does not work issues #697 https://github.com/HASwitchPlate/openHASP/issues/697 --- src/mqtt/hasp_mqtt_esp.cpp | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/mqtt/hasp_mqtt_esp.cpp b/src/mqtt/hasp_mqtt_esp.cpp index 9fbac1e0f..71e8eb445 100644 --- a/src/mqtt/hasp_mqtt_esp.cpp +++ b/src/mqtt/hasp_mqtt_esp.cpp @@ -313,6 +313,7 @@ static int mqttSubscribeTo(String topic) return err; } +/* String mqttGetTopic(Preferences preferences, String subtopic, String key, String value, bool add_slash) { String topic = preferences.getString(key.c_str(), value); @@ -327,6 +328,20 @@ String mqttGetTopic(Preferences preferences, String subtopic, String key, String } return topic; } +*/ + +void mqttParseTopic(String *topic, String subtopic, bool add_slash) +{ + + topic->replace(F("%hostname%"), haspDevice.get_hostname()); + topic->replace(F("%hwid%"), haspDevice.get_hardware_id()); + topic->replace(F("%topic%"), subtopic); + topic->replace(F("%prefix%"), MQTT_PREFIX); + + if(add_slash && !topic->endsWith("/")) { + *topic += "/"; + } +} void onMqttConnect(esp_mqtt_client_handle_t client) { @@ -513,23 +528,29 @@ void mqttStart() nvsOldGroup += "/%topic%"; subtopic = F(MQTT_TOPIC_COMMAND); - mqttNodeCommandTopic = - mqttGetTopic(preferences, subtopic, FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC, false); - mqttGroupCommandTopic = mqttGetTopic(preferences, subtopic, FP_CONFIG_GROUP_TOPIC, nvsOldGroup.c_str(), false); + mqttNodeCommandTopic = preferences.getString(FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC); + mqttParseTopic(&mqttNodeCommandTopic, subtopic, false); + mqttGroupCommandTopic = preferences.getString(FP_CONFIG_GROUP_TOPIC, nvsOldGroup.c_str()); + mqttParseTopic(&mqttGroupCommandTopic, subtopic, false); + #ifdef HASP_USE_BROADCAST - mqttBroadcastCommandTopic = - mqttGetTopic(preferences, subtopic, FP_CONFIG_BROADCAST_TOPIC, MQTT_DEFAULT_BROADCAST_TOPIC, false); + mqttBroadcastCommandTopic = preferences.getString(FP_CONFIG_BROADCAST_TOPIC, MQTT_DEFAULT_BROADCAST_TOPIC); + mqttParseTopic(&mqttBroadcastCommandTopic, subtopic, false); + #endif subtopic = F(MQTT_TOPIC_STATE); - mqttNodeStateTopic = mqttGetTopic(preferences, subtopic, FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC, true); + mqttNodeStateTopic = preferences.getString(FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC); + mqttParseTopic(&mqttNodeStateTopic, subtopic, true); subtopic = F(MQTT_TOPIC_LWT); - mqttNodeLwtTopic = mqttGetTopic(preferences, subtopic, FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC, false); + mqttNodeLwtTopic = preferences.getString(FP_CONFIG_NODE_TOPIC, MQTT_DEFAULT_NODE_TOPIC); + mqttParseTopic(&mqttNodeLwtTopic, subtopic, false); LOG_WARNING(TAG_MQTT, mqttNodeLwtTopic.c_str()); subtopic = F(MQTT_TOPIC_LWT); - mqttHassLwtTopic = mqttGetTopic(preferences, subtopic, FP_CONFIG_HASS_TOPIC, MQTT_DEFAULT_HASS_TOPIC, false); + mqttHassLwtTopic = preferences.getString(FP_CONFIG_HASS_TOPIC, MQTT_DEFAULT_HASS_TOPIC); + mqttParseTopic(&mqttHassLwtTopic, subtopic, false); LOG_WARNING(TAG_MQTT, mqttNodeLwtTopic.c_str()); preferences.end();