Skip to content

Commit

Permalink
add status notification
Browse files Browse the repository at this point in the history
  • Loading branch information
Nasar165 committed May 5, 2024
1 parent b6d7a55 commit bcbbdd3
Show file tree
Hide file tree
Showing 10 changed files with 110 additions and 33 deletions.
20 changes: 16 additions & 4 deletions app/components/evse.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import { ChargingSocket, IChargingSocket } from '../service/ocpp/connector';
import { HandleOcpp } from '../service/ocpp/ocpp.handler';
import { SendBootNotification } from '../service/ocpp/command/boot-notification/bootnotification';
import StatusNotificationUI from './status.notification';
import { StatusNotification } from '../service/ocpp/status.notificiation';
import {
ChargePointErrorCodes,
StatusNotification,
} from '../service/ocpp/command/status-notification/status.notificiation';
import { SendStatusNotification } from '../service/ocpp/command/status-notification/statusnotification';

const defaultValue = 'ws://localhost:8080/ocpp/JwNpTpPxPm/CHR202305102';

Expand All @@ -32,13 +36,21 @@ export default function Evse() {

const onMessage = (ev: MessageEvent) => {
if (writer == null) return;
console.log(socket);

HandleOcpp(writer.current[0], ev.data, changeState);
};

const changeState = (state: StatusNotification) => {
const changeState = (
state: StatusNotification,
error?: ChargePointErrorCodes
) => {
setSocket({ ...socket, State: state });
if (writer.current[0] == null) return;
SendStatusNotification(
writer.current[0],
0,
error ?? ChargePointErrorCodes.NoError,
state
);
};

return (
Expand Down
8 changes: 6 additions & 2 deletions app/components/select.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState } from 'react';
import { useEffect, useState } from 'react';

type ReturnValue = string | number;

Expand Down Expand Up @@ -34,7 +34,7 @@ export default function Select({
defaultItem,
onChange,
}: Select): React.JSX.Element {
const [selected, setSelected] = useState(defaultItem);
const [selected, setSelected] = useState<Item>();
const [drop, setDrop] = useState(false);
const show = drop ? '' : 'hidden';

Expand All @@ -48,6 +48,10 @@ export default function Select({
setDrop((v) => !v);
};

useEffect(() => {
setSelected(defaultItem);
}, [defaultItem]);

return (
<div>
<div className='relative mt-2'>
Expand Down
11 changes: 5 additions & 6 deletions app/components/status.notification.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { StatusNotification } from '../service/ocpp/status.notificiation';
import { StatusNotification } from '../service/ocpp/command/status-notification/status.notificiation';
import { ChangeState } from '../service/ocpp/ocpp.handler';
import Select, { Item, ReturnValue } from './select';

Expand All @@ -15,18 +15,17 @@ export default function StatusNotificationUI({
const items: Array<Item> = Object.values(StatusNotification).map((v) => {
return { name: v, value: v };
});
const defaultState = { name: state, value: state };

const onChange = (value: ReturnValue) =>
changeState(value as StatusNotification);

console.log(state);

return (
<div>
state: {state}
<Select
items={items}
onChange={onChange}
defaultItem={{ name: state, value: state }}
/>
<Select items={items} onChange={onChange} defaultItem={defaultState} />
</div>
);
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { DEFAULT_TIMER, IWriter } from '../../../websocket/websocket.model';
import { Action, CreateRequestFrame, GetRequestFrame } from '../../ocpp.action';
import { IResponse } from '../../ocpp.frame';
import { NewTransaction } from '../../transaction/transaction.handler';
import { CreateTransaction } from '../../transaction/transaction.handler';
import {
BootNotificationRes,
IBootNotification,
Status,
} from './bootnotification.model';
import { CreateError, ErrorCode } from '../../ocpp.error';
import Validate from '@/app/helper/validation.helper';
import { StatusNotification } from '../../status.notificiation';
import { StatusNotification } from '../status-notification/status.notificiation';
import { ChangeState } from '../../ocpp.handler';

const defaultValue: IBootNotification = {
Expand Down Expand Up @@ -42,7 +42,7 @@ function SendBootNotification(w: IWriter): void {
clearTimeout(id);
if (success) return;
const frame = CreateRequestFrame(Action.BOOT_NOTIFICATION, defaultValue);
NewTransaction(GetRequestFrame(frame), BootNotification);
CreateTransaction(GetRequestFrame(frame), BootNotification);
w.Write(frame);
} catch (error) {
retry(w);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
enum StatusNotification {
AVAILABLE = 'Available',
PREPARING = 'Preparing',
CHARGING = 'Charging',
SUSPENDED_EVSE = 'SuspendedEVSE',
SUSPENDED_EV = 'SuspendedEV',
FINISHING = 'Finishing',
RESERVED = 'Reserved',
UNAVAILABLE = 'Unavailable',
FAULTED = 'Faulted',
}

enum ChargePointErrorCodes {
ConnectorLockFailure = 'NoError',
EVCommunicationError = 'EVCommunicationError',
GroundFailure = 'GroundFailure',
HighTemperature = 'HighTemperature',
InternalError = 'InternalError',
LocalListConflict = 'LocalListConflict',
NoError = 'NoError',
OtherError = 'OtherError',
OverCurrentFailure = 'OverCurrentFailure',
OverVoltage = 'OverVoltage',
PowerMeterFailure = 'PowerMeterFailure',
PowerSwitchFailure = 'PowerSwitchFailure',
ReaderFailure = 'ReaderFailure',
ResetFailure = 'ResetFailure',
UnderVoltage = 'UnderVoltage',
WeakSignal = 'WeakSignal',
}

interface IStatusNotification {
connectorId: number;
status: StatusNotification;
errorCode: ChargePointErrorCodes;
}

export type { IStatusNotification };
export { ChargePointErrorCodes, StatusNotification };
30 changes: 30 additions & 0 deletions app/service/ocpp/command/status-notification/statusnotification.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { IWriter } from '../../../websocket/websocket.model';
import { Action, CreateRequestFrame, GetRequestFrame } from '../../ocpp.action';
import { CreateTransaction } from '../../transaction/transaction.handler';
import {
ChargePointErrorCodes,
IStatusNotification,
StatusNotification,
} from './status.notificiation';

function SendStatusNotification(
w: IWriter,
connectorId: number,
errorCode: ChargePointErrorCodes,
status: StatusNotification
): void {
const req: IStatusNotification = {
connectorId,
errorCode,
status,
};
const frame = CreateRequestFrame(Action.STATUS_NOTIFICATION, req);
w.Write(frame);
CreateTransaction(GetRequestFrame(frame), StatusNotificationRes);
}

function StatusNotificationRes(): void {
console.log('status notification res received');
}

export { SendStatusNotification };
2 changes: 1 addition & 1 deletion app/service/ocpp/connector.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { StatusNotification } from './status.notificiation';
import { StatusNotification } from './command/status-notification/status.notificiation';

interface IChargingSocket {
State: StatusNotification;
Expand Down
10 changes: 8 additions & 2 deletions app/service/ocpp/ocpp.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,17 @@ import {
IRequest,
IResponse,
} from './ocpp.frame';
import { StatusNotification } from './status.notificiation';
import {
ChargePointErrorCodes,
StatusNotification,
} from './command/status-notification/status.notificiation';
import { FindTransaction } from './transaction/transaction.handler';

type OCPPData = IRequest | IResponse | IErrorFrame;
type ChangeState = (state: StatusNotification) => void;
type ChangeState = (
state: StatusNotification,
error?: ChargePointErrorCodes
) => void;

function getCallType(frame: BaseTuple): CallType {
return frame[0];
Expand Down
13 changes: 0 additions & 13 deletions app/service/ocpp/status.notificiation.ts

This file was deleted.

4 changes: 2 additions & 2 deletions app/service/ocpp/transaction/transaction.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ActionResponse, ITransaction, Transaction } from './transaction.model';

const List: Array<ITransaction> = [];

function NewTransaction(frame: IRequest, handler: ActionResponse): void {
function CreateTransaction(frame: IRequest, handler: ActionResponse): void {
List.push(new Transaction(frame, handler));
}

Expand All @@ -17,4 +17,4 @@ function GetTransactions(): Array<ITransaction> {
return List;
}

export { GetTransactions, NewTransaction, FindTransaction };
export { GetTransactions, CreateTransaction, FindTransaction };

0 comments on commit bcbbdd3

Please sign in to comment.