From f5d95cc0f56b87e23bc811854949ecdb10935414 Mon Sep 17 00:00:00 2001 From: Mahdi Dadashi Date: Wed, 6 Mar 2024 10:37:45 +0330 Subject: [PATCH 1/2] send info in StatusNotification with no error ability to send info and vendor id and error code in StatusNotification with no NoError if any of them are set --- src/messages/StatusNotification.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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; } From 1668756341e9af1f52abffb02c20c7001f2b984b Mon Sep 17 00:00:00 2001 From: Mahdi Dadashi Date: Wed, 6 Mar 2024 10:42:38 +0330 Subject: [PATCH 2/2] limit value Accepts at most one digit fraction according to standard ,limit value is "Required. Charging rate limit during the schedule period, in the applicable chargingRateUnit, for example in Amperes or Watts. Accepts at most one digit fraction (e.g. 8.1)." --- src/messages/IMessageConverter.h | 11 ++++++++ .../types/ChargingScheduleConverter.cpp | 25 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) 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/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); }