From ae33ea7458249cab57dd582f13490a6b7241e732 Mon Sep 17 00:00:00 2001 From: Florian <1technophile@users.noreply.github.com> Date: Sat, 14 Dec 2019 19:17:09 +0100 Subject: [PATCH] publish discovery once at each MQTT connection with retain flag set true (#507) * publish discovery once at each MQTT connection with retain flag set to true #448 --- main/ZgatewayBT.ino | 2 +- main/ZmqttDiscovery.ino | 17 +---------------- main/main.ino | 22 ++++++++++++++++------ 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index c01f024..46e38b6 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -1173,7 +1173,7 @@ void haRoomPresence(JsonObject &HomePresence) trc(F("BLE DISTANCE :")); trc(distance); String topic = String(Base_Topic) + "home_presence/" + String(gateway_name); - pub_custom_topic((char *)topic.c_str(), HomePresence); + pub_custom_topic((char *)topic.c_str(), HomePresence, false); } #endif diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index 352664e..6f93af9 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -113,7 +113,7 @@ void createDiscovery(char *sensor_type, sensor.set("device", device); //device sensor is connected to } String topic = String(discovery_Topic) + "/" + String(sensor_type) + "/" + String(unique_id) + "/config"; - pub_custom_topic((char *)topic.c_str(), sensor); + pub_custom_topic((char *)topic.c_str(), sensor, true); } void pubMqttDiscovery() @@ -323,21 +323,6 @@ void pubMqttDiscovery() 0, "", "", true, ""); #endif -#ifdef ZgatewayRF315 - // Sensor to display RF received value - trc(F("gatewayRF315Discovery")); - char *gatewayRF315[8] = {"sensor", "gatewayRF315", "", "", "{{ value_json.value }}", "", "", ""}; - //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement - - trc(F("CreateDiscoverySensor")); - trc(gatewayRF315[1]); - createDiscovery(gatewayRF315[0], - subjectRF315toMQTT, gatewayRF315[1], (char *)getUniqueId(gatewayRF315[1], gatewayRF315[2]).c_str(), - will_Topic, gatewayRF315[3], gatewayRF315[4], - gatewayRF315[5], gatewayRF315[6], gatewayRF315[7], - 0, "", "", true, ""); -#endif - #ifdef ZgatewayRFM69 // Sensor to display RF received value trc(F("gatewayRFM69Discovery")); diff --git a/main/main.ino b/main/main.ino index 6b51c2f..6e600d2 100644 --- a/main/main.ino +++ b/main/main.ino @@ -385,7 +385,7 @@ void pub(char *topicori, char *payload) } } -void pub_custom_topic(char *topicori, JsonObject &data) +void pub_custom_topic(char *topicori, JsonObject &data, boolean retain) { if (client.connected()) { @@ -394,7 +394,7 @@ void pub_custom_topic(char *topicori, JsonObject &data) trc(topicori); data.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer)); trc(JSONmessageBuffer); - pubMQTT(topicori, JSONmessageBuffer); + pubMQTT(topicori, JSONmessageBuffer, retain); } else { @@ -402,14 +402,20 @@ void pub_custom_topic(char *topicori, JsonObject &data) } } -void pubMQTT(char *topic, char *payload) +// Low level MQTT functions +void pubMQTT(char * topic, char * payload) { - client.publish(topic, payload); + client.publish(topic, payload); } -void pubMQTT(String topic, char *payload) +void pubMQTT(char * topicori, char * payload, bool retainFlag) { - client.publish((char *)topic.c_str(), payload); + client.publish(topicori, payload, retainFlag); +} + +void pubMQTT(String topic, char * payload) +{ + client.publish((char *)topic.c_str(),payload); } void pubMQTT(char *topic, unsigned long payload) @@ -1085,6 +1091,10 @@ void loop() // MQTT loop connectedOnce = true; lastMQTTReconnectAttempt = 0; + + #ifdef ZmqttDiscovery + if(!connectedOnce) pubMqttDiscovery(); // at first connection we publish the discovery payloads + #endif client.loop(); #if defined(ESP8266) || defined(ESP32)