6#include <ocpp/v2/message_handler.hpp>
8#include <ocpp/v2/evse.hpp>
11struct FunctionalBlockContext;
12class SmartChargingHandlerInterface;
14struct GetChargingProfilesRequest;
15struct SetChargingProfileRequest;
16struct SetChargingProfileResponse;
17struct GetCompositeScheduleResponse;
18struct GetCompositeScheduleRequest;
19struct ClearChargingProfileResponse;
20struct ClearChargingProfileRequest;
21struct ReportChargingProfilesRequest;
23enum class ProfileValidationResultEnum {
26 ExistingChargingStationExternalConstraints,
28 TxProfileMissingTransactionId,
29 TxProfileEvseIdNotGreaterThanZero,
30 TxProfileTransactionNotOnEvse,
31 TxProfileEvseHasNoActiveTransaction,
32 TxProfileConflictingStackLevel,
33 ChargingProfileNoChargingSchedulePeriods,
34 ChargingProfileFirstStartScheduleIsNotZero,
35 ChargingProfileMissingRequiredStartSchedule,
36 ChargingProfileExtraneousStartSchedule,
37 ChargingScheduleChargingRateUnitUnsupported,
38 ChargingSchedulePeriodsOutOfOrder,
39 ChargingSchedulePeriodInvalidPhaseToUse,
40 ChargingSchedulePeriodUnsupportedNumberPhases,
41 ChargingSchedulePeriodExtraneousPhaseValues,
42 ChargingSchedulePeriodPhaseToUseACPhaseSwitchingUnsupported,
43 ChargingStationMaxProfileCannotBeRelative,
44 ChargingStationMaxProfileEvseIdGreaterThanZero,
45 DuplicateTxDefaultProfileFound,
46 DuplicateProfileValidityPeriod,
47 RequestStartTransactionNonTxProfile,
48 ChargingProfileEmptyChargingSchedules
53enum class AddChargingProfileSource {
55 RequestStartTransactionRequest
58namespace conversions {
61std::string profile_validation_result_to_string(ProfileValidationResultEnum e);
65std::string profile_validation_result_to_reason_code(ProfileValidationResultEnum e);
68std::ostream& operator<<(std::ostream& os,
const ProfileValidationResultEnum validation_result);
81 const ChargingRateUnitEnum& unit) = 0;
94 ChargingLimitSourceEnum charging_limit_source = ChargingLimitSourceEnum::CSO,
95 AddChargingProfileSource source_of_request = AddChargingProfileSource::SetChargingProfile) = 0;
104 AddChargingProfileSource source_of_request = AddChargingProfileSource::SetChargingProfile) = 0;
119 ChargingRateUnitEnum unit) = 0;
125 std::function<void()> set_charging_profiles_callback;
129 std::function<
void()> set_charging_profiles_callback);
133 ChargingRateUnitEnum unit)
override;
135 const ChargingRateUnitEnum& unit)
override;
141 ChargingLimitSourceEnum charging_limit_source = ChargingLimitSourceEnum::CSO,
142 AddChargingProfileSource source_of_request = AddChargingProfileSource::SetChargingProfile)
override;
145 AddChargingProfileSource source_of_request = AddChargingProfileSource::SetChargingProfile)
override;
152 const int32_t evse_id, ChargingRateUnitEnum charging_rate_unit,
153 bool is_offline,
bool simulate_transaction_active);
165 int32_t evse_id)
const;
177 AddChargingProfileSource source_of_request = AddChargingProfileSource::SetChargingProfile)
const;
183 std::optional<EvseInterface*> evse_opt = std::nullopt)
const;
196 ChargingLimitSourceEnum charging_limit_source = ChargingLimitSourceEnum::CSO);
212 std::vector<ChargingProfile>
213 get_valid_profiles(int32_t evse_id,
const std::vector<ChargingProfilePurposeEnum>& purposes_to_ignore = {});
217 void report_charging_profile_req(
const int32_t request_id,
const int32_t evse_id,
218 const ChargingLimitSourceEnum source,
const std::vector<ChargingProfile>& profiles,
229 bool simulate_transaction_active =
true);
233 ProfileValidationResultEnum validate_request_start_transaction_profile(
const ChargingProfile& profile)
const;
239 bool is_overlapping_validity_period(
const ChargingProfile& candidate_profile, int32_t candidate_evse_id)
const;
241 std::vector<ChargingProfile> get_evse_specific_tx_default_profiles()
const;
242 std::vector<ChargingProfile> get_station_wide_tx_default_profiles()
const;
243 std::vector<ChargingProfile>
244 get_valid_profiles_for_evse(int32_t evse_id,
245 const std::vector<ChargingProfilePurposeEnum>& purposes_to_ignore = {});
248 void conform_schedule_number_phases(int32_t profile_id,
ChargingSchedulePeriod& charging_schedule_period)
const;
255 CurrentPhaseType get_current_phase_type(
const std::optional<EvseInterface*> evse_opt)
const;
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
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
virtual void delete_transaction_tx_profiles(const std::string &transaction_id)=0
for the given transaction_id removes the associated charging profile.
virtual GetCompositeScheduleResponse get_composite_schedule(const GetCompositeScheduleRequest &request)=0
Gets a composite schedule based on the given request.
virtual SetChargingProfileResponse conform_validate_and_add_profile(ChargingProfile &profile, int32_t evse_id, ChargingLimitSourceEnum charging_limit_source=ChargingLimitSourceEnum::CSO, AddChargingProfileSource source_of_request=AddChargingProfileSource::SetChargingProfile)=0
validates the given profile according to the specification, adding it to our stored list of profiles ...
virtual std::optional< CompositeSchedule > get_composite_schedule(int32_t evse_id, std::chrono::seconds duration, ChargingRateUnitEnum unit)=0
Gets a composite schedule based on the given parameters.
virtual std::vector< CompositeSchedule > get_all_composite_schedules(const int32_t duration, const ChargingRateUnitEnum &unit)=0
Gets composite schedules for all evse_ids (including 0) for the given duration and unit ....
virtual ProfileValidationResultEnum conform_and_validate_profile(ChargingProfile &profile, int32_t evse_id, AddChargingProfileSource source_of_request=AddChargingProfileSource::SetChargingProfile)=0
validates the given profile according to the specification. If a profile does not have validFrom or v...
Definition: smart_charging.hpp:122
std::vector< ChargingProfile > get_valid_profiles(int32_t evse_id, const std::vector< ChargingProfilePurposeEnum > &purposes_to_ignore={})
Retrieves all profiles that should be considered for calculating the composite schedule....
Definition: smart_charging.cpp:653
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: smart_charging.cpp:136
ProfileValidationResultEnum verify_no_conflicting_external_constraints_id(const ChargingProfile &profile) const
Checks a given profile does not have an id that conflicts with an existing profile of type ChargingSt...
Definition: smart_charging.cpp:601
SetChargingProfileResponse conform_validate_and_add_profile(ChargingProfile &profile, int32_t evse_id, ChargingLimitSourceEnum charging_limit_source=ChargingLimitSourceEnum::CSO, AddChargingProfileSource source_of_request=AddChargingProfileSource::SetChargingProfile) override
validates the given profile according to the specification, adding it to our stored list of profiles ...
Definition: smart_charging.cpp:201
ProfileValidationResultEnum validate_profile_schedules(ChargingProfile &profile, std::optional< EvseInterface * > evse_opt=std::nullopt) const
validates that the given profile has valid charging schedules. If a profiles charging schedule period...
Definition: smart_charging.cpp:515
std::vector< ReportedChargingProfile > get_reported_profiles(const GetChargingProfilesRequest &request) const
Gets the charging profiles for the given request.
Definition: smart_charging.cpp:647
CompositeSchedule calculate_composite_schedule(const ocpp::DateTime &start_time, const ocpp::DateTime &end_time, const int32_t evse_id, ChargingRateUnitEnum charging_rate_unit, bool is_offline, bool simulate_transaction_active)
Calculates the composite schedule for the given valid_profiles and the given connector_id.
Definition: smart_charging.cpp:344
ProfileValidationResultEnum conform_and_validate_profile(ChargingProfile &profile, int32_t evse_id, AddChargingProfileSource source_of_request=AddChargingProfileSource::SetChargingProfile) override
validates the given profile according to the specification. If a profile does not have validFrom or v...
Definition: smart_charging.cpp:219
ProfileValidationResultEnum validate_evse_exists(int32_t evse_id) const
validates the existence of the given evse_id according to the specification
Definition: smart_charging.cpp:413
GetCompositeScheduleResponse get_composite_schedule(const GetCompositeScheduleRequest &request) override
Gets a composite schedule based on the given request.
Definition: smart_charging.cpp:152
ProfileValidationResultEnum validate_charging_station_max_profile(const ChargingProfile &profile, int32_t evse_id) const
validates requirements that apply only to the ChargingStationMaxProfile profile according to the spec...
Definition: smart_charging.cpp:418
void delete_transaction_tx_profiles(const std::string &transaction_id) override
for the given transaction_id removes the associated charging profile.
Definition: smart_charging.cpp:196
ClearChargingProfileResponse clear_profiles(const ClearChargingProfileRequest &request)
Clears profiles from the system using the given request.
Definition: smart_charging.cpp:634
std::vector< CompositeSchedule > get_all_composite_schedules(const int32_t duration, const ChargingRateUnitEnum &unit) override
Gets composite schedules for all evse_ids (including 0) for the given duration and unit ....
Definition: smart_charging.cpp:172
ProfileValidationResultEnum validate_tx_default_profile(const ChargingProfile &profile, int32_t evse_id) const
validates the given profile and associated evse_id according to the specification
Definition: smart_charging.cpp:439
ProfileValidationResultEnum validate_tx_profile(const ChargingProfile &profile, int32_t evse_id, AddChargingProfileSource source_of_request=AddChargingProfileSource::SetChargingProfile) const
validates the given profile according to the specification
Definition: smart_charging.cpp:458
SetChargingProfileResponse add_profile(ChargingProfile &profile, int32_t evse_id, ChargingLimitSourceEnum charging_limit_source=ChargingLimitSourceEnum::CSO)
Adds a given profile and associated evse_id to our stored list of profiles.
Definition: smart_charging.cpp:615
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
Definition: ocpp_types.hpp:755
Definition: ocpp_types.hpp:236
Contains a OCPP ClearChargingProfile message.
Definition: ClearChargingProfile.hpp:19
Contains a OCPP ClearChargingProfileResponse message.
Definition: ClearChargingProfile.hpp:40
Definition: ocpp_types.hpp:253
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23
Contains a OCPP GetChargingProfiles message.
Definition: GetChargingProfiles.hpp:19
Contains a OCPP GetCompositeSchedule message.
Definition: GetCompositeSchedule.hpp:19
Contains a OCPP GetCompositeScheduleResponse message.
Definition: GetCompositeSchedule.hpp:41
Contains a OCPP ReportChargingProfiles message.
Definition: ReportChargingProfiles.hpp:19
Contains a OCPP SetChargingProfileResponse message.
Definition: SetChargingProfile.hpp:40