Skip to content

Commit

Permalink
Merge pull request #112 from e-flux-platform/madic-lafon
Browse files Browse the repository at this point in the history
Add MADIC/LAFON model
  • Loading branch information
nick-jones authored Jan 30, 2025
2 parents edd88ef + 515c930 commit 78227c6
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/lib/ChargeStation/configurations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import AlpitronicCCVOCPP16 from './alpitronic-ccv-ocpp-16';
import SichargeOCPP16 from './sicharge-ocpp-16';
import AdsTecOCPP16 from './ads-tec-ocpp-16';
import ETotemOCPP16 from './e-totem-ocpp-16';
import MadicLafonOCPP16 from 'lib/ChargeStation/configurations/madic-lafon-ocpp-16';

const options = {
'default-ocpp1.6': DefaultOCPP16,
Expand All @@ -12,6 +13,7 @@ const options = {
'sicharge-ocpp1.6': SichargeOCPP16,
'ads-tec-ocpp1.6': AdsTecOCPP16,
'e-totem-ocpp1.6': ETotemOCPP16,
'madic/lafon-ocpp1.6': MadicLafonOCPP16,
};

export function getOCPPConfigurationOptions() {
Expand Down
14 changes: 14 additions & 0 deletions src/lib/ChargeStation/configurations/madic-lafon-ocpp-16.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import DefaultOCPP16 from 'lib/ChargeStation/configurations/default-ocpp-16';
import { EventTypes as e } from 'lib/ChargeStation/eventHandlers/event-types';
import sendAuthorizeOrStartTransaction from 'lib/ChargeStation/eventHandlers/ocpp-16/send-authorize-or-start-transaction';
import overrideSessionUid from 'lib/ChargeStation/eventHandlers/ocpp-16/madic-lafon/override-session-uid';
import sendStopTransactionWithCost from 'lib/ChargeStation/eventHandlers/ocpp-16/madic-lafon/session-stop-initiated';

export default {
...DefaultOCPP16,
[e.SessionStartInitiated]: [
overrideSessionUid,
sendAuthorizeOrStartTransaction,
],
[e.SessionStopInitiated]: [sendStopTransactionWithCost],
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { ChargeStationEventHandler } from 'lib/ChargeStation/eventHandlers';
import { AuthorizationType } from 'lib/settings';

const overrideSessionUid: ChargeStationEventHandler = async (params) => {
const { session, chargepoint } = params;
if (session.options.authorizationType !== AuthorizationType.CreditCard) {
return; // retain current idTag
}

session.options.uid = chargepoint.configuration.getVariableValue(
'IDTagBankCard'
) as string;
};

export default overrideSessionUid;
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { sleep } from 'utils/csv';
import { ChargeStationEventHandler } from 'lib/ChargeStation/eventHandlers';
import { StopTransactionRequest } from 'schemas/ocpp/1.6/StopTransaction';

const sendStopTransactionWithCost: ChargeStationEventHandler = async ({
chargepoint,
session,
}) => {
chargepoint.sessions[session.connectorId].isStoppingSession = true;
chargepoint.sessions[session.connectorId].tickInterval?.stop();

await sleep(1000);

// Calculations below are just general approximations of how costs may be applied.
const priceTime = chargepoint.configuration.getVariableValue(
'ChargePriceTime'
) as number;
const priceEnergy = chargepoint.configuration.getVariableValue(
'ChargePriceEnergy'
) as number;

const startTime = session.startTime;
const stopTime = session.stopTime as Date;
const durationMinutes =
(stopTime.getTime() - startTime.getTime()) / 1000 / 60;

const durationCost = durationMinutes * priceTime;
const kWhCost = session.kwhElapsed * priceEnergy;
const sessionCost = durationCost + kWhCost;

chargepoint.writeCall<StopTransactionRequest>(
'StopTransaction',
{
idTag: session.options.uid,
meterStop: Math.round(session.kwhElapsed * 1000),
timestamp: stopTime.toISOString(),
reason: 'EVDisconnected',
transactionId: Number(session.transactionId),
transactionData: [
{
timestamp: stopTime.toISOString(),
sampledValue: [
{
value: sessionCost.toFixed(2),
context: 'Transaction.End',
location: 'Body',
unit: 'Celcius',
format: 'Raw',
measurand: 'Temperature',
},
],
},
],
},
session
);
};

export default sendStopTransactionWithCost;
20 changes: 20 additions & 0 deletions src/lib/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ const isAdsTec = (settings: Settings) =>
settings.chargePointModel === 'ads-tec';
const isETotem = (settings: Settings) =>
settings.chargePointModel === 'e-totem';
const isMadicLafon = (settings: Settings) =>
settings.chargePointModel === 'madic/lafon';

export const settingsList: SettingsListSetting<ChargeStationSetting>[] = [
{
Expand Down Expand Up @@ -277,6 +279,24 @@ export const defaultVariableConfig16: Variable16[] = [
value: 1,
predicate: isAdsTec,
},
{
key: 'IDTagBankCard',
description: 'IdTag used when authorizing payment card sessions',
value: 'PleaseSetToken',
predicate: isMadicLafon,
},
{
key: 'ChargePriceTime',
description: 'Per minute price',
value: 0,
predicate: isMadicLafon,
},
{
key: 'ChargePriceEnergy',
description: 'Per kWh price',
value: 0,
predicate: isMadicLafon,
},
{
key: 'SupportedFileTransferProtocols',
description: 'Supported file transfer protocols',
Expand Down

0 comments on commit 78227c6

Please sign in to comment.