From c42600b863c2fbf7fa037d60d81a6a9cc017d0c6 Mon Sep 17 00:00:00 2001 From: Nasar Eddaoui Date: Mon, 6 May 2024 01:38:03 +0700 Subject: [PATCH 1/5] submit meter values to CSMS --- app/components/evse.tsx | 14 +++++- app/components/meter.value.tsx | 46 +++++++++++++++++++ app/components/transaction.tsx | 6 ++- .../{WebSocket.tsx => web.socket.tsx} | 0 .../command/meter-value/meter.value.model.ts | 0 .../ocpp/command/meter-value/meter.value.ts | 32 +++++++++++++ 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 app/components/meter.value.tsx rename app/components/{WebSocket.tsx => web.socket.tsx} (100%) create mode 100644 app/service/ocpp/command/meter-value/meter.value.model.ts create mode 100644 app/service/ocpp/command/meter-value/meter.value.ts diff --git a/app/components/evse.tsx b/app/components/evse.tsx index 0e2c8b5..dc601f7 100644 --- a/app/components/evse.tsx +++ b/app/components/evse.tsx @@ -3,7 +3,7 @@ import { SyntheticEvent, useRef, useState } from 'react'; import Input from './input'; import { ConState, IWriter } from '../service/websocket/websocket.model'; -import WebSocket from './WebSocket'; +import WebSocket from './web.socket'; import { ChargingSocket, IChargingSocket } from '../service/ocpp/connector'; import { HandleOcpp } from '../service/ocpp/ocpp.handler'; import { SendBootNotification } from '../service/ocpp/command/boot-notification/boot.notification'; @@ -14,6 +14,7 @@ import { } from '../service/ocpp/command/status-notification/status.notification'; import { SendStatusNotification } from '../service/ocpp/command/status-notification/statusnotification'; import Transaction from './transaction'; +import MeterValue from './meter.value'; const defaultValue = 'ws://localhost:8080/ocpp/JwNpTpPxPm/CHR202305102'; const connectorId = 1; @@ -88,6 +89,17 @@ export default function Evse() { changeState={changeState} /> +
+ +
); } diff --git a/app/components/meter.value.tsx b/app/components/meter.value.tsx new file mode 100644 index 0000000..d10b12a --- /dev/null +++ b/app/components/meter.value.tsx @@ -0,0 +1,46 @@ +import React, { useState } from 'react'; +import Select, { ReturnValue } from './select'; +import { meterValueList } from './transaction'; +import { StatusNotification } from '../service/ocpp/command/status-notification/status.notification'; +import Button from './button'; +import { SendMeterValue } from '../service/ocpp/command/meter-value/meter.value'; +import { IWriter } from '../service/websocket/websocket.model'; + +type meterValue = { + w: IWriter; + connectorId: number; + state: StatusNotification; +}; + +export default function MeterValue({ + w, + connectorId, + state, +}: meterValue): React.JSX.Element { + const [meter, setMeter] = useState(250); + const meterValue = { name: meter.toString(), value: meter }; + + const onSelectChange = (item: ReturnValue) => { + setMeter(item as number); + }; + + const onClick = () => { + SendMeterValue(w, connectorId, meter); + }; + + return ( +
+

Meter value

+ -
+
-
- -
+ {socket[0].State == StatusNotification.CHARGING ? ( +
+ +
+ ) : null}
); } diff --git a/app/components/meter.value.tsx b/app/components/meter.value.tsx index d10b12a..0defb3a 100644 --- a/app/components/meter.value.tsx +++ b/app/components/meter.value.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Select, { ReturnValue } from './select'; import { meterValueList } from './transaction'; import { StatusNotification } from '../service/ocpp/command/status-notification/status.notification'; @@ -6,6 +6,10 @@ import Button from './button'; import { SendMeterValue } from '../service/ocpp/command/meter-value/meter.value'; import { IWriter } from '../service/websocket/websocket.model'; +const DEFAULT_INTERVAL = 30000; + +let id: ReturnType; + type meterValue = { w: IWriter; connectorId: number; @@ -28,6 +32,15 @@ export default function MeterValue({ SendMeterValue(w, connectorId, meter); }; + useEffect(() => { + console.info('start interval'); + setInterval(onClick, DEFAULT_INTERVAL); + return () => { + console.info('clean up interval'); + clearInterval(id); + }; + }, []); + return (

Meter value

@@ -38,7 +51,7 @@ export default function MeterValue({ />
From 768e9fcc71d3626f3c9cd46922de87b6f06cf117 Mon Sep 17 00:00:00 2001 From: Nasar Eddaoui Date: Mon, 6 May 2024 01:46:43 +0700 Subject: [PATCH 3/5] add interval --- app/components/meter.value.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/meter.value.tsx b/app/components/meter.value.tsx index 0defb3a..0fde618 100644 --- a/app/components/meter.value.tsx +++ b/app/components/meter.value.tsx @@ -6,7 +6,7 @@ import Button from './button'; import { SendMeterValue } from '../service/ocpp/command/meter-value/meter.value'; import { IWriter } from '../service/websocket/websocket.model'; -const DEFAULT_INTERVAL = 30000; +const DEFAULT_INTERVAL = 20000; let id: ReturnType; @@ -44,6 +44,7 @@ export default function MeterValue({ return (

Meter value

+

Notes: Meter Values are sent every 20 seconds