Skip to content

Commit

Permalink
Merge pull request #27 from Nasar165/stop-transaction
Browse files Browse the repository at this point in the history
add stop transaction
  • Loading branch information
Nasar165 authored May 5, 2024
2 parents d3621e6 + 5df6982 commit e99aba7
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 5 deletions.
1 change: 1 addition & 0 deletions app/components/evse.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ export default function Evse() {
writer={writer.current[0]}
connectorId={0}
state={socket.State}
changeState={changeState}
/>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/components/select.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default function Select({
}, [defaultItem]);

return (
<div>
<div className='px-4'>
<div className='relative mt-2'>
<button
onClick={onDrop}
Expand Down
40 changes: 39 additions & 1 deletion app/components/transaction.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,49 @@
import React, { SyntheticEvent, useState } from 'react';
import { SendStartTransaction } from '../service/ocpp/charging/start.transaction';
import {
GetSession,
SendStartTransaction,
} from '../service/ocpp/charging/start.transaction';
import Input from './input';
import Button from './button';
import { IWriter } from '../service/websocket/websocket.model';
import { StatusNotification } from '../service/ocpp/command/status-notification/status.notification';
import { SendStopTransaction } from '../service/ocpp/charging/stop.transaction';
import { ChangeState } from '../service/ocpp/ocpp.handler';
import Select, { ReturnValue } from './select';

const meterValueList = [
{ name: '10', value: 10 },
{ name: '50', value: 50 },
{ name: '100', value: 100 },
{ name: '200', value: 200 },
{ name: '400', value: 400 },
];

type transaction = {
writer: IWriter;
connectorId: number;
state: StatusNotification;
changeState: ChangeState;
};

export default function Transaction({
writer,
connectorId,
state,
changeState,
}: transaction): React.JSX.Element {
const [idTag, setIdTag] = useState('cli013322');
const [meter, setMeter] = useState(250);
const meterValue = { name: meter.toString(), value: meter };

const onChange = (ev: SyntheticEvent<HTMLInputElement>) => {
setIdTag(ev.currentTarget.value);
};

const onSelectChange = (item: ReturnValue) => {
setMeter(item as number);
};

const notConnected = () => {
if (writer == null) {
alert('Please connect to CSMS');
Expand Down Expand Up @@ -52,6 +75,15 @@ export default function Transaction({
notConnected();
return;
}

const session = GetSession();
SendStopTransaction(
writer,
session.transactionId,
session.idTag,
meter,
changeState
);
};

return (
Expand All @@ -64,6 +96,12 @@ export default function Transaction({
onChange={onChange}
disabled={false}
/>
<p className='my-2'>Meter value</p>
<Select
items={meterValueList}
onChange={onSelectChange}
defaultItem={meterValue}
/>
<div className='grid gap-2 grid-cols-2'>
<Button
onClick={onStart}
Expand Down
13 changes: 10 additions & 3 deletions app/service/ocpp/charging/start.transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ function SendStartTransaction(
const frame = CreateRequestFrame(Action.START_TRANSACTION, transaction);
w.Write(frame);
CreateTransaction(GetRequestFrame(frame), StartTransaction);
session = { connectorId, idTag, transactionId: -1 };
session = { connectorId, idTag, transactionId: 0 };
}

function StartTransaction(
w: IWriter,
frame: IResponse,
changeState: ChangeState
): IChargingSession | undefined {
): void {
const [result, validation] = Validate<StartTransactionsRes>(
StartTransactionsRes,
frame.payload
Expand All @@ -54,7 +54,14 @@ function StartTransaction(

changeState(StatusNotification.CHARGING);
session.transactionId = result.transactionId;
}

function GetSession(): IChargingSession {
return session;
}

export { SendStartTransaction, StartTransaction };
function ResetSession(): void {
session = { connectorId: 0, idTag: '', transactionId: 0 };
}

export { SendStartTransaction, StartTransaction, ResetSession, GetSession };
10 changes: 10 additions & 0 deletions app/service/ocpp/charging/stop.transaction.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
interface IStopTransactionRes {}

interface IStopTransaction {
idTag: string;
transactionId: number;
meterStop: number;
timestamp: Date;
}

export type { IStopTransaction, IStopTransactionRes };
34 changes: 34 additions & 0 deletions app/service/ocpp/charging/stop.transaction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { IWriter } from '../../websocket/websocket.model';
import { StatusNotification } from '../command/status-notification/status.notification';
import { Action, CreateRequestFrame, GetRequestFrame } from '../ocpp.action';
import { ChangeState } from '../ocpp.handler';
import { CreateTransaction } from '../transaction/transaction.handler';
import { ResetSession } from './start.transaction';
import { IStopTransaction } from './stop.transaction.model';

function SendStopTransaction(
w: IWriter,
transactionId: number,
idTag: string,
meterStop: number,
changeState: ChangeState
): void {
const transaction: IStopTransaction = {
idTag,
transactionId,
meterStop: meterStop,
timestamp: new Date(),
};

const frame = CreateRequestFrame(Action.STOP_TRANSACTION, transaction);
w.Write(frame);
CreateTransaction(GetRequestFrame(frame), StopTransaction);
changeState(StatusNotification.AVAILABLE);
ResetSession();
}

function StopTransaction(): void {
console.log('stop transaction was received');
}

export { SendStopTransaction, StopTransaction };

0 comments on commit e99aba7

Please sign in to comment.