fix(ocpp-server): silence linter
[e-mobility-charging-stations-simulator.git] / src / utils / MessageChannelUtils.ts
... / ...
CommitLineData
1import { CircularBuffer } from 'mnemonist'
2
3import type { ChargingStation } from '../charging-station/index.js'
4import {
5 type ChargingStationData,
6 type ChargingStationWorkerMessage,
7 ChargingStationWorkerMessageEvents,
8 type Statistics,
9 type TimestampedData
10} from '../types/index.js'
11import {
12 buildChargingStationAutomaticTransactionGeneratorConfiguration,
13 buildConnectorsStatus,
14 buildEvsesStatus,
15 OutputFormat
16} from './ChargingStationConfigurationUtils.js'
17
18export const buildAddedMessage = (
19 chargingStation: ChargingStation
20): ChargingStationWorkerMessage<ChargingStationData> => {
21 return {
22 event: ChargingStationWorkerMessageEvents.added,
23 data: buildChargingStationDataPayload(chargingStation)
24 }
25}
26
27export const buildDeletedMessage = (
28 chargingStation: ChargingStation
29): ChargingStationWorkerMessage<ChargingStationData> => {
30 return {
31 event: ChargingStationWorkerMessageEvents.deleted,
32 data: buildChargingStationDataPayload(chargingStation)
33 }
34}
35
36export const buildStartedMessage = (
37 chargingStation: ChargingStation
38): ChargingStationWorkerMessage<ChargingStationData> => {
39 return {
40 event: ChargingStationWorkerMessageEvents.started,
41 data: buildChargingStationDataPayload(chargingStation)
42 }
43}
44
45export const buildStoppedMessage = (
46 chargingStation: ChargingStation
47): ChargingStationWorkerMessage<ChargingStationData> => {
48 return {
49 event: ChargingStationWorkerMessageEvents.stopped,
50 data: buildChargingStationDataPayload(chargingStation)
51 }
52}
53
54export const buildUpdatedMessage = (
55 chargingStation: ChargingStation
56): ChargingStationWorkerMessage<ChargingStationData> => {
57 return {
58 event: ChargingStationWorkerMessageEvents.updated,
59 data: buildChargingStationDataPayload(chargingStation)
60 }
61}
62
63export const buildPerformanceStatisticsMessage = (
64 statistics: Statistics
65): ChargingStationWorkerMessage<Statistics> => {
66 const statisticsData = [...statistics.statisticsData].map(([key, value]) => {
67 if (value.measurementTimeSeries instanceof CircularBuffer) {
68 value.measurementTimeSeries = value.measurementTimeSeries.toArray() as TimestampedData[]
69 }
70 return [key, value]
71 })
72 return {
73 event: ChargingStationWorkerMessageEvents.performanceStatistics,
74 data: {
75 id: statistics.id,
76 name: statistics.name,
77 uri: statistics.uri,
78 createdAt: statistics.createdAt,
79 updatedAt: statistics.updatedAt,
80 statisticsData
81 }
82 }
83}
84
85const buildChargingStationDataPayload = (chargingStation: ChargingStation): ChargingStationData => {
86 return {
87 started: chargingStation.started,
88 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
89 stationInfo: chargingStation.stationInfo!,
90 connectors: buildConnectorsStatus(chargingStation),
91 evses: buildEvsesStatus(chargingStation, OutputFormat.worker),
92 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
93 ocppConfiguration: chargingStation.ocppConfiguration!,
94 supervisionUrl: chargingStation.wsConnectionUrl.href,
95 wsState: chargingStation.wsConnection?.readyState,
96 bootNotificationResponse: chargingStation.bootNotificationResponse,
97 ...(chargingStation.automaticTransactionGenerator != null && {
98 automaticTransactionGenerator:
99 buildChargingStationAutomaticTransactionGeneratorConfiguration(chargingStation)
100 })
101 }
102}