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
This commit is contained in:
Florian authored and GitHub committed 2019-12-14 19:17:09 +01:00
1 parent 3948a14db9
commit ae33ea7458
3 files changed
+18 -23

No files matched your search

+1 -1
View File
@@ -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
+1 -16
View File
@@ -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"));
+16 -6
View File
@@ -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)