ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
transaction.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Pionix GmbH and Contributors to EVerest
3
4#pragma once
5
6#include <ocpp/v2/message_handler.hpp>
7
8namespace ocpp::v2 {
9struct FunctionalBlockContext;
10class AuthorizationInterface;
11class AvailabilityInterface;
12class SmartChargingInterface;
13class TariffAndCostInterface;
14
15struct GetTransactionStatusRequest;
16
17typedef std::function<void(const TransactionEventRequest& transaction_event)> TransactionEventCallback;
18typedef std::function<void(const std::optional<const int32_t> evse_id, const ResetEnum& reset_type)> ResetCallback;
19typedef std::function<void(const TransactionEventRequest& transaction_event,
20 const TransactionEventResponse& transaction_event_response)>
21 TransactionEventResponseCallback;
22typedef std::function<RequestStartStopStatusEnum(const int32_t evse_id, const ReasonEnum& stop_reason)>
23 StopTransactionCallback;
24typedef std::function<void(const int32_t evse_id)> PauseChargingCallback;
25
27public:
28 virtual ~TransactionInterface() = default;
29
42 virtual void
43 on_transaction_started(const int32_t evse_id, const int32_t connector_id, const std::string& session_id,
44 const DateTime& timestamp, const TriggerReasonEnum trigger_reason,
45 const MeterValue& meter_start, const std::optional<IdToken>& id_token,
46 const std::optional<IdToken>& group_id_token, const std::optional<int32_t>& reservation_id,
47 const std::optional<int32_t>& remote_start_id, const ChargingStateEnum charging_state) = 0;
48
57 virtual void on_transaction_finished(const int32_t evse_id, const DateTime& timestamp, const MeterValue& meter_stop,
58 const ReasonEnum reason, const TriggerReasonEnum trigger_reason,
59 const std::optional<IdToken>& id_token,
60 const std::optional<std::string>& signed_meter_value,
61 const ChargingStateEnum charging_state) = 0;
62
63 /* OCPP message requests */
64
65 // Functional Block E: Transactions
66 virtual void transaction_event_req(const TransactionEventEnum& event_type, const DateTime& timestamp,
67 const Transaction& transaction, const TriggerReasonEnum& trigger_reason,
68 const int32_t seq_no, const std::optional<int32_t>& cable_max_current,
69 const std::optional<EVSE>& evse, const std::optional<IdToken>& id_token,
70 const std::optional<std::vector<MeterValue>>& meter_value,
71 const std::optional<int32_t>& number_of_phases_used, const bool offline,
72 const std::optional<int32_t>& reservation_id,
73 const bool initiated_by_trigger_message = false) = 0;
74
75 virtual void set_remote_start_id_for_evse(const int32_t evse_id, const IdToken id_token,
76 const int32_t remote_start_id) = 0;
77 virtual void schedule_reset(const std::optional<int32_t> reset_scheduled_evseid) = 0;
78};
79
81public:
82 TransactionBlock(const FunctionalBlockContext& functional_block_context,
83 MessageQueue<v2::MessageType>& message_queue, AuthorizationInterface& authorization,
84 AvailabilityInterface& availability, SmartChargingInterface& smart_charging,
85 TariffAndCostInterface& tariff_and_cost, StopTransactionCallback stop_transaction_callback,
86 PauseChargingCallback pause_charging_callback,
87 std::optional<TransactionEventCallback> transaction_event_callback,
88 std::optional<TransactionEventResponseCallback> transaction_event_response_callback,
89 ResetCallback reset_callback);
90 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
91 void on_transaction_started(const int32_t evse_id, const int32_t connector_id, const std::string& session_id,
92 const DateTime& timestamp, const TriggerReasonEnum trigger_reason,
93 const MeterValue& meter_start, const std::optional<IdToken>& id_token,
94 const std::optional<IdToken>& group_id_token,
95 const std::optional<int32_t>& reservation_id,
96 const std::optional<int32_t>& remote_start_id,
97 const ChargingStateEnum charging_state) override;
98 void on_transaction_finished(const int32_t evse_id, const DateTime& timestamp, const MeterValue& meter_stop,
99 const ReasonEnum reason, const TriggerReasonEnum trigger_reason,
100 const std::optional<IdToken>& id_token,
101 const std::optional<std::string>& signed_meter_value,
102 const ChargingStateEnum charging_state) override;
103 void transaction_event_req(const TransactionEventEnum& event_type, const DateTime& timestamp,
104 const Transaction& transaction, const TriggerReasonEnum& trigger_reason,
105 const int32_t seq_no, const std::optional<int32_t>& cable_max_current,
106 const std::optional<EVSE>& evse, const std::optional<IdToken>& id_token,
107 const std::optional<std::vector<MeterValue>>& meter_value,
108 const std::optional<int32_t>& number_of_phases_used, const bool offline,
109 const std::optional<int32_t>& reservation_id,
110 const bool initiated_by_trigger_message = false) override;
111 void set_remote_start_id_for_evse(const int32_t evse_id, const IdToken id_token,
112 const int32_t remote_start_id) override;
113 void schedule_reset(const std::optional<int32_t> reset_scheduled_evseid) override;
114
115private: // Members
116 const FunctionalBlockContext& context;
117 MessageQueue<v2::MessageType>& message_queue;
118 AuthorizationInterface& authorization;
119 AvailabilityInterface& availability;
120 SmartChargingInterface& smart_charging;
121 TariffAndCostInterface& tariff_and_cost;
122 StopTransactionCallback stop_transaction_callback;
123 PauseChargingCallback pause_charging_callback;
124 std::optional<TransactionEventCallback> transaction_event_callback;
125 std::optional<TransactionEventResponseCallback> transaction_event_response_callback;
126 ResetCallback reset_callback;
127
128 std::map<int32_t, std::pair<IdToken, int32_t>> remote_start_id_per_evse;
130 bool reset_scheduled;
132 std::set<int32_t> reset_scheduled_evseids;
133
134private: // Functions
135 /* OCPP message handlers */
136
137 // Functional Block E: Transaction
138 void handle_transaction_event_response(const EnhancedMessage<v2::MessageType>& message);
139 void handle_get_transaction_status(const Call<GetTransactionStatusRequest> call);
140};
141} // namespace ocpp::v2
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Definition: authorization.hpp:18
Definition: availability.hpp:21
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Definition: smart_charging.hpp:70
Definition: tariff_and_cost.hpp:20
Definition: transaction.hpp:80
void on_transaction_finished(const int32_t evse_id, const DateTime &timestamp, const MeterValue &meter_stop, const ReasonEnum reason, const TriggerReasonEnum trigger_reason, const std::optional< IdToken > &id_token, const std::optional< std::string > &signed_meter_value, const ChargingStateEnum charging_state) override
Event handler that should be called when a transaction has finished.
Definition: transaction.cpp:91
void on_transaction_started(const int32_t evse_id, const int32_t connector_id, const std::string &session_id, const DateTime &timestamp, const TriggerReasonEnum trigger_reason, const MeterValue &meter_start, const std::optional< IdToken > &id_token, const std::optional< IdToken > &group_id_token, const std::optional< int32_t > &reservation_id, const std::optional< int32_t > &remote_start_id, const ChargingStateEnum charging_state) override
Event handler that should be called when a transaction has started.
Definition: transaction.cpp:56
void handle_message(const ocpp::EnhancedMessage< MessageType > &message) override
Handles the given message from the CSMS. This includes dispatching a CALLRESULT as a response to the ...
Definition: transaction.cpp:44
Definition: transaction.hpp:26
virtual void on_transaction_finished(const int32_t evse_id, const DateTime &timestamp, const MeterValue &meter_stop, const ReasonEnum reason, const TriggerReasonEnum trigger_reason, const std::optional< IdToken > &id_token, const std::optional< std::string > &signed_meter_value, const ChargingStateEnum charging_state)=0
Event handler that should be called when a transaction has finished.
virtual void on_transaction_started(const int32_t evse_id, const int32_t connector_id, const std::string &session_id, const DateTime &timestamp, const TriggerReasonEnum trigger_reason, const MeterValue &meter_start, const std::optional< IdToken > &id_token, const std::optional< IdToken > &group_id_token, const std::optional< int32_t > &reservation_id, const std::optional< int32_t > &remote_start_id, const ChargingStateEnum charging_state)=0
Event handler that should be called when a transaction has started.
Contains a OCPP Call message.
Definition: call_types.hpp:60
Contains a OCPP message in json form with additional information.
Definition: message_queue.hpp:54
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23
Definition: ocpp_types.hpp:36
Definition: ocpp_types.hpp:436
Definition: ocpp_types.hpp:933