ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
availability.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
8#include <ocpp/v2/messages/ChangeAvailability.hpp>
9
10namespace ocpp::v2 {
11struct FunctionalBlockContext;
12
13struct HeartbeatResponse;
14
18 bool persist;
19};
20
22public:
23 virtual ~AvailabilityInterface() {
24 }
25
26 virtual void handle_message(const ocpp::EnhancedMessage<MessageType>& message) = 0;
27
28 // Functional Block G: Availability OCPP requests.
36 virtual void status_notification_req(const int32_t evse_id, const int32_t connector_id,
37 const ConnectorStatusEnum status,
38 const bool initiated_by_trigger_message = false) = 0;
39
44 virtual void heartbeat_req(const bool initiated_by_trigger_message = false) = 0;
45
50 virtual void handle_scheduled_change_availability_requests(const int32_t evse_id) = 0;
51
58 virtual void set_scheduled_change_availability_requests(const int32_t evse_id,
59 AvailabilityChange availability_change) = 0;
60
65 virtual void set_heartbeat_timer_interval(const std::chrono::seconds& interval) = 0;
66
70 virtual void stop_heartbeat_timer() = 0;
71};
72
73typedef std::function<void(const ocpp::DateTime& currentTime)> TimeSyncCallback;
74typedef std::function<void()> AllConnectorsUnavailableCallback;
75
77private: // Members
78 const FunctionalBlockContext& context;
79
80 std::optional<TimeSyncCallback> time_sync_callback;
81 std::optional<AllConnectorsUnavailableCallback> all_connectors_unavailable_callback;
82
83 std::chrono::time_point<std::chrono::steady_clock> heartbeat_request_time;
84
85 std::map<int32_t, AvailabilityChange> scheduled_change_availability_requests;
86 Everest::SteadyTimer heartbeat_timer;
87
88public:
89 Availability(const FunctionalBlockContext& functional_block_context,
90 std::optional<TimeSyncCallback> time_sync_callback,
91 std::optional<AllConnectorsUnavailableCallback> all_connectors_unavailable_callback);
93 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
94
95 // Functional Block G: Availability
96 void status_notification_req(const int32_t evse_id, const int32_t connector_id, const ConnectorStatusEnum status,
97 const bool initiated_by_trigger_message = false) override;
98 void heartbeat_req(const bool initiated_by_trigger_message = false) override;
99
100 void handle_scheduled_change_availability_requests(const int32_t evse_id) override;
101 void set_scheduled_change_availability_requests(const int32_t evse_id,
102 AvailabilityChange availability_change) override;
103
104 void set_heartbeat_timer_interval(const std::chrono::seconds& interval) override;
105 void stop_heartbeat_timer() override;
106
107private: // Functions
108 // Functional Block G: Availability
109
114 void handle_change_availability_req(Call<ChangeAvailabilityRequest> call);
115
120 void handle_heartbeat_response(CallResult<HeartbeatResponse> call);
121
124 bool is_already_in_state(const ChangeAvailabilityRequest& request);
125
128 void execute_change_availability_request(ChangeAvailabilityRequest request, bool persist);
129
133 void set_cs_operative_status(OperationalStatusEnum new_status, bool persist);
134
139 void set_evse_operative_status(int32_t evse_id, OperationalStatusEnum new_status, bool persist);
140
146 void set_connector_operative_status(int32_t evse_id, int32_t connector_id, OperationalStatusEnum new_status,
147 bool persist);
148};
149} // namespace ocpp::v2
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Definition: availability.hpp:21
virtual void handle_message(const ocpp::EnhancedMessage< MessageType > &message)=0
Handles the given message from the CSMS. This includes dispatching a CALLRESULT as a response to the ...
virtual void set_scheduled_change_availability_requests(const int32_t evse_id, AvailabilityChange availability_change)=0
Set scheduled change availability requests, that should be sent later (for example because of a firmw...
virtual void status_notification_req(const int32_t evse_id, const int32_t connector_id, const ConnectorStatusEnum status, const bool initiated_by_trigger_message=false)=0
Send a StatusNotificationRequest to the CSMS.
virtual void set_heartbeat_timer_interval(const std::chrono::seconds &interval)=0
Set the heartbeat timer interval.
virtual void heartbeat_req(const bool initiated_by_trigger_message=false)=0
Send a HeartbeatRequest to the CSMS.
virtual void handle_scheduled_change_availability_requests(const int32_t evse_id)=0
Handle / send the scheduled change availability requests.
virtual void stop_heartbeat_timer()=0
Stop the heartbeat timer.
Definition: availability.hpp:76
void status_notification_req(const int32_t evse_id, const int32_t connector_id, const ConnectorStatusEnum status, const bool initiated_by_trigger_message=false) override
Send a StatusNotificationRequest to the CSMS.
Definition: availability.cpp:39
void stop_heartbeat_timer() override
Stop the heartbeat timer.
Definition: availability.cpp:88
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: availability.cpp:27
void set_scheduled_change_availability_requests(const int32_t evse_id, AvailabilityChange availability_change) override
Set scheduled change availability requests, that should be sent later (for example because of a firmw...
Definition: availability.cpp:79
void set_heartbeat_timer_interval(const std::chrono::seconds &interval) override
Set the heartbeat timer interval.
Definition: availability.cpp:84
void heartbeat_req(const bool initiated_by_trigger_message=false) override
Send a HeartbeatRequest to the CSMS.
Definition: availability.cpp:51
void handle_scheduled_change_availability_requests(const int32_t evse_id) override
Handle / send the scheduled change availability requests.
Definition: availability.cpp:59
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Contains a OCPP CallResult message.
Definition: call_types.hpp:105
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
Combines ChangeAvailabilityRequest with persist flag for scheduled Availability changes.
Definition: availability.hpp:16
Contains a OCPP ChangeAvailability message.
Definition: ChangeAvailability.hpp:19
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23