fix: bridge port is 4403, not 4003 (v0.1.1) #3
@@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v0.1.1 — 2026-09-23 19:38
|
||||||
|
|
||||||
|
- Fixed the default bridge port to `4403`, the meshtastic-serial-bridge's actual TCP port (the old value pointed at a closed port). Updated the `MESH_PORT` default in code, the docker-compose environment, and docs.
|
||||||
|
|
||||||
## v0.1.0 — 2026-09-23 18:54
|
## v0.1.0 — 2026-09-23 18:54
|
||||||
|
|
||||||
- New `GET /api/channels` endpoint listing the device's Meshtastic channels as `{ index, name, uplinkEnabled, downlinkEnabled }`; psk/keys are redacted and never exposed over HTTP. Channels are collected from `FromRadio.channel` frames streamed during initial sync (before `config_complete_id`) and reset on every bridge reconnect so stale data is dropped after a disconnect.
|
- New `GET /api/channels` endpoint listing the device's Meshtastic channels as `{ index, name, uplinkEnabled, downlinkEnabled }`; psk/keys are redacted and never exposed over HTTP. Channels are collected from `FromRadio.channel` frames streamed during initial sync (before `config_complete_id`) and reset on every bridge reconnect so stale data is dropped after a disconnect.
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ Credentials are deliberately NOT stored in this file — see §1 for where they
|
|||||||
## 7. App architecture quick map
|
## 7. App architecture quick map
|
||||||
|
|
||||||
- `src/mesh/codec.ts` — framing (`extractFrames`, `frame`) + protobuf encode/decode (`decodeFromRadio`, `buildTextToRadio`); unit tests in codec.spec.ts.
|
- `src/mesh/codec.ts` — framing (`extractFrames`, `frame`) + protobuf encode/decode (`decodeFromRadio`, `buildTextToRadio`); unit tests in codec.spec.ts.
|
||||||
- `src/mesh/mesh.service.ts` — TCP connection to the bridge (MESH_HOST/MESH_PORT env, defaults 192.168.1.4:4003), buffer + frame extraction on data, FromRadio dispatch (`myInfo` → myNodeNum, `channel` → upsert into channelMap keyed by index — reset on every reconnect, `configCompleteId` → ready log, `packet` → text-message logging), fixed-interval reconnect (MESH_RECONNECT_MS, default 5 s).
|
- `src/mesh/mesh.service.ts` — TCP connection to the bridge (MESH_HOST/MESH_PORT env, defaults 192.168.1.4:4403), buffer + frame extraction on data, FromRadio dispatch (`myInfo` → myNodeNum, `channel` → upsert into channelMap keyed by index — reset on every reconnect, `configCompleteId` → ready log, `packet` → text-message logging), fixed-interval reconnect (MESH_RECONNECT_MS, default 5 s).
|
||||||
- `src/mesh/mesh.controller.ts` — `GET /status`, `POST /send`, `GET /channels` (all under the `/api` global prefix set in main.ts; Scalar docs at `/`, OpenAPI JSON at `/docs-json`).
|
- `src/mesh/mesh.controller.ts` — `GET /status`, `POST /send`, `GET /channels` (all under the `/api` global prefix set in main.ts; Scalar docs at `/`, OpenAPI JSON at `/docs-json`).
|
||||||
|
|
||||||
## 8. Finding current state (this file keeps no snapshots)
|
## 8. Finding current state (this file keeps no snapshots)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# mesh-bot
|
# mesh-bot
|
||||||
|
|
||||||
Minimal NestJS bot for Meshtastic. Long-running service that TCP-connects to a
|
Minimal NestJS bot for Meshtastic. Long-running service that TCP-connects to a
|
||||||
Meshtastic serial bridge (raw socat pipe) at `192.168.1.4:4003`, parses inbound
|
Meshtastic serial bridge (raw socat pipe) at `192.168.1.4:4403`, parses inbound
|
||||||
protobuf frames, logs received text messages, and exposes HTTP endpoints to send text.
|
protobuf frames, logs received text messages, and exposes HTTP endpoints to send text.
|
||||||
|
|
||||||
## Local run
|
## Local run
|
||||||
@@ -42,7 +42,7 @@ curl http://localhost:3000/api/channels
|
|||||||
## Env vars
|
## Env vars
|
||||||
|
|
||||||
- `MESH_HOST` (default `192.168.1.4`) — bridge host
|
- `MESH_HOST` (default `192.168.1.4`) — bridge host
|
||||||
- `MESH_PORT` (default `4003`) — bridge port
|
- `MESH_PORT` (default `4403`) — bridge port
|
||||||
- `MESH_RECONNECT_MS` (default `5000`) — reconnect interval in ms
|
- `MESH_RECONNECT_MS` (default `5000`) — reconnect interval in ms
|
||||||
- `PORT` (default `3000`) — HTTP listen port
|
- `PORT` (default `3000`) — HTTP listen port
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
environment:
|
environment:
|
||||||
MESH_HOST: 192.168.1.4
|
MESH_HOST: 192.168.1.4
|
||||||
MESH_PORT: '4003'
|
MESH_PORT: '4403'
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- dev_net
|
- dev_net
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mesh-bot",
|
"name": "mesh-bot",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
export class MeshService implements OnModuleInit, OnModuleDestroy {
|
export class MeshService implements OnModuleInit, OnModuleDestroy {
|
||||||
private readonly logger = new Logger(MeshService.name);
|
private readonly logger = new Logger(MeshService.name);
|
||||||
private readonly host = process.env.MESH_HOST ?? '192.168.1.4';
|
private readonly host = process.env.MESH_HOST ?? '192.168.1.4';
|
||||||
private readonly port = parseInt(process.env.MESH_PORT ?? '4003', 10);
|
private readonly port = parseInt(process.env.MESH_PORT ?? '4403', 10);
|
||||||
// ponytail: fixed-interval retry, no backoff — fine for single-bridge use
|
// ponytail: fixed-interval retry, no backoff — fine for single-bridge use
|
||||||
private readonly reconnectMs = parseInt(
|
private readonly reconnectMs = parseInt(
|
||||||
process.env.MESH_RECONNECT_MS ?? '5000',
|
process.env.MESH_RECONNECT_MS ?? '5000',
|
||||||
|
|||||||
Reference in New Issue
Block a user