-import type { ChargingStation } from '../charging-station';
+import { CircularBuffer } from 'mnemonist'
+
+import type { ChargingStation } from '../charging-station/index.js'
import {
type ChargingStationData,
type ChargingStationWorkerMessage,
ChargingStationWorkerMessageEvents,
type Statistics,
-} from '../types';
+ type TimestampedData
+} from '../types/index.js'
+import {
+ buildChargingStationAutomaticTransactionGeneratorConfiguration,
+ buildConnectorsStatus,
+ buildEvsesStatus,
+ OutputFormat
+} from './ChargingStationConfigurationUtils.js'
+
+export const buildAddedMessage = (
+ chargingStation: ChargingStation
+): ChargingStationWorkerMessage<ChargingStationData> => {
+ return {
+ event: ChargingStationWorkerMessageEvents.added,
+ data: buildChargingStationDataPayload(chargingStation)
+ }
+}
-export class MessageChannelUtils {
- private constructor() {
- // This is intentional
+export const buildDeletedMessage = (
+ chargingStation: ChargingStation
+): ChargingStationWorkerMessage<ChargingStationData> => {
+ return {
+ event: ChargingStationWorkerMessageEvents.deleted,
+ data: buildChargingStationDataPayload(chargingStation)
}
+}
- public static buildStartedMessage(
- chargingStation: ChargingStation
- ): ChargingStationWorkerMessage<ChargingStationData> {
- return {
- id: ChargingStationWorkerMessageEvents.started,
- data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation),
- };
+export const buildStartedMessage = (
+ chargingStation: ChargingStation
+): ChargingStationWorkerMessage<ChargingStationData> => {
+ return {
+ event: ChargingStationWorkerMessageEvents.started,
+ data: buildChargingStationDataPayload(chargingStation)
}
+}
- public static buildStoppedMessage(
- chargingStation: ChargingStation
- ): ChargingStationWorkerMessage<ChargingStationData> {
- return {
- id: ChargingStationWorkerMessageEvents.stopped,
- data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation),
- };
+export const buildStoppedMessage = (
+ chargingStation: ChargingStation
+): ChargingStationWorkerMessage<ChargingStationData> => {
+ return {
+ event: ChargingStationWorkerMessageEvents.stopped,
+ data: buildChargingStationDataPayload(chargingStation)
}
+}
- public static buildUpdatedMessage(
- chargingStation: ChargingStation
- ): ChargingStationWorkerMessage<ChargingStationData> {
- return {
- id: ChargingStationWorkerMessageEvents.updated,
- data: MessageChannelUtils.buildChargingStationDataPayload(chargingStation),
- };
+export const buildUpdatedMessage = (
+ chargingStation: ChargingStation
+): ChargingStationWorkerMessage<ChargingStationData> => {
+ return {
+ event: ChargingStationWorkerMessageEvents.updated,
+ data: buildChargingStationDataPayload(chargingStation)
}
+}
- public static buildPerformanceStatisticsMessage(
- statistics: Statistics
- ): ChargingStationWorkerMessage<Statistics> {
- return {
- id: ChargingStationWorkerMessageEvents.performanceStatistics,
- data: statistics,
- };
+export const buildPerformanceStatisticsMessage = (
+ statistics: Statistics
+): ChargingStationWorkerMessage<Statistics> => {
+ const statisticsData = [...statistics.statisticsData].map(([key, value]) => {
+ if (value.measurementTimeSeries instanceof CircularBuffer) {
+ value.measurementTimeSeries = value.measurementTimeSeries.toArray() as TimestampedData[]
+ }
+ return [key, value]
+ })
+ return {
+ event: ChargingStationWorkerMessageEvents.performanceStatistics,
+ data: {
+ id: statistics.id,
+ name: statistics.name,
+ uri: statistics.uri,
+ createdAt: statistics.createdAt,
+ updatedAt: statistics.updatedAt,
+ statisticsData
+ }
}
+}
- private static buildChargingStationDataPayload(
- chargingStation: ChargingStation
- ): ChargingStationData {
- return {
- started: chargingStation.started,
- stationInfo: chargingStation.stationInfo,
- connectors: [...chargingStation.connectors.values()].map(
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- ({ transactionSetInterval, ...connectorStatusRest }) => connectorStatusRest
- ),
- evses: [...chargingStation.evses.values()].map((evseStatus) => {
- return {
- ...evseStatus,
- connectors: [...evseStatus.connectors.values()].map(
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- ({ transactionSetInterval, ...connectorStatusRest }) => connectorStatusRest
- ),
- };
- }),
- ocppConfiguration: chargingStation.ocppConfiguration,
- wsState: chargingStation?.wsConnection?.readyState,
- bootNotificationResponse: chargingStation.bootNotificationResponse,
- ...(chargingStation.automaticTransactionGenerator && {
- automaticTransactionGenerator: {
- automaticTransactionGenerator:
- chargingStation.getAutomaticTransactionGeneratorConfiguration(),
- automaticTransactionGeneratorStatuses: [
- ...chargingStation.automaticTransactionGenerator.connectorsStatus.values(),
- ],
- },
- }),
- };
+const buildChargingStationDataPayload = (chargingStation: ChargingStation): ChargingStationData => {
+ return {
+ started: chargingStation.started,
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ stationInfo: chargingStation.stationInfo!,
+ connectors: buildConnectorsStatus(chargingStation),
+ evses: buildEvsesStatus(chargingStation, OutputFormat.worker),
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ ocppConfiguration: chargingStation.ocppConfiguration!,
+ supervisionUrl: chargingStation.wsConnectionUrl.href,
+ wsState: chargingStation.wsConnection?.readyState,
+ bootNotificationResponse: chargingStation.bootNotificationResponse,
+ ...(chargingStation.automaticTransactionGenerator != null && {
+ automaticTransactionGenerator:
+ buildChargingStationAutomaticTransactionGeneratorConfiguration(chargingStation)
+ })
}
}