Enhance DaliCloudBridge: add JSON escaping function and buildRegisterPayload for improved payload formatting
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
+45
-1
@@ -12,6 +12,34 @@ extern "C" {
|
||||
namespace {
|
||||
constexpr const char* kTag = "dali_cloud_bridge";
|
||||
|
||||
std::string jsonEscape(const std::string& value) {
|
||||
std::string out;
|
||||
out.reserve(value.size() + 8);
|
||||
for (char ch : value) {
|
||||
switch (ch) {
|
||||
case '\\':
|
||||
out += "\\\\";
|
||||
break;
|
||||
case '"':
|
||||
out += "\\\"";
|
||||
break;
|
||||
case '\n':
|
||||
out += "\\n";
|
||||
break;
|
||||
case '\r':
|
||||
out += "\\r";
|
||||
break;
|
||||
case '\t':
|
||||
out += "\\t";
|
||||
break;
|
||||
default:
|
||||
out.push_back(ch);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string toString(const cJSON* item) {
|
||||
if (item == nullptr) {
|
||||
return "";
|
||||
@@ -180,6 +208,22 @@ bool DaliCloudBridge::publishRegister(const std::string& payloadJson) {
|
||||
return publishJSON(topicRegister(), payloadJson);
|
||||
}
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
std::string buildRegisterPayload(const GatewayCloudConfig& config) {
|
||||
const std::string deviceID = jsonEscape(config.deviceID);
|
||||
std::ostringstream oss;
|
||||
oss << "{\"type\":\"register\","
|
||||
<< "\"status\":\"online\","
|
||||
<< "\"device_id\":\"" << deviceID << "\","
|
||||
<< "\"base_mac\":\"" << deviceID << "\","
|
||||
<< "\"identifier\":\"" << deviceID << "\","
|
||||
<< "\"identifier_type\":\"mac\","
|
||||
<< "\"gateway_type\":\"dali_cpp\","
|
||||
<< "\"topic_prefix\":\"" << jsonEscape(config.topicPrefix) << "\"}";
|
||||
return oss.str();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool DaliCloudBridge::publishJSON(const std::string& topic, const std::string& payloadJson) {
|
||||
#ifdef ESP_PLATFORM
|
||||
if (client_ == nullptr || !connected_.load()) {
|
||||
@@ -318,7 +362,7 @@ void DaliCloudBridge::onMqttEvent(esp_mqtt_event_handle_t event) {
|
||||
ESP_LOGI(kTag, "MQTT connected");
|
||||
esp_mqtt_client_subscribe(client_, topicDown().c_str(), config_.qos);
|
||||
publishStatus("online");
|
||||
publishRegister("{\"type\":\"register\",\"status\":\"online\"}");
|
||||
publishRegister(buildRegisterPayload(config_));
|
||||
break;
|
||||
}
|
||||
case MQTT_EVENT_DISCONNECTED:
|
||||
|
||||
Reference in New Issue
Block a user