10#include <ocpp/v2/average_meter_values.hpp>
11#include <ocpp/v2/component_state_manager.hpp>
12#include <ocpp/v2/connector.hpp>
13#include <ocpp/v2/database_handler.hpp>
14#include <ocpp/v2/device_model.hpp>
15#include <ocpp/v2/ocpp_types.hpp>
16#include <ocpp/v2/transaction.hpp>
21enum class CurrentPhaseType {
57 virtual std::optional<ConnectorStatusEnum>
get_connector_status(std::optional<ConnectorEnum> connector_type) = 0;
69 virtual void open_transaction(
const std::string& transaction_id,
const int32_t connector_id,
71 const std::optional<IdToken>& id_token,
const std::optional<IdToken>& group_id_token,
72 const std::optional<int32_t> reservation_id,
73 const ChargingStateEnum charging_state) = 0;
80 const ReasonEnum& reason) = 0;
106 virtual void submit_event(
const int32_t connector_id, ConnectorEvent event) = 0;
162 std::optional<double> trigger_metervalue_on_power_kw, std::optional<double> trigger_metervalue_on_energy_kwh,
163 std::optional<DateTime> trigger_metervalue_at_time,
164 std::function<
void(
const std::vector<MeterValue>& meter_values)> send_metervalue_function,
165 boost::asio::io_service& io_service) = 0;
175 std::map<int32_t, std::unique_ptr<Connector>> id_connector_map;
177 std::function<void(int32_t evse_id)> pause_charging_callback;
178 std::unique_ptr<EnhancedTransaction> transaction;
180 std::recursive_mutex meter_value_mutex;
181 Everest::SteadyTimer sampled_meter_values_timer;
182 std::shared_ptr<DatabaseHandler> database_handler;
184 std::optional<double> trigger_metervalue_on_power_kw;
185 std::optional<double> trigger_metervalue_on_energy_kwh;
186 std::unique_ptr<Everest::SystemTimer> trigger_metervalue_at_time_timer;
187 std::optional<double> last_triggered_metervalue_power_kw;
188 std::function<void(
const std::vector<MeterValue>& meter_values)> send_metervalue_function;
189 boost::asio::io_service io_service;
192 std::optional<float> get_active_import_register_meter_value();
195 void check_max_energy_on_invalid_id();
199 void start_metering_timers(
const DateTime& timestamp);
205 void send_meter_value_on_pricing_trigger(
const MeterValue& meter_value);
212 void reset_pricing_triggers(
void);
218 void try_resume_transaction();
221 void delete_database_transaction();
224 std::shared_ptr<ComponentStateManagerInterface> component_state_manager;
231 std::optional<ConnectorEnum> get_evse_connector_type(
const uint32_t connector_id)
const;
243 Evse(
const int32_t evse_id,
const int32_t number_of_connectors,
DeviceModel& device_model,
244 std::shared_ptr<DatabaseHandler> database_handler,
245 std::shared_ptr<ComponentStateManagerInterface> component_state_manager,
247 transaction_meter_value_req,
248 const std::function<
void(int32_t evse_id)>& pause_charging_callback);
256 std::optional<ConnectorStatusEnum>
get_connector_status(std::optional<ConnectorEnum> connector_type)
override;
259 const MeterValue& meter_start,
const std::optional<IdToken>& id_token,
260 const std::optional<IdToken>& group_id_token,
const std::optional<int32_t> reservation_id,
261 const ChargingStateEnum charging_state);
273 void submit_event(
const int32_t connector_id, ConnectorEvent event);
300 std::optional<double> trigger_metervalue_on_power_kw, std::optional<double> trigger_metervalue_on_energy_kwh,
301 std::optional<DateTime> trigger_metervalue_at_time,
302 std::function<
void(
const std::vector<MeterValue>& meter_values)> send_metervalue_function,
303 boost::asio::io_service& io_service);
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Definition: average_meter_values.hpp:16
Represents a Connector, thus electrical outlet on a Charging Station. Single physical Connector.
Definition: connector.hpp:36
This class manages access to the device model representation and to the device model interface and pr...
Definition: device_model.hpp:96
virtual void on_meter_value(const MeterValue &meter_value)=0
Event handler that should be called when a new meter_value for this evse is present.
virtual uint32_t get_number_of_connectors() const =0
Returns the number of connectors of this EVSE.
virtual void set_evse_operative_status(OperationalStatusEnum new_status, bool persist)=0
Switches the operative status of the EVSE.
virtual OperationalStatusEnum get_effective_operational_status()=0
Gets the effective Operative/Inoperative status of this EVSE.
virtual MeterValue get_meter_value()=0
Returns the last present meter value for this evse.
virtual void open_transaction(const std::string &transaction_id, const int32_t connector_id, const DateTime ×tamp, 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 ChargingStateEnum charging_state)=0
Opens a new transaction.
virtual std::optional< ConnectorStatusEnum > get_connector_status(std::optional< ConnectorEnum > connector_type)=0
Get connector status.
virtual bool has_active_transaction(const int32_t connector_id) const =0
Indicates if a transaction is active at this evse at the given connector_id.
virtual CurrentPhaseType get_current_phase_type()=0
Returns the phase type for the EVSE based on its SupplyPhases. It can be AC, DC, or Unknown.
virtual Connector * get_connector(int32_t connector_id) const =0
Returns a pointer to the connector with ID.
virtual void submit_event(const int32_t connector_id, ConnectorEvent event)=0
Submits the given event to the state machine controller of the connector with the given connector_id.
virtual std::unique_ptr< EnhancedTransaction > & get_transaction()=0
Returns a pointer to the EnhancedTransaction of this evse.
virtual void restore_connector_operative_status(int32_t connector_id)=0
Restores the operative status of a connector within this EVSE to the persisted status and recomputes ...
virtual void set_connector_operative_status(int32_t connector_id, OperationalStatusEnum new_status, bool persist)=0
Switches the operative status of a connector within this EVSE.
virtual bool does_connector_exist(ConnectorEnum connector_type) const =0
Check if the given connector type exists on this evse.
virtual void set_meter_value_pricing_triggers(std::optional< double > trigger_metervalue_on_power_kw, std::optional< double > trigger_metervalue_on_energy_kwh, std::optional< DateTime > trigger_metervalue_at_time, std::function< void(const std::vector< MeterValue > &meter_values)> send_metervalue_function, boost::asio::io_service &io_service)=0
Set metervalue triggers for California Pricing.
virtual void start_checking_max_energy_on_invalid_id()=0
Start checking if the max energy on invalid id has exceeded. Will call pause_charging_callback when t...
virtual void clear_idle_meter_values()=0
Clear the idle meter values for this evse.
virtual MeterValue get_idle_meter_value()=0
Return the idle meter values for this evse.
virtual OperationalStatusEnum get_connector_effective_operational_status(const int32_t connector_id)=0
Get the operational status of a connector within this evse.
virtual int32_t get_id() const =0
Return the evse_id of this EVSE.
virtual bool has_active_transaction() const =0
Indicates if a transaction is active at this evse.
virtual void release_transaction()=0
Releases the reference of the transaction on this evse.
virtual void close_transaction(const DateTime ×tamp, const MeterValue &meter_stop, const ReasonEnum &reason)=0
Closes the transaction on this evse by adding the given timestamp meter_stop and reason .
Represents an EVSE. An EVSE can contain multiple Connector objects, but can only supply energy to one...
Definition: evse.hpp:170
uint32_t get_number_of_connectors() const
Returns the number of connectors of this EVSE.
Definition: evse.cpp:85
MeterValue get_idle_meter_value()
Return the idle meter values for this evse.
Definition: evse.cpp:363
CurrentPhaseType get_current_phase_type()
Returns the phase type for the EVSE based on its SupplyPhases. It can be AC, DC, or Unknown.
Definition: evse.cpp:684
Evse(const int32_t evse_id, const int32_t number_of_connectors, DeviceModel &device_model, std::shared_ptr< DatabaseHandler > database_handler, std::shared_ptr< ComponentStateManagerInterface > component_state_manager, const std::function< void(const MeterValue &meter_value, EnhancedTransaction &transaction)> &transaction_meter_value_req, const std::function< void(int32_t evse_id)> &pause_charging_callback)
Construct a new Evse object.
Definition: evse.cpp:48
bool does_connector_exist(const ConnectorEnum connector_type) const override
Check if the given connector type exists on this evse.
Definition: evse.cpp:89
void set_evse_operative_status(OperationalStatusEnum new_status, bool persist)
Switches the operative status of the EVSE.
Definition: evse.cpp:655
void start_checking_max_energy_on_invalid_id()
Start checking if the max energy on invalid id has exceeded. Will call pause_charging_callback when t...
Definition: evse.cpp:303
void set_connector_operative_status(int32_t connector_id, OperationalStatusEnum new_status, bool persist)
Switches the operative status of a connector within this EVSE.
Definition: evse.cpp:659
Connector * get_connector(int32_t connector_id) const
Returns a pointer to the connector with ID.
Definition: evse.cpp:675
MeterValue get_meter_value()
Returns the last present meter value for this evse.
Definition: evse.cpp:358
std::unique_ptr< EnhancedTransaction > & get_transaction()
Returns a pointer to the EnhancedTransaction of this evse.
Definition: evse.cpp:341
void restore_connector_operative_status(int32_t connector_id)
Restores the operative status of a connector within this EVSE to the persisted status and recomputes ...
Definition: evse.cpp:663
void set_meter_value_pricing_triggers(std::optional< double > trigger_metervalue_on_power_kw, std::optional< double > trigger_metervalue_on_energy_kwh, std::optional< DateTime > trigger_metervalue_at_time, std::function< void(const std::vector< MeterValue > &meter_values)> send_metervalue_function, boost::asio::io_service &io_service)
Set pricing triggers to send the meter value.
Definition: evse.cpp:512
std::optional< ConnectorStatusEnum > get_connector_status(std::optional< ConnectorEnum > connector_type) override
Get connector status.
Definition: evse.cpp:122
void submit_event(const int32_t connector_id, ConnectorEvent event)
Submits the given event to the state machine controller of the connector with the given connector_id.
Definition: evse.cpp:345
void release_transaction()
Releases the reference of the transaction on this evse.
Definition: evse.cpp:329
void close_transaction(const DateTime ×tamp, const MeterValue &meter_stop, const ReasonEnum &reason)
Closes the transaction on this evse by adding the given timestamp meter_stop and reason .
Definition: evse.cpp:276
void open_transaction(const std::string &transaction_id, const int32_t connector_id, const DateTime ×tamp, 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 ChargingStateEnum charging_state)
Opens a new transaction.
Definition: evse.cpp:232
void on_meter_value(const MeterValue &meter_value)
Event handler that should be called when a new meter_value for this evse is present.
Definition: evse.cpp:349
OperationalStatusEnum get_connector_effective_operational_status(const int32_t connector_id) override
Get the operational status of a connector within this evse.
Definition: evse.cpp:667
bool has_active_transaction() const
Indicates if a transaction is active at this evse.
Definition: evse.cpp:312
OperationalStatusEnum get_effective_operational_status()
Gets the effective Operative/Inoperative status of this EVSE.
Definition: evse.cpp:671
void clear_idle_meter_values()
Clear the idle meter values for this evse.
Definition: evse.cpp:367
int32_t get_id() const
Return the evse_id of this EVSE.
Definition: evse.cpp:81
Struct that enhances the OCPP Transaction by some meta data and functionality.
Definition: transaction.hpp:16
Definition: ocpp_types.hpp:436