From 7e89024d2ee305294a97e8da32b4a8fb5bcfb47a Mon Sep 17 00:00:00 2001 From: Indu Prakash Date: Sun, 4 Sep 2022 20:48:05 -0500 Subject: [PATCH] Added flags to API, sending retain flag --- src/httpserver/http_fns.c | 4 ++-- src/mqtt/new_mqtt.c | 13 ++++++++----- src/mqtt/new_mqtt.h | 5 +++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index ccf0df3c8..133305fdd 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -1284,7 +1284,7 @@ int http_fn_ha_discovery(http_request_t *request) { for(i = 0; i < CHANNEL_MAX; i++) { if(h_isChannelRelay(i)) { HassDeviceInfo *dev_info = hass_init_device_info(ENTITY_RELAY, i, "1", "0"); - MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info)); + MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); hass_free_device_info(dev_info); } } @@ -1304,7 +1304,7 @@ int http_fn_ha_discovery(http_request_t *request) { sprintf(tmp,"%s/%i/set",baseName,i); cJSON_AddStringToObject(dev_info->root, "bri_cmd_t", tmp); //brightness_command_topic - MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info)); + MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); hass_free_device_info(dev_info); } } diff --git a/src/mqtt/new_mqtt.c b/src/mqtt/new_mqtt.c index 68773bd0f..d6125cf27 100644 --- a/src/mqtt/new_mqtt.c +++ b/src/mqtt/new_mqtt.c @@ -432,7 +432,7 @@ static OBK_Publish_Result MQTT_PublishTopicToClient(mqtt_client_t *client, const char *pub_topic = (char *)os_malloc(strlen(sTopic) + 1 + strlen(sChannel) + 5 + 1); sprintf(pub_topic, "%s/%s%s", sTopic, sChannel, (appendGet == true ? "/get" : "")); - addLogAdv(LOG_INFO,LOG_FEATURE_MQTT,"Publishing to %s",pub_topic); + addLogAdv(LOG_INFO,LOG_FEATURE_MQTT,"Publishing to %s retain=%i",pub_topic, retain); err = mqtt_publish(client, pub_topic, sVal, strlen(sVal), qos, retain, mqtt_pub_request_cb, 0); os_free(pub_topic); @@ -462,10 +462,11 @@ static OBK_Publish_Result MQTT_PublishMain(mqtt_client_t *client, const char *sC /// @param sTopic /// @param sChannel /// @param sVal +/// @param flags /// @return -OBK_Publish_Result MQTT_Publish(char *sTopic, char *sChannel, char *sVal) +OBK_Publish_Result MQTT_Publish(char *sTopic, char *sChannel, char *sVal, int flags) { - return MQTT_PublishTopicToClient(mqtt_client, sTopic, sChannel, sVal, 0, false); + return MQTT_PublishTopicToClient(mqtt_client, sTopic, sChannel, sVal, flags, false); } void MQTT_OBK_Printf( char *s) { @@ -965,13 +966,15 @@ char *_strdup(char *src) { /// @param topic /// @param channel /// @param value -void MQTT_QueuePublish(char *topic, char *channel, char *value){ +/// @param flags +void MQTT_QueuePublish(char *topic, char *channel, char *value, int flags){ MqttPublishItem_t *newItem = os_malloc(sizeof(MqttPublishItem_t)); //Make copies of all string values. Using built in strdup was causing a crash so I create a local version. newItem->topic = _strdup(topic); newItem->channel = _strdup(channel); newItem->value = _strdup(value); + newItem->flags = flags; newItem->next = NULL; if (g_MqttPublishItem == NULL){ @@ -1000,7 +1003,7 @@ OBK_Publish_Result PublishQueuedItem(){ return result; } - result = MQTT_PublishTopicToClient(mqtt_client, head->topic, head->channel, head->value, 0, false); + result = MQTT_PublishTopicToClient(mqtt_client, head->topic, head->channel, head->value, head->flags, false); g_MqttPublishItem = head->next; os_free(head->topic); diff --git a/src/mqtt/new_mqtt.h b/src/mqtt/new_mqtt.h index a910adfcb..c8b6da23d 100644 --- a/src/mqtt/new_mqtt.h +++ b/src/mqtt/new_mqtt.h @@ -45,6 +45,7 @@ typedef struct MqttPublishItem char *topic; char *channel; char *value; + int flags; struct MqttPublishItem *next; } MqttPublishItem_t; @@ -69,8 +70,8 @@ OBK_Publish_Result MQTT_PublishMain_StringInt(const char *sChannel, int val); OBK_Publish_Result MQTT_PublishMain_StringString(const char *sChannel, const char *valueStr, int flags); OBK_Publish_Result MQTT_ChannelChangeCallback(int channel, int iVal); void MQTT_PublishOnlyDeviceChannelsIfPossible(); -void MQTT_QueuePublish(char *topic, char *channel, char *value); -OBK_Publish_Result MQTT_Publish(char *sTopic, char *sChannel, char *value); +void MQTT_QueuePublish(char *topic, char *channel, char *value, int flags); +OBK_Publish_Result MQTT_Publish(char *sTopic, char *sChannel, char *value, int flags); #endif // __NEW_MQTT_H__