3#ifndef OCPP_V16_CHARGE_POINT_STATE_MACHINE_HPP
4#define OCPP_V16_CHARGE_POINT_STATE_MACHINE_HPP
13#include <ocpp/common/types.hpp>
14#include <ocpp/v16/ocpp_enums.hpp>
26 TransactionStoppedAndUserActionRequired,
27 ChangeAvailabilityToUnavailable,
33 I4_ReturnToSuspendedEV,
34 I5_ReturnToSuspendedEVSE,
37 I8_ReturnToUnavailable,
43 ChargePointErrorCode error_code;
46 std::optional<CiString<50>>
info;
51 ErrorInfo(
const std::string uuid,
const ChargePointErrorCode error_code,
const bool is_fault);
52 ErrorInfo(
const std::string uuid,
const ChargePointErrorCode error_code,
const bool is_fault,
53 const std::optional<std::string>
info);
54 ErrorInfo(
const std::string uuid,
const ChargePointErrorCode error_code,
const bool is_fault,
55 const std::optional<std::string>
info,
const std::optional<std::string>
vendor_id);
56 ErrorInfo(
const std::string uuid,
const ChargePointErrorCode error_code,
const bool is_fault,
57 const std::optional<std::string>
info,
const std::optional<std::string>
vendor_id,
61using FSMState = ChargePointStatus;
63using FSMStateTransitions = std::map<FSMEvent, FSMState>;
65using FSMDefinition = std::map<FSMState, FSMStateTransitions>;
69 using StatusNotificationCallback = std::function<void(
70 const ChargePointStatus status,
const ChargePointErrorCode error_code,
const ocpp::DateTime& timestamp,
73 explicit ChargePointFSM(
const StatusNotificationCallback& status_notification_callback, FSMState initial_state);
76 bool handle_error(
const ErrorInfo& error_info);
77 bool handle_error_cleared(
const std::string uuid);
78 bool handle_all_errors_cleared();
79 void trigger_status_notification();
82 std::optional<ErrorInfo> get_latest_error();
85 StatusNotificationCallback status_notification_callback;
89 std::unordered_map<std::string, ErrorInfo> active_errors;
96 using ConnectorStatusCallback = std::function<void(
97 const int connector_id,
const ChargePointErrorCode errorCode,
const ChargePointStatus status,
101 void reset(std::map<int, ChargePointStatus> connector_status_map);
103 void submit_event(
const int connector_id, FSMEvent event,
const ocpp::DateTime& timestamp,
104 const std::optional<
CiString<50>>& info = std::nullopt);
105 void submit_error(
const int connector_id,
const ErrorInfo& error_info);
106 void submit_error_cleared(
const int connector_id,
const std::string uuid);
107 void submit_all_errors_cleared(
const int32_t connector_id);
108 void trigger_status_notification(
const int connector_id);
109 void trigger_status_notifications();
111 ChargePointStatus get_state(
int connector_id);
112 std::optional<ErrorInfo> get_latest_error(
int connector_id);
115 ConnectorStatusCallback connector_status_callback;
117 std::unique_ptr<ChargePointFSM> state_machine_connector_zero;
118 std::vector<ChargePointFSM> state_machines;
119 std::mutex state_machines_mutex;
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Definition: charge_point_state_machine.hpp:67
Definition: charge_point_state_machine.hpp:94
Contains all relevant information to handle errros in OCPP1.6.
Definition: charge_point_state_machine.hpp:41
DateTime timestamp
defined by OCPP1.6
Definition: charge_point_state_machine.hpp:49
std::optional< CiString< 50 > > info
Definition: charge_point_state_machine.hpp:46
std::optional< CiString< 255 > > vendor_id
defined by OCPP1.6
Definition: charge_point_state_machine.hpp:47
std::optional< CiString< 50 > > vendor_error_code
defined by OCPP1.6
Definition: charge_point_state_machine.hpp:48
bool is_fault
defined by OCPP1.6
Definition: charge_point_state_machine.hpp:44