Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/messages/IMessageConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 11 additions & 8 deletions src/messages/StatusNotification.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down
25 changes: 23 additions & 2 deletions src/messages/types/ChargingScheduleConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,22 +67,43 @@ 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<ocpp::types::ChargingSchedule>::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)
{
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);
}
Expand Down