diff --git a/app/Dockerfile b/app/Dockerfile index a789219..17677cc 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -7,7 +7,6 @@ COPY package.json package-lock.json ./ RUN npm ci COPY tsconfig.json ./ -COPY public ./public COPY src ./src RUN npm run build && npm prune --omit=dev diff --git a/app/package.json b/app/package.json index 6e595dd..b3c51b3 100644 --- a/app/package.json +++ b/app/package.json @@ -3,9 +3,9 @@ "private": true, "type": "module", "scripts": { - "dev": "tsx watch src/index.ts", + "dev": "tsx watch --env-file=.env src/index.ts", "build": "tsc", - "start": "node dist/index.js" + "start": "node --env-file=.env dist/index.js" }, "dependencies": { "mqtt": "^5.15.1", diff --git a/app/src/handlers/edge5-modbus-v2.ts b/app/src/handlers/edge5-modbus-v2.ts index e5bfaed..7c09ab5 100644 --- a/app/src/handlers/edge5-modbus-v2.ts +++ b/app/src/handlers/edge5-modbus-v2.ts @@ -4,12 +4,21 @@ import type { TopicHandler } from '../types.js' export const TOPIC = 'data/edge5/modbus/v2' +const REGISTER_COUNT = 125 const mapper = createMetricMapper({ filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE as string, }) function parseValues(payload: Buffer): number[] { - return JSON.parse(payload.toString('utf8')) as number[] + const values = JSON.parse(payload.toString('utf8')) as number[] + assertRegisterCount(values) + return values +} + +function assertRegisterCount(values: number[]): void { + if (values.length !== REGISTER_COUNT) { + throw new Error(`Expected ${REGISTER_COUNT} modbus values, got ${values.length}`) + } } async function postMetrics(metrics: MappedMetric[]): Promise { diff --git a/app/src/handlers/edge5-modbus.ts b/app/src/handlers/edge5-modbus.ts index 7b6b25f..59cfefd 100644 --- a/app/src/handlers/edge5-modbus.ts +++ b/app/src/handlers/edge5-modbus.ts @@ -4,6 +4,7 @@ import type { TopicHandler } from '../types.js' export const TOPIC = 'data/edge5/modbus/v1' const EDGE = 'edge5' +const REGISTER_COUNT = 125 type Edge5ModbusMetric = { edge: string @@ -13,7 +14,15 @@ type Edge5ModbusMetric = { } function parseValues(payload: Buffer): number[] { - return JSON.parse(payload.toString('utf8')) as number[] + const values = JSON.parse(payload.toString('utf8')) as number[] + assertRegisterCount(values) + return values +} + +function assertRegisterCount(values: number[]): void { + if (values.length !== REGISTER_COUNT) { + throw new Error(`Expected ${REGISTER_COUNT} modbus values, got ${values.length}`) + } } function toMetrics(values: number[], timestamp: number): Edge5ModbusMetric[] {