@meri-imperiumi/signalk-meshtastic 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.editorconfig ADDED
@@ -0,0 +1,5 @@
1
+ [*]
2
+ end_of_line = lf
3
+ insert_final_newline = true
4
+ indent_style = space
5
+ indent_size = 2
package/.eslintrc.json CHANGED
@@ -2,5 +2,8 @@
2
2
  "extends": "airbnb-base",
3
3
  "parserOptions": {
4
4
  "ecmaVersion": 11
5
+ },
6
+ "rules": {
7
+ "linebreak-style": "warn"
5
8
  }
6
9
  }
@@ -12,7 +12,7 @@ jobs:
12
12
  - uses: actions/checkout@v3.0.2
13
13
  - uses: actions/setup-node@v3.1.1
14
14
  with:
15
- node-version: 22
15
+ node-version: 24
16
16
  - run: npm install
17
17
  - run: npm test
18
18
 
@@ -23,7 +23,7 @@ jobs:
23
23
  - uses: actions/checkout@v3.0.2
24
24
  - uses: actions/setup-node@v3.1.1
25
25
  with:
26
- node-version: 22
26
+ node-version: 24
27
27
  registry-url: https://registry.npmjs.org/
28
28
  - run: npm publish
29
29
  env:
@@ -0,0 +1,11 @@
1
+ name: SignalK Plugin CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+ pull_request:
7
+ branches: [main, master]
8
+
9
+ jobs:
10
+ test:
11
+ uses: SignalK/signalk-server/.github/workflows/plugin-ci.yml@master
@@ -8,7 +8,7 @@ jobs:
8
8
  runs-on: ubuntu-latest
9
9
  strategy:
10
10
  matrix:
11
- node-version: [22.x]
11
+ node-version: [24.x]
12
12
  steps:
13
13
  - uses: actions/checkout@v3.0.2
14
14
  - name: Use Node.js ${{ matrix.node-version }}
package/CHANGELOG.md ADDED
@@ -0,0 +1,27 @@
1
+ * 1.3.0 (2026-06-16)
2
+ - Removed support for serial connections as they require post-install scripts
3
+ * 1.2.4 (2026-02-15)
4
+ - Corrupted Node DB file should no longer crash the plugin
5
+ * 1.2.3 (2025-10-15)
6
+ - Nodes that haven't been seen in last two days are no longer registered to Signal K data structure
7
+ - Added safeties for various non-numeric telemetry and coordinate values
8
+ * 1.2.2 (2025-10-01)
9
+ - Set "last seen" timestamp of nodes based on packet payloads, not the time they're received
10
+ - Send timestamp with telemetry
11
+ - Fixed issue with persising node-to-vessel matches from `DE <callsign>`
12
+ * 1.2.1 (2025-09-28)
13
+ - Fixed issue with Signal K servers that don't have navigation.position set
14
+ * 1.2.0 (2025-09-28)
15
+ - Support for Node.js older than 22.x, for example as seen in Venus OS Large
16
+ - Safety for nodes in DB that don't have a "last seen" timestamp
17
+ - Made connection status notifications clearer
18
+ * 1.1.2 (2025-09-25)
19
+ - Added support for the new roles from Meshtastic 2.7 (`ROUTER_LATE` and `CLIENT_BASE`)
20
+ - Fixed issue with sending a bell with alerts that have sound enabled
21
+ * 1.1.1 (2025-09-18)
22
+ - Fixed empty response text message to digital switching actions
23
+ - Added support for the proposed Signal K MOB position specification
24
+ * 1.1.0 (2025-09-11)
25
+ - Added support for Serial transport with the Meshtastic device
26
+ * 1.0.0 (2025-09-11)
27
+ - Initial release with HTTP and TCP transports
package/README.md CHANGED
@@ -29,8 +29,9 @@ In production use on several boats.
29
29
 
30
30
  ## Features
31
31
 
32
- * Connect to a Meshtastic node via HTTP, TCP, or Serial
32
+ * Connect to a Meshtastic node via HTTP or TCP
33
33
  * Keep a persistent database of all seen Meshtastic nodes
