diff --git a/src/messages/IMessageConverter.h b/src/messages/IMessageConverter.h index 07363963..0636aaa1 100644 --- a/src/messages/IMessageConverter.h +++ b/src/messages/IMessageConverter.h @@ -94,6 +94,17 @@ class IMessageConverter json.AddMember(rapidjson::StringRef(name), rapidjson::Value(value), *allocator); } + /** + * @brief Helper function to fill a floating point value in a JSON object + * @param json JSON object to fill + * @param field Name of the field to fill + * @param value Floating point value to fill + */ + void fill(rapidjson::Value& json, const char* name, const double value) + { + json.AddMember(rapidjson::StringRef(name), rapidjson::Value(value), *allocator); + } + /** * @brief Helper function to fill a string value in a JSON object * @param json JSON object to fill diff --git a/src/messages/StatusNotification.cpp b/src/messages/StatusNotification.cpp index b0b011d8..6f426b08 100644 --- a/src/messages/StatusNotification.cpp +++ b/src/messages/StatusNotification.cpp @@ -71,8 +71,8 @@ bool StatusNotificationReqConverter::fromJson(const rapidjson::Value& json, extract(json, "info", data.info); data.status = ChargePointStatusHelper.fromString(json["status"].GetString()); ret = ret && extract(json, "timestamp", data.timestamp, error_message); - extract(json, "info", data.vendorId); - extract(json, "info", data.vendorErrorCode); + extract(json, "vendorId", data.vendorId); + extract(json, "vendorErrorCode", data.vendorErrorCode); if (!ret) { error_code = ocpp::rpc::IRpc::RPC_ERROR_TYPE_CONSTRAINT_VIOLATION; @@ -87,12 +87,15 @@ bool StatusNotificationReqConverter::toJson(const StatusNotificationReq& data, r fill(json, "errorCode", ChargePointErrorCodeHelper.toString(data.errorCode)); fill(json, "status", ChargePointStatusHelper.toString(data.status)); fill(json, "timestamp", data.timestamp); - if (data.errorCode != ChargePointErrorCode::NoError) - { - fill(json, "info", data.info); - fill(json, "vendorId", data.vendorId); - fill(json, "vendorErrorCode", data.vendorErrorCode); - } + //if (data.errorCode != ChargePointErrorCode::NoError) + //{ + if(data.info.isSet()) + fill(json, "info", data.info); + if(data.vendorId.isSet()) + fill(json, "vendorId", data.vendorId); + if(data.vendorErrorCode.isSet()) + fill(json, "vendorErrorCode", data.vendorErrorCode); + // } return true; } diff --git a/src/messages/types/ChargingScheduleConverter.cpp b/src/messages/types/ChargingScheduleConverter.cpp index 8df8705f..7592d374 100644 --- a/src/messages/types/ChargingScheduleConverter.cpp +++ b/src/messages/types/ChargingScheduleConverter.cpp @@ -67,14 +67,35 @@ bool ChargingScheduleConverter::fromJson(const rapidjson::Value& json, return ret; } + +double getDecimal(float data) +{ + std::stringstream m_stringstream; + std::string m_string; + + m_stringstream.str(""); + m_stringstream.clear(); + m_stringstream << std::fixed << std::setprecision(1) << data; + m_string = m_stringstream.str(); + + double res = std::stod(m_string); + + return res; +} + /** @copydoc bool IMessageConverter::toJson(const ocpp::types::ChargingSchedule&, * rapidjson::Document&) */ bool ChargingScheduleConverter::toJson(const ocpp::types::ChargingSchedule& data, rapidjson::Document& json) { + std::stringstream m_stringstream; + std::string m_string; + + fill(json, "startSchedule", data.startSchedule); fill(json, "duration", data.duration); fill(json, "chargingRateUnit", ChargingRateUnitTypeHelper.toString(data.chargingRateUnit)); - fill(json, "minChargingRate", data.minChargingRate); + fill(json, "minChargingRate", getDecimal(data.minChargingRate)); + rapidjson::Value chargingSchedulePeriod(rapidjson::kArrayType); for (const ChargingSchedulePeriod& schedule_period : data.chargingSchedulePeriod) @@ -82,7 +103,7 @@ bool ChargingScheduleConverter::toJson(const ocpp::types::ChargingSchedule& data rapidjson::Document value; value.Parse("{}"); fill(value, "startPeriod", schedule_period.startPeriod); - fill(value, "limit", schedule_period.limit); + fill(value, "limit", getDecimal(schedule_period.limit)); fill(value, "numberPhases", schedule_period.numberPhases); chargingSchedulePeriod.PushBack(value.Move(), *allocator); }