static void publishTimerHandler ( le_timer_Ref_t timer ) { if (!globals.connected) { LE_WARN("Not publishing because MQTT is not connected"); return; } std::ostringstream jsonStream; jsonStream << "{"; auto it = globals.data.cbegin(); while (it != globals.data.cend()) { jsonStream << escapeStringForJSON(it->first) << ":" << it->second.encodeAsJSON(); it++; if (it != globals.data.cend()) { jsonStream << ","; } } jsonStream << "}"; std::string s = jsonStream.str(); LE_INFO("About to publish: %s", s.c_str()); mqtt_Publish( globals.publishTopic.c_str(), reinterpret_cast<const uint8_t*>(s.c_str()), s.length()); }
std::string DataValue::encodeAsJSON(void) const { std::string json; switch (this->type) { case DATAROUTER_BOOLEAN: json = (this->value.b) ? "true" : "false"; break; case DATAROUTER_INTEGER: json = std::to_string(this->value.i); break; case DATAROUTER_FLOAT: json = std::to_string(this->value.f); break; case DATAROUTER_STRING: json = escapeStringForJSON(this->value.s); break; default: LE_FATAL("Value has unknown type"); break; } return json; }
void doubleQuoteStringForJSON(const String& str, StringBuilder* dst) { dst->append('"'); escapeStringForJSON(str, dst); dst->append('"'); }