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:
Tony
2026-05-27 07:17:42 +08:00
parent 597952a75a
commit 2d100ec7ed
+45 -1
View File
@@ -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: