From d00f79f4d3c15bb0bae8e43276fb18fea44ea73a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B2=20=D0=90=D1=80=D1=82?= =?UTF-8?q?=D0=B5=D0=BC?= Date: Fri, 19 Jun 2026 11:10:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20public?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BF=D0=BA=D0=B8=20=D0=B8=D0=B7=20dockerfile.?= =?UTF-8?q?=20=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BD=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=BE=20=D1=82?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=D0=B2,=20=D0=BF=D1=80=D0=B8=D1=81=D1=8B?= =?UTF-8?q?=D0=BB=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D1=81=20node-red.=20?= =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20=D1=87=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20.env=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=BF=D1=80=D0=B8=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Dockerfile | 1 - app/package.json | 4 ++-- app/src/handlers/edge5-modbus-v2.ts | 11 ++++++++++- app/src/handlers/edge5-modbus.ts | 11 ++++++++++- 4 files changed, 22 insertions(+), 5 deletions(-) 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[] {