Skip to content

Commit ecf6f1e

Browse files
author
Cédric Jimenez
committed
[chargepoint] Handle change availability requests
1 parent ae7a9db commit ecf6f1e

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

src/chargepoint/ConnectorData.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ struct ConnectorData
7575
std::chrono::steady_clock::time_point preparing_start;
7676
/** @brief Indicate that a fault occured */
7777
bool fault_pending;
78+
/** @brief Indicate that an unavailable request has be scheduled */
79+
bool unavailable_pending;
7880
/** @brief Meter */
7981
MeterSimulator* meter;
8082
};

src/chargepoint/SimulatedChargePoint.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ void SimulatedChargePoint::loop(MqttManager& mqtt,
185185
// Clear any id tag
186186
connector.id_tag = "";
187187
connector.parent_id_tag = "";
188+
mqtt.resetIdTagPending(connector.id);
188189
}
189190
break;
190191

@@ -235,6 +236,11 @@ void SimulatedChargePoint::loop(MqttManager& mqtt,
235236
{
236237
charge_point.statusNotification(connector.id, ChargePointStatus::Faulted);
237238
}
239+
// If unavailable request pending => Unavailable
240+
else if (connector.unavailable_pending)
241+
{
242+
charge_point.statusNotification(connector.id, ChargePointStatus::Unavailable);
243+
}
238244
else
239245
{
240246
// Stay in current state
@@ -411,6 +417,11 @@ void SimulatedChargePoint::loop(MqttManager& mqtt,
411417
{
412418
charge_point.statusNotification(connector.id, ChargePointStatus::Faulted);
413419
}
420+
// If unavailable request pending => Unavailable
421+
else if (connector.unavailable_pending)
422+
{
423+
charge_point.statusNotification(connector.id, ChargePointStatus::Unavailable);
424+
}
414425
else
415426
{
416427
// Stay in current state
@@ -431,6 +442,15 @@ void SimulatedChargePoint::loop(MqttManager& mqtt,
431442
{
432443
charge_point.statusNotification(connector.id, ChargePointStatus::Available);
433444
}
445+
// If unavailable request pending => Unavailable
446+
else if (connector.unavailable_pending)
447+
{
448+
charge_point.statusNotification(connector.id, ChargePointStatus::Unavailable);
449+
}
450+
else
451+
{
452+
// Stay in current state
453+
}
434454
}
435455
break;
436456

src/chargepoint/ocpp/ChargePointEventsHandler.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,24 @@ void ChargePointEventsHandler::datetimeReceived(const ocpp::types::DateTime& dat
8989
ocpp::types::AvailabilityStatus ChargePointEventsHandler::changeAvailabilityRequested(unsigned int connector_id,
9090
ocpp::types::AvailabilityType availability)
9191
{
92+
AvailabilityStatus ret = AvailabilityStatus::Accepted;
9293
cout << "Change availability requested : " << connector_id << " - " << AvailabilityTypeHelper.toString(availability) << endl;
93-
return AvailabilityStatus::Accepted;
94+
ConnectorData& connector = m_connectors->at(connector_id - 1u);
95+
if (availability == AvailabilityType::Inoperative)
96+
{
97+
if ((connector.status != ChargePointStatus::Available) && (connector.status != ChargePointStatus::Reserved) &&
98+
(connector.status != ChargePointStatus::Faulted))
99+
{
100+
connector.unavailable_pending = true;
101+
ret = AvailabilityStatus::Scheduled;
102+
}
103+
}
104+
else
105+
{
106+
connector.unavailable_pending = false;
107+
}
108+
109+
return ret;
94110
}
95111

96112
/** @copydoc unsigned int IChargePointEventsHandler::getTxStartStopMeterValue(unsigned int) */

0 commit comments

Comments
 (0)