34
+ * Note: Serial transport support was removed in 1.3.0 to comply with [postinstall deprecation](https://demo.signalk.org/documentation/Developing/Plugins/Publishing_to_The_AppStore.html#important-avoid-install-time-scripts)
34
35
  * Update Meshtastic node position from Signal K GNSS position
35
36
  * Send Signal K alerts as Meshtastic text messages to crew
36
37
  * MOB alerts (for example from [signalk-mob-notifier](https://github.com/meri-imperiumi/signalk-mob-notifier)) also send a waypoint to the MOB beacon
@@ -50,8 +51,7 @@ In production use on several boats.
50
51
  ## Requirements
51
52
 
52
53
  * This plugin running inside your Signal K installation
53
- * One [Meshtastic device](https://meshtastic.org/docs/hardware/devices/) running and connected to the same network (typically boat WiFi) as Signal K. This should be an [ESP32 based](https://meshtastic.org/docs/hardware/devices/heltec-automation/lora32/?heltec=v3) device for WiFi connectivity.<br>
54
- If using Serial connection, it can also be a nRF52 device
54
+ * One [Meshtastic device](https://meshtastic.org/docs/hardware/devices/) running and connected to the same network (typically boat WiFi) as Signal K. This should be an [ESP32 based](https://meshtastic.org/docs/hardware/devices/heltec-automation/lora32/?heltec=v3) device for WiFi connectivity.
55
55
  * At least one additional Meshtastic device for the crew ashore. [Seeed T1000-e](https://meshtastic.org/docs/hardware/devices/seeed-studio/sensecap/card-tracker/) is a great option, but any battery-powered Meshtastic device will work. Having a device for each crew member is even better. In busy areas these should be set to [`CLIENT_MUTE` role](https://meshtastic.org/blog/choosing-the-right-device-role/)
56
56
  * Optionally, a Meshtastic GPS tracker device installed in the dinghy
57
57
  * Optionally, a [Meshtastic mast-top repeater](https://www.printables.com/model/1396221-meshtastic-boat-module-masthead) for greatly increased communications range
@@ -91,26 +91,4 @@ Metrics used:
91
91
 
92
92
  ## Changes
93
93
 
94
- * 1.2.3 (2024-10-15)
95
- - Nodes that haven't been seen in last two days are no longer registered to Signal K data structure
96
- - Added safeties for various non-numeric telemetry and coordinate values
97
- * 1.2.2 (2025-10-01)
98
- - Set "last seen" timestamp of nodes based on packet payloads, not the time they're received
99
- - Send timestamp with telemetry
100
- - Fixed issue with persising node-to-vessel matches from `DE <callsign>`
101
- * 1.2.1 (2025-09-28)
102
- - Fixed issue with Signal K servers that don't have navigation.position set
103
- * 1.2.0 (2025-09-28)
104
- - Support for Node.js older than 22.x, for example as seen in Venus OS Large
105
- - Safety for nodes in DB that don't have a "last seen" timestamp
106
- - Made connection status notifications clearer
107
- * 1.1.2 (2025-09-25)
108
- - Added support for the new roles from Meshtastic 2.7 (`ROUTER_LATE` and `CLIENT_BASE`)
109
- - Fixed issue with sending a bell with alerts that have sound enabled
110
- * 1.1.1 (2025-09-18)
111
- - Fixed empty response text message to digital switching actions
112
- - Added support for the proposed Signal K MOB position specification
113
- * 1.1.0 (2025-09-11)
114
- - Added support for Serial transport with the Meshtastic device
115
- * 1.0.0 (2025-09-11)
116
- - Initial release with HTTP and TCP transports
94
+ See <CHANGELOG.md>
package/doc/mpwrd.png ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meri-imperiumi/signalk-meshtastic",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "description": "Signal K plugin for interfacing with the Meshtastic LoRa mesh network",
5
5
  "scripts": {
6
6
  "test": "eslint ."
@@ -16,11 +16,20 @@
16
16
  "keywords": [
17
17
  "meshtastic",
18
18
  "signalk-node-server-plugin",
19
- "signalk-category-ais",
20
- "signalk-category-hardware"
19
+ "signalk-category-hardware",
20
+ "signalk-category-notifications"
21
21
  ],
22
22
  "main": "plugin/index.js",
23
23
  "signalk-plugin-enabled-by-default": false,
24
+ "signalk": {
25
+ "appIcon": "./doc/mpwrd.png",
26
+ "displayName": "Meshtastic Integration",
27
+ "screenshots": [
28
+ "./doc/meshtastic-bequia.png",
29
+ "./doc/config-crew-role.png",
30
+ "./doc/telemetry.png"
31
+ ]
32
+ },
24
33
  "author": "Henri Bergius <henri.bergius@iki.fi>",
25
34
  "license": "GPLV3",
26
35
  "publishConfig": {
@@ -30,8 +39,7 @@
30
39
  "@bufbuild/protobuf": "^2.6.0",
31
40
  "@meshtastic/core": "^2.6.7",
32
41
  "@meshtastic/transport-http": "^0.2.5",
33
- "@meshtastic/transport-node": "^0.0.2",
34
- "@meshtastic/transport-node-serial": "^0.0.2"
42
+ "@meshtastic/transport-node": "^0.0.2"
35
43
  },
36
44
  "devDependencies": {
37
45
  "eslint": "^8.57.1",
package/plugin/index.js CHANGED
@@ -16,7 +16,6 @@ if (!global.crypto) {
16
16
  let MeshDevice;
17
17
  let TransportHTTP;
18
18
  let TransportNode;
19
- let TransportNodeSerial;
20
19
  let create;
21
20
  let toBinary;
22
21
  let Protobuf;
@@ -237,10 +236,6 @@ module.exports = (app) => {
237
236
  })
238
237
  .then((lib) => {
239
238
  TransportNode = lib.TransportNode;
240
- return import('@meshtastic/transport-node-serial');
241
- })
242
- .then((lib) => {
243
- TransportNodeSerial = lib.TransportNodeSerial;
244
239
  return import('@bufbuild/protobuf');
245
240
  })
246
241
  .then((lib) => {
@@ -511,7 +506,13 @@ module.exports = (app) => {
511
506
  readFile(nodeDbFile, 'utf-8')
512
507
  .catch(() => '{}')
513
508
  .then((nodeDb) => {
514
- const nodeDbData = JSON.parse(nodeDb);
509
+ let nodeDbData;
510
+ try {
511
+ nodeDbData = JSON.parse(nodeDb);
512
+ } catch (e) {
513
+ app.debug('Error reading Node DB file', e);
514
+ nodeDbData = {};
515
+ }
515
516
  Object.keys(nodeDbData)
516
517
  .forEach((nodeNum) => {
517
518
  nodes[nodeNum] = nodeDbData[nodeNum];
@@ -524,9 +525,6 @@ module.exports = (app) => {
524
525
  if (settings.device && settings.device.transport === 'http') {
525
526
  return TransportHTTP.create(settings.device.address);
526
527
  }
527
- if (settings.device && settings.device.transport === 'serial') {
528
- return TransportNodeSerial.create(settings.device.address);
529
- }
530
528
  return TransportNode.create(settings.device.address);
531
529
  })
532
530
  .then((transport) => {
@@ -986,7 +984,7 @@ module.exports = (app) => {
986
984
  plugin.schema = () => {
987
985
  function nodeList() {
988
986
  if (Object.keys(nodes).length === 0) {
989
- return undefined;
987
+ return [];
990
988
  }
991
989
  return Object.keys(nodes)
992
990
  .filter((nodeId) => {
@@ -1023,10 +1021,6 @@ module.exports = (app) => {
1023
1021
  const: 'http',
1024
1022
  title: 'HTTP (nodes connected to same network, typically ESP32)',
1025
1023
  },
1026
- {
1027
- const: 'serial',
1028
- title: 'Serial port (use full path to serial device as "address")',
1029
- },
1030
1024
  ],
1031
1025
  },
1032
1026
  address: {