diff --git a/src/messages/StopTransaction.cpp b/src/messages/StopTransaction.cpp index 5b51e810..d25ffd50 100644 --- a/src/messages/StopTransaction.cpp +++ b/src/messages/StopTransaction.cpp @@ -56,7 +56,10 @@ bool StopTransactionReqConverter::fromJson(const rapidjson::Value& json, extract(json, "meterStop", data.meterStop); bool ret = extract(json, "timestamp", data.timestamp, error_message); extract(json, "transactionId", data.transactionId); - data.reason = ReasonHelper.fromString(json["reason"].GetString()); + if (json.HasMember("reason")) + { + data.reason = ReasonHelper.fromString(json["reason"].GetString()); + } if (json.HasMember("transactionData")) { const rapidjson::Value& transactionData = json["transactionData"]; @@ -83,7 +86,10 @@ bool StopTransactionReqConverter::toJson(const StopTransactionReq& data, rapidjs fill(json, "meterStop", data.meterStop); fill(json, "timestamp", data.timestamp); fill(json, "transactionId", data.transactionId); - fill(json, "reason", ReasonHelper.toString(data.reason)); + if (data.reason.isSet()) + { + fill(json, "reason", ReasonHelper.toString(data.reason)); + } if (!data.transactionData.empty()) { rapidjson::Value transactionData(rapidjson::kArrayType); diff --git a/src/messages/StopTransaction.h b/src/messages/StopTransaction.h index cc855d02..1040098a 100644 --- a/src/messages/StopTransaction.h +++ b/src/messages/StopTransaction.h @@ -51,7 +51,7 @@ struct StopTransactionReq int transactionId; /** @brief Optional. This contains the reason why the transaction was stopped. MAY only be omitted when the Reason is "Local". */ - ocpp::types::Reason reason; + ocpp::types::Optional reason; /** @brief Optional. This contains transaction usage details relevant for billing purposes */ std::vector transactionData; };