Skip to content

Commit 571e7a0

Browse files
Change in the decision-making process for reservation recognition
Before sending start transaction the status of the connector must be changed to preparing, and this makes us no longer able to determine from the status whether the connector was reserved or not.
1 parent 113bdc7 commit 571e7a0

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/chargepoint/reservation/ReservationManager.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ ocpp::types::AuthorizationStatus ReservationManager::isTransactionAllowed(unsign
102102
if (connector)
103103
{
104104
// Check if connector is reserved
105-
if (connector->status == ChargePointStatus::Reserved)
105+
if (connector->reservation_id_tag.length() > 0)
106106
{
107107
// Check if id tag match
108108
if (id_tag == connector->reservation_id_tag)
@@ -130,7 +130,7 @@ ocpp::types::AuthorizationStatus ReservationManager::isTransactionAllowed(unsign
130130
{
131131
// Check if connector 0 is reserved
132132
Connector& charge_point = m_connectors.getChargePointConnector();
133-
if (charge_point.status == ChargePointStatus::Reserved)
133+
if (charge_point.reservation_id_tag.length() > 0)
134134
{
135135
// Ensure that the module functions properly even when the gun is inserted first by the user.
136136
if (m_connectors.getConnector(connector_id)->status == ChargePointStatus::Preparing)
@@ -180,6 +180,7 @@ bool ReservationManager::handleMessage(const ocpp::messages::ReserveNowReq& requ
180180
{
181181
bool ret = false;
182182

183+
DateTime now = DateTime::now();
183184
// Get requested connector
184185
Connector* connector = m_connectors.getConnector(request.connectorId);
185186
if (connector)
@@ -227,13 +228,20 @@ bool ReservationManager::handleMessage(const ocpp::messages::ReserveNowReq& requ
227228
connector->reservation_expiry_date = request.expiryDate;
228229
response.status = ReservationStatus::Accepted;
229230

231+
if (connector->reservation_expiry_date > now)
232+
{
230233
// Update connector status and notify new status
231234
m_worker_pool.run<void>(
232235
[this, connector]
233236
{
234237
m_status_manager.updateConnectorStatus(connector->id, ChargePointStatus::Reserved);
235238
m_events_handler.reservationStarted(connector->id);
236239
});
240+
}
241+
else
242+
{
243+
response.status = ReservationStatus::Rejected;
244+
}
237245
break;
238246
}
239247

@@ -293,7 +301,7 @@ bool ReservationManager::handleMessage(const ocpp::messages::CancelReservationRe
293301
response.status = CancelReservationStatus::Rejected;
294302
for (const Connector* connector : m_connectors.getConnectors())
295303
{
296-
if ((connector->status == ChargePointStatus::Reserved) && (connector->reservation_id == request.reservationId))
304+
if ((connector->reservation_id_tag.length() > 0) && (connector->reservation_id == request.reservationId))
297305
{
298306
// Cancel reservation
299307
m_worker_pool.run<void>([this, connector_id = connector->id] { endReservation(connector_id, true); });
@@ -316,7 +324,7 @@ void ReservationManager::checkExpiries()
316324
// Check reservations
317325
for (const Connector* connector : m_connectors.getConnectors())
318326
{
319-
if ((connector->status == ChargePointStatus::Reserved) && (connector->reservation_expiry_date <= now))
327+
if ((connector->reservation_id_tag.length() > 0) && (connector->reservation_expiry_date <= now))
320328
{
321329
// End reservation
322330
m_worker_pool.run<void>(std::bind(&ReservationManager::endReservation, this, connector->id, false));

src/chargepoint/transaction/TransactionManager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ ocpp::types::AuthorizationStatus TransactionManager::startTransaction(unsigned i
9898
start_transaction_req.timestamp = DateTime::now();
9999

100100
// Check reservations
101-
if (connector->status == ChargePointStatus::Reserved)
101+
if (connector->reservation_id_tag.length() > 0)
102102
{
103103
// Fill reservation id
104104
start_transaction_req.reservationId = connector->reservation_id;
@@ -112,7 +112,7 @@ ocpp::types::AuthorizationStatus TransactionManager::startTransaction(unsigned i
112112
if (m_ocpp_config.reserveConnectorZeroSupported())
113113
{
114114
Connector& charge_point = m_connectors.getChargePointConnector();
115-
if (charge_point.status == ChargePointStatus::Reserved)
115+
if (charge_point.reservation_id_tag.length() > 0)
116116
{
117117
// Check if this transaction can be used for the charge point reservation
118118
if (m_reservation_manager.isTransactionAllowed(Connectors::CONNECTOR_ID_CHARGE_POINT, id_tag) ==

0 commit comments

Comments
 (0)