// SPDX-License-Identifier: Apache-2.0 // Copyright Pionix GmbH and Contributors to EVerest #ifndef OCPP201_HPP #define OCPP201_HPP // // AUTO GENERATED - MARKED REGIONS WILL BE KEPT // template version 2 // #include "ld-ev.hpp" // headers for provided interface implementations #include #include #include #include #include // headers for required interface implementations #include #include #include #include #include #include #include #include #include // ev@4bf81b14-a215-475c-a1d3-0a484ae48918:v1 // insert your custom include headers here #include #include #include #include #include #include #include #include using EventQueue = std::map>>; // ev@4bf81b14-a215-475c-a1d3-0a484ae48918:v1 namespace module { struct Conf { std::string MessageLogPath; std::string CoreDatabasePath; std::string DeviceModelDatabasePath; std::string EverestDeviceModelDatabasePath; std::string DeviceModelDatabaseMigrationPath; std::string DeviceModelConfigPath; bool EnableExternalWebsocketControl; int MessageQueueResumeDelay; int CompositeScheduleIntervalS; int RequestCompositeScheduleDurationS; std::string RequestCompositeScheduleUnit; int DelayOcppStart; int ResetStopDelay; }; class OCPP201 : public Everest::ModuleBase { public: OCPP201() = delete; OCPP201(const ModuleInfo& info, Everest::MqttProvider& mqtt_provider, std::unique_ptr p_auth_validator, std::unique_ptr p_auth_provider, std::unique_ptr p_data_transfer, std::unique_ptr p_ocpp_generic, std::unique_ptr p_session_cost, std::vector> r_evse_manager, std::unique_ptr r_system, std::unique_ptr r_security, std::vector> r_data_transfer, std::unique_ptr r_auth, std::vector> r_evse_energy_sink, std::vector> r_display_message, std::vector> r_reservation, std::vector> r_extensions_15118, Conf& config) : ModuleBase(info), mqtt(mqtt_provider), p_auth_validator(std::move(p_auth_validator)), p_auth_provider(std::move(p_auth_provider)), p_data_transfer(std::move(p_data_transfer)), p_ocpp_generic(std::move(p_ocpp_generic)), p_session_cost(std::move(p_session_cost)), r_evse_manager(std::move(r_evse_manager)), r_system(std::move(r_system)), r_security(std::move(r_security)), r_data_transfer(std::move(r_data_transfer)), r_auth(std::move(r_auth)), r_evse_energy_sink(std::move(r_evse_energy_sink)), r_display_message(std::move(r_display_message)), r_reservation(std::move(r_reservation)), r_extensions_15118(std::move(r_extensions_15118)), config(config){}; Everest::MqttProvider& mqtt; const std::unique_ptr p_auth_validator; const std::unique_ptr p_auth_provider; const std::unique_ptr p_data_transfer; const std::unique_ptr p_ocpp_generic; const std::unique_ptr p_session_cost; const std::vector> r_evse_manager; const std::unique_ptr r_system; const std::unique_ptr r_security; const std::vector> r_data_transfer; const std::unique_ptr r_auth; const std::vector> r_evse_energy_sink; const std::vector> r_display_message; const std::vector> r_reservation; const std::vector> r_extensions_15118; const Conf& config; // ev@1fce4c5e-0ab8-41bb-90f7-14277703d2ac:v1 // insert your public definitions here std::unique_ptr charge_point; void charging_schedules_timer_callback(); void charging_schedules_timer_start(); void charging_schedules_timer_stop(); // ev@1fce4c5e-0ab8-41bb-90f7-14277703d2ac:v1 protected: // ev@4714b2ab-a24f-4b95-ab81-36439e1478de:v1 // insert your protected definitions here // ev@4714b2ab-a24f-4b95-ab81-36439e1478de:v1 private: friend class LdEverest; void init(); void ready(); // ev@211cfdbe-f69a-4cd6-a4ec-f8aaa3d1b6c8:v1 // insert your private definitions here std::shared_ptr everest_device_model_storage; std::unique_ptr transaction_handler; Everest::SteadyTimer charging_schedules_timer; std::filesystem::path ocpp_share_path; std::string source_ext_limit; // key represents evse_id, value indicates if ready everest::lib::util::monitor> evse_ready_map; everest::lib::util::monitor>> evse_soc_map; std::map evse_hardware_capabilities_map; std::map> evse_supported_energy_transfer_modes; std::map evse_service_renegotiation_supported; everest::lib::util::monitor> evse_evcc_id; std::atomic ocpp_protocol_version{ocpp::OcppProtocolVersion::Unknown}; int32_t event_id_counter{0}; std::mutex session_event_mutex; std::atomic_bool started{false}; EventQueue event_queue; void init_evse_maps(); void init_evse_subscriptions(); void init_module_configuration(); std::map get_connector_structure(); void process_session_event(const int32_t evse_id, const types::evse_manager::SessionEvent& session_event); void process_tx_event_effect(const int32_t evse_id, const TxEventEffect tx_event_effect, const types::evse_manager::SessionEvent& session_event); void process_session_started(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_session_finished(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_transaction_started(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_transaction_finished(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_session_resumed(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_charging_started(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_charging_resumed(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_charging_paused_ev(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_charging_paused_evse(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_enabled(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_disabled(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_authorized(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_deauthorized(const int32_t evse_id, const int32_t connector_id, const types::evse_manager::SessionEvent& session_event); void process_reserved(const int32_t evse_id, const int32_t connector_id); void process_reservation_end(const int32_t evse_id, const int32_t connector_id); /// \brief This function publishes the given \p composite_schedules via the ocpp interface void publish_charging_schedules(const std::vector& composite_schedules); /// \brief This function applies given \p composite_schedules for each connected evse_energy_sink void set_external_limits(const std::vector& composite_schedules); // ev@211cfdbe-f69a-4cd6-a4ec-f8aaa3d1b6c8:v1 }; // ev@087e516b-124c-48df-94fb-109508c7cda9:v1 // insert other definitions here // ev@087e516b-124c-48df-94fb-109508c7cda9:v1 } // namespace module #endif // OCPP201_HPP