@@ -96,11 +96,14 @@ ChargePointImpl::ChargePointImpl(const std::string& config, const fs::path& shar
96
96
this ->v2g_certificate_timer ->interval (V2G_CERTIFICATE_TIMER_INTERVAL);
97
97
});
98
98
99
- this ->status = std::make_unique<ChargePointStates>(
100
- [this ](int32_t connector, ChargePointErrorCode errorCode, ChargePointStatus status) {
99
+ this ->status =
100
+ std::make_unique<ChargePointStates>([this ](const int32_t connector, const ChargePointErrorCode errorCode,
101
+ const ChargePointStatus status, const ocpp::DateTime& timestamp) {
101
102
this ->status_notification_timers .at (connector)->stop ();
102
103
this ->status_notification_timers .at (connector)->timeout (
103
- [this , connector, errorCode, status]() { this ->status_notification (connector, errorCode, status); },
104
+ [this , connector, errorCode, status, timestamp]() {
105
+ this ->status_notification (connector, errorCode, status, timestamp);
106
+ },
104
107
std::chrono::seconds (this ->configuration ->getMinimumStatusDuration ().value_or (0 )));
105
108
});
106
109
@@ -824,7 +827,7 @@ void ChargePointImpl::change_all_connectors_to_unavailable_for_firmware_update()
824
827
825
828
for (const auto & [connector, availability_status] : connector_availability_status) {
826
829
if (connector == 0 ) {
827
- this ->status ->submit_event (0 , FSMEvent::ChangeAvailabilityToUnavailable);
830
+ this ->status ->submit_event (0 , FSMEvent::ChangeAvailabilityToUnavailable, ocpp::DateTime () );
828
831
} else if (this ->disable_evse_callback != nullptr and availability_status == AvailabilityStatus::Accepted) {
829
832
this ->disable_evse_callback (connector);
830
833
}
@@ -903,7 +906,8 @@ void ChargePointImpl::connected_callback() {
903
906
// according to spec, a charge point should not send a BootNotification after a reconnect
904
907
// still we send StatusNotification.req for all connectors after a reconnect
905
908
for (int32_t connector = 0 ; connector <= this ->configuration ->getNumberOfConnectors (); connector++) {
906
- this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector));
909
+ this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector),
910
+ ocpp::DateTime ());
907
911
}
908
912
break ;
909
913
}
@@ -1161,7 +1165,8 @@ void ChargePointImpl::handleBootNotificationResponse(ocpp::CallResult<BootNotifi
1161
1165
1162
1166
// send initial StatusNotification.req
1163
1167
for (int32_t connector = 0 ; connector <= this ->configuration ->getNumberOfConnectors (); connector++) {
1164
- this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector));
1168
+ this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector),
1169
+ ocpp::DateTime ());
1165
1170
}
1166
1171
1167
1172
this ->message_queue ->get_transaction_messages_from_db ();
@@ -1259,14 +1264,14 @@ void ChargePointImpl::handleChangeAvailabilityRequest(ocpp::Call<ChangeAvailabil
1259
1264
this ->database_handler ->insert_or_update_connector_availability (connector, call.msg .type );
1260
1265
if (call.msg .type == AvailabilityType::Operative) {
1261
1266
if (connector == 0 ) {
1262
- this ->status ->submit_event (0 , FSMEvent::BecomeAvailable);
1267
+ this ->status ->submit_event (0 , FSMEvent::BecomeAvailable, ocpp::DateTime () );
1263
1268
} else if (this ->enable_evse_callback != nullptr and
1264
1269
availability_status == AvailabilityStatus::Accepted) {
1265
1270
this ->enable_evse_callback (connector);
1266
1271
}
1267
1272
} else {
1268
1273
if (connector == 0 ) {
1269
- this ->status ->submit_event (0 , FSMEvent::ChangeAvailabilityToUnavailable);
1274
+ this ->status ->submit_event (0 , FSMEvent::ChangeAvailabilityToUnavailable, ocpp::DateTime () );
1270
1275
} else if (this ->disable_evse_callback != nullptr and
1271
1276
availability_status == AvailabilityStatus::Accepted) {
1272
1277
this ->disable_evse_callback (connector);
@@ -1775,13 +1780,13 @@ void ChargePointImpl::handleStopTransactionResponse(const EnhancedMessage<v16::M
1775
1780
// TODO(kai): check return value
1776
1781
this ->enable_evse_callback (connector);
1777
1782
}
1778
- this ->status ->submit_event (connector, FSMEvent::BecomeAvailable);
1783
+ this ->status ->submit_event (connector, FSMEvent::BecomeAvailable, ocpp::DateTime () );
1779
1784
} else {
1780
1785
if (this ->disable_evse_callback != nullptr ) {
1781
1786
// TODO(kai): check return value
1782
1787
this ->disable_evse_callback (connector);
1783
1788
}
1784
- this ->status ->submit_event (connector, FSMEvent::ChangeAvailabilityToUnavailable);
1789
+ this ->status ->submit_event (connector, FSMEvent::ChangeAvailabilityToUnavailable, ocpp::DateTime () );
1785
1790
}
1786
1791
}
1787
1792
} else {
@@ -2022,10 +2027,12 @@ void ChargePointImpl::handleTriggerMessageRequest(ocpp::Call<TriggerMessageReque
2022
2027
if (!call.msg .connectorId .has_value ()) {
2023
2028
// send a status notification for every connector
2024
2029
for (int32_t c = 0 ; c <= this ->configuration ->getNumberOfConnectors (); c++) {
2025
- this ->status_notification (c, ChargePointErrorCode::NoError, this ->status ->get_state (c));
2030
+ this ->status_notification (c, ChargePointErrorCode::NoError, this ->status ->get_state (c),
2031
+ ocpp::DateTime ());
2026
2032
}
2027
2033
} else {
2028
- this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector));
2034
+ this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector),
2035
+ ocpp::DateTime ());
2029
2036
}
2030
2037
break ;
2031
2038
}
@@ -2135,10 +2142,12 @@ void ChargePointImpl::handleExtendedTriggerMessageRequest(ocpp::Call<ExtendedTri
2135
2142
if (!call.msg .connectorId .has_value ()) {
2136
2143
// send a status notification for every connector
2137
2144
for (int32_t c = 0 ; c <= this ->configuration ->getNumberOfConnectors (); c++) {
2138
- this ->status_notification (c, ChargePointErrorCode::NoError, this ->status ->get_state (c));
2145
+ this ->status_notification (c, ChargePointErrorCode::NoError, this ->status ->get_state (c),
2146
+ ocpp::DateTime ());
2139
2147
}
2140
2148
} else {
2141
- this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector));
2149
+ this ->status_notification (connector, ChargePointErrorCode::NoError, this ->status ->get_state (connector),
2150
+ ocpp::DateTime ());
2142
2151
}
2143
2152
break ;
2144
2153
}
@@ -2514,23 +2523,13 @@ bool ChargePointImpl::send(CallError call_error) {
2514
2523
return true ;
2515
2524
}
2516
2525
2517
- void ChargePointImpl::status_notification (int32_t connector, ChargePointErrorCode errorCode, CiString<50 > info,
2518
- ChargePointStatus status, ocpp::DateTime timestamp) {
2519
- StatusNotificationRequest request;
2520
- request.connectorId = connector;
2521
- request.errorCode = errorCode;
2522
- request.info .emplace (info);
2523
- request.status = status;
2524
- request.timestamp .emplace (timestamp);
2525
- ocpp::Call<StatusNotificationRequest> call (request, this ->message_queue ->createMessageId ());
2526
- this ->send <StatusNotificationRequest>(call);
2527
- }
2528
-
2529
- void ChargePointImpl::status_notification (int32_t connector, ChargePointErrorCode errorCode, ChargePointStatus status) {
2526
+ void ChargePointImpl::status_notification (const int32_t connector, const ChargePointErrorCode errorCode,
2527
+ const ChargePointStatus status, const ocpp::DateTime& timestamp) {
2530
2528
StatusNotificationRequest request;
2531
2529
request.connectorId = connector;
2532
2530
request.errorCode = errorCode;
2533
2531
request.status = status;
2532
+ request.timestamp = timestamp;
2534
2533
ocpp::Call<StatusNotificationRequest> call (request, this ->message_queue ->createMessageId ());
2535
2534
this ->send <StatusNotificationRequest>(call);
2536
2535
}
@@ -3120,17 +3119,17 @@ void ChargePointImpl::on_session_started(int32_t connector, const std::string& s
3120
3119
if ((this ->status ->get_state (connector) == ChargePointStatus::Reserved &&
3121
3120
session_started_reason == SessionStartedReason::Authorized) ||
3122
3121
this ->status ->get_state (connector) != ChargePointStatus::Reserved) {
3123
- this ->status ->submit_event (connector, FSMEvent::UsageInitiated);
3122
+ this ->status ->submit_event (connector, FSMEvent::UsageInitiated, ocpp::DateTime () );
3124
3123
}
3125
3124
}
3126
3125
3127
3126
void ChargePointImpl::on_session_stopped (const int32_t connector, const std::string& session_id) {
3128
3127
// TODO(piet) fix this when evse manager signals clearance of an error
3129
3128
if (this ->status ->get_state (connector) == ChargePointStatus::Faulted) {
3130
- this ->status ->submit_event (connector, FSMEvent::I1_ReturnToAvailable);
3129
+ this ->status ->submit_event (connector, FSMEvent::I1_ReturnToAvailable, ocpp::DateTime () );
3131
3130
} else if (this ->status ->get_state (connector) != ChargePointStatus::Reserved &&
3132
3131
this ->status ->get_state (connector) != ChargePointStatus::Unavailable) {
3133
- this ->status ->submit_event (connector, FSMEvent::BecomeAvailable);
3132
+ this ->status ->submit_event (connector, FSMEvent::BecomeAvailable, ocpp::DateTime () );
3134
3133
}
3135
3134
3136
3135
if (this ->logging ->session_logging_active ()) {
@@ -3143,7 +3142,7 @@ void ChargePointImpl::on_transaction_started(const int32_t& connector, const std
3143
3142
std::optional<int32_t > reservation_id, const ocpp::DateTime& timestamp,
3144
3143
std::optional<std::string> signed_meter_value) {
3145
3144
if (this ->status ->get_state (connector) == ChargePointStatus::Reserved) {
3146
- this ->status ->submit_event (connector, FSMEvent::UsageInitiated);
3145
+ this ->status ->submit_event (connector, FSMEvent::UsageInitiated, ocpp::DateTime () );
3147
3146
}
3148
3147
3149
3148
auto meter_values_sample_timer = std::make_unique<Everest::SteadyTimer>(&this ->io_service , [this , connector]() {
@@ -3206,7 +3205,7 @@ void ChargePointImpl::on_transaction_stopped(const int32_t connector, const std:
3206
3205
const auto stop_energy_wh = std::make_shared<StampedEnergyWh>(timestamp, energy_wh_import);
3207
3206
this ->transaction_handler ->get_transaction (connector)->add_stop_energy_wh (stop_energy_wh);
3208
3207
3209
- this ->status ->submit_event (connector, FSMEvent::TransactionStoppedAndUserActionRequired);
3208
+ this ->status ->submit_event (connector, FSMEvent::TransactionStoppedAndUserActionRequired, ocpp::DateTime () );
3210
3209
this ->stop_transaction (connector, reason, id_tag_end);
3211
3210
this ->database_handler ->update_transaction (session_id, energy_wh_import, timestamp.to_rfc3339 (), id_tag_end,
3212
3211
reason);
@@ -3317,23 +3316,23 @@ ChargePointImpl::get_filtered_transaction_data(const std::shared_ptr<Transaction
3317
3316
}
3318
3317
3319
3318
void ChargePointImpl::on_suspend_charging_ev (int32_t connector) {
3320
- this ->status ->submit_event (connector, FSMEvent::PauseChargingEV);
3319
+ this ->status ->submit_event (connector, FSMEvent::PauseChargingEV, ocpp::DateTime () );
3321
3320
}
3322
3321
3323
3322
void ChargePointImpl::on_suspend_charging_evse (int32_t connector) {
3324
- this ->status ->submit_event (connector, FSMEvent::PauseChargingEVSE);
3323
+ this ->status ->submit_event (connector, FSMEvent::PauseChargingEVSE, ocpp::DateTime () );
3325
3324
}
3326
3325
3327
3326
void ChargePointImpl::on_resume_charging (int32_t connector) {
3328
- this ->status ->submit_event (connector, FSMEvent::StartCharging);
3327
+ this ->status ->submit_event (connector, FSMEvent::StartCharging, ocpp::DateTime () );
3329
3328
}
3330
3329
3331
3330
void ChargePointImpl::on_error (int32_t connector, const ChargePointErrorCode& error_code) {
3332
- this ->status ->submit_error (connector, error_code);
3331
+ this ->status ->submit_error (connector, error_code, ocpp::DateTime () );
3333
3332
}
3334
3333
3335
3334
void ChargePointImpl::on_fault (int32_t connector, const ChargePointErrorCode& error_code) {
3336
- this ->status ->submit_fault (connector, error_code);
3335
+ this ->status ->submit_fault (connector, error_code, ocpp::DateTime () );
3337
3336
}
3338
3337
3339
3338
void ChargePointImpl::on_log_status_notification (int32_t request_id, std::string log_status) {
@@ -3508,23 +3507,23 @@ void ChargePointImpl::register_is_token_reserved_for_connector_callback(
3508
3507
}
3509
3508
3510
3509
void ChargePointImpl::on_reservation_start (int32_t connector) {
3511
- this ->status ->submit_event (connector, FSMEvent::ReserveConnector);
3510
+ this ->status ->submit_event (connector, FSMEvent::ReserveConnector, ocpp::DateTime () );
3512
3511
}
3513
3512
3514
3513
void ChargePointImpl::on_reservation_end (int32_t connector) {
3515
- this ->status ->submit_event (connector, FSMEvent::BecomeAvailable);
3514
+ this ->status ->submit_event (connector, FSMEvent::BecomeAvailable, ocpp::DateTime () );
3516
3515
}
3517
3516
3518
3517
void ChargePointImpl::on_enabled (int32_t connector) {
3519
- this ->status ->submit_event (connector, FSMEvent::BecomeAvailable);
3518
+ this ->status ->submit_event (connector, FSMEvent::BecomeAvailable, ocpp::DateTime () );
3520
3519
}
3521
3520
3522
3521
void ChargePointImpl::on_disabled (int32_t connector) {
3523
- this ->status ->submit_event (connector, FSMEvent::ChangeAvailabilityToUnavailable);
3522
+ this ->status ->submit_event (connector, FSMEvent::ChangeAvailabilityToUnavailable, ocpp::DateTime () );
3524
3523
}
3525
3524
3526
3525
void ChargePointImpl::on_plugin_timeout (int32_t connector) {
3527
- this ->status ->submit_event (connector, FSMEvent::TransactionStoppedAndUserActionRequired);
3526
+ this ->status ->submit_event (connector, FSMEvent::TransactionStoppedAndUserActionRequired, ocpp::DateTime () );
3528
3527
}
3529
3528
3530
3529
void ChargePointImpl::on_security_event (const std::string& type, const std::string& tech_info) {
0 commit comments