Skip to content

Commit

Permalink
feat: handle charging profile purpose TxProfile
Browse files Browse the repository at this point in the history
Signed-off-by: Jérôme Benoit <[email protected]>
  • Loading branch information
jerome-benoit committed Jun 9, 2024
1 parent a629e6f commit 7abb61b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 14 deletions.
43 changes: 30 additions & 13 deletions src/charging-station/Helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -625,23 +625,39 @@ export const getAmperageLimitationUnitDivider = (stationInfo: ChargingStationInf
}

/**
* Gets the connector cloned charging profiles applying a power limitation
* and sorted by connector id descending then stack level descending
* Gets the connector charging profiles relevant for power limitation shallow cloned and sorted by priorities
*
* @param chargingStation -
* @param connectorId -
* @param chargingStation - Charging station
* @param connectorId - Connector id
* @returns connector charging profiles array
*/
export const getConnectorChargingProfiles = (
chargingStation: ChargingStation,
connectorId: number
): ChargingProfile[] => {
// FIXME: handle charging profile purpose CHARGE_POINT_MAX_PROFILE
return (chargingStation.getConnectorStatus(connectorId)?.chargingProfiles ?? [])
.slice()
.sort((a, b) => b.stackLevel - a.stackLevel)
.sort((a, b) => {
if (
a.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE &&
b.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE
) {
return -1
} else if (
a.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE &&
b.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE
) {
return 1
}
return b.stackLevel - a.stackLevel
})
.concat(
(chargingStation.getConnectorStatus(0)?.chargingProfiles ?? [])
.slice()
.filter(
chargingProfile =>
chargingProfile.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE
)
.sort((a, b) => b.stackLevel - a.stackLevel)
)
}
Expand All @@ -651,7 +667,6 @@ export const getChargingStationConnectorChargingProfilesPowerLimit = (
connectorId: number
): number | undefined => {
let limit: number | undefined, chargingProfile: ChargingProfile | undefined
// Get charging profiles sorted by connector id then stack level
const chargingProfiles = getConnectorChargingProfiles(chargingStation, connectorId)
if (isNotEmptyArray(chargingProfiles)) {
const result = getLimitFromChargingProfiles(
Expand Down Expand Up @@ -868,6 +883,7 @@ const getLimitFromChargingProfiles = (
const debugLogMsg = `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Matching charging profile found for power limitation: %j`
const currentDate = new Date()
const connectorStatus = chargingStation.getConnectorStatus(connectorId)
let previousActiveChargingProfile: ChargingProfile | undefined
for (const chargingProfile of chargingProfiles) {
const chargingSchedule = chargingProfile.chargingSchedule
if (chargingSchedule.startSchedule == null) {
Expand Down Expand Up @@ -951,15 +967,12 @@ const getLimitFromChargingProfiles = (
) {
// Found the schedule period: previous is the correct one
const result: ChargingProfilesLimit = {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
limit: previousChargingSchedulePeriod!.limit,
chargingProfile
limit: previousChargingSchedulePeriod?.limit ?? chargingSchedulePeriod.limit,
chargingProfile: previousActiveChargingProfile ?? chargingProfile
}
logger.debug(debugLogMsg, result)
return result
}
// Keep a reference to previous one
previousChargingSchedulePeriod = chargingSchedulePeriod
// Handle the last schedule period within the charging profile duration
if (
index === chargingSchedule.chargingSchedulePeriod.length - 1 ||
Expand All @@ -973,14 +986,18 @@ const getLimitFromChargingProfiles = (
) > chargingSchedule.duration)
) {
const result: ChargingProfilesLimit = {
limit: previousChargingSchedulePeriod.limit,
limit: chargingSchedulePeriod.limit,
chargingProfile
}
logger.debug(debugLogMsg, result)
return result
}
// Keep a reference to previous charging schedule period
previousChargingSchedulePeriod = chargingSchedulePeriod
}
}
// Keep a reference to previous active charging profile
previousActiveChargingProfile = chargingProfile
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -979,7 +979,6 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
start: currentDate,
end: addSeconds(currentDate, duration)
}
// Get charging profiles sorted by connector id then stack level
const chargingProfiles: OCPP16ChargingProfile[] = getConnectorChargingProfiles(
chargingStation,
connectorId
Expand Down

0 comments on commit 7abb61b

Please sign in to comment.