@@ -72,10 +72,14 @@ SmartChargingManager::~SmartChargingManager() { }
7272
7373/* * @copydoc bool ISmartChargingManager::getSetpoint(unsigned int,
7474 ocpp::types::Optional<float>&,
75- ocpp::types::Optional<float>&) */
75+ unsigned int&,
76+ ocpp::types::Optional<float>&,
77+ unsigned int&) */
7678bool SmartChargingManager::getSetpoint (unsigned int connector_id,
7779 ocpp::types::Optional<float >& charge_point_setpoint,
78- ocpp::types::Optional<float >& connector_setpoint)
80+ unsigned int & charge_point_number_phases,
81+ ocpp::types::Optional<float >& connector_setpoint,
82+ unsigned int & connector_number_phases)
7983{
8084 bool ret = false ;
8185
@@ -88,13 +92,18 @@ bool SmartChargingManager::getSetpoint(unsigned int connector_i
8892 {
8993 // Compute charge point setpoint
9094 charge_point_setpoint.clear ();
95+ charge_point_number_phases = 3u ; // Default, if not set is 3 phases charging
9196 for (const auto & profile : m_profile_db.chargePointMaxProfiles ())
9297 {
9398 // Check if the profile is active
9499 const ChargingSchedulePeriod* period = nullptr ;
95100 if (isProfileActive (connector, profile.second , period))
96101 {
97102 // Apply setpoint
103+ if (period->numberPhases .isSet ())
104+ {
105+ charge_point_number_phases = period->numberPhases ;
106+ }
98107 if (profile.second .chargingSchedule .chargingRateUnit == ChargingRateUnitType::A)
99108 {
100109 charge_point_setpoint = period->limit ;
@@ -110,12 +119,14 @@ bool SmartChargingManager::getSetpoint(unsigned int connector_i
110119 // Compute connector setpoint if a transaction is active on the connector
111120 ocpp::types::ChargingRateUnitType connector_setpoint_unit = ChargingRateUnitType::A;
112121 connector_setpoint.clear ();
122+ connector_number_phases = 3u ; // Default, if not set is 3 phases charging
113123 if (connector->transaction_id != 0 )
114124 {
115- computeSetpoint (connector, connector_setpoint, connector_setpoint_unit, m_profile_db.txProfiles ());
125+ computeSetpoint (connector, connector_setpoint, connector_setpoint_unit, connector_number_phases, m_profile_db.txProfiles ());
116126 if (!connector_setpoint.isSet ())
117127 {
118- computeSetpoint (connector, connector_setpoint, connector_setpoint_unit, m_profile_db.txDefaultProfiles ());
128+ computeSetpoint (
129+ connector, connector_setpoint, connector_setpoint_unit, connector_number_phases, m_profile_db.txDefaultProfiles ());
119130 }
120131 }
121132 if (connector_setpoint.isSet () && (connector_setpoint_unit == ChargingRateUnitType::W))
@@ -129,7 +140,8 @@ bool SmartChargingManager::getSetpoint(unsigned int connector_i
129140 if (!connector_setpoint.isSet () || (connector_setpoint > charge_point_setpoint))
130141 {
131142 // Connector setpoint becomes charge point setpoint
132- connector_setpoint = charge_point_setpoint;
143+ connector_setpoint = charge_point_setpoint;
144+ connector_number_phases = charge_point_number_phases;
133145 }
134146 }
135147
@@ -435,6 +447,7 @@ void SmartChargingManager::cleanupProfiles()
435447void SmartChargingManager::computeSetpoint (Connector* connector,
436448 ocpp::types::Optional<float >& connector_setpoint,
437449 ocpp::types::ChargingRateUnitType& connector_setpoint_unit,
450+ unsigned int & connector_number_phases,
438451 const ProfileDatabase::ChargingProfileList& profiles_list)
439452{
440453 unsigned int level = 0 ;
@@ -457,6 +470,14 @@ void SmartChargingManager::computeSetpoint(Connector*
457470 // Apply setpoint
458471 connector_setpoint = period->limit ;
459472 connector_setpoint_unit = profile.second .chargingSchedule .chargingRateUnit ;
473+ if (period->numberPhases .isSet ())
474+ {
475+ connector_number_phases = period->numberPhases ;
476+ }
477+ else
478+ {
479+ connector_number_phases = 3u ; // Default, if not set is 3 phases charging
480+ }
460481 }
461482
462483 // Check connector type
0 commit comments