From 1ee526caf7ee0038683845707bc3f568bfb6c38d Mon Sep 17 00:00:00 2001 From: Anton Roslund Date: Wed, 6 Aug 2025 19:48:26 +0200 Subject: [PATCH] Collect is_unmessagable, and public_key. --- .../migration.sql | 3 ++ prisma/schema.prisma | 2 + src/mqtt.js | 40 ++++++++++++------- 3 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 prisma/migrations/20250805210540_add_node_pulickey_and_unmessagable/migration.sql diff --git a/prisma/migrations/20250805210540_add_node_pulickey_and_unmessagable/migration.sql b/prisma/migrations/20250805210540_add_node_pulickey_and_unmessagable/migration.sql new file mode 100644 index 0000000..5c2e5ac --- /dev/null +++ b/prisma/migrations/20250805210540_add_node_pulickey_and_unmessagable/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE `nodes` ADD COLUMN `is_unmessagable` BOOLEAN NULL, + ADD COLUMN `public_key` VARCHAR(191) NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0344e71..fcb0a77 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -21,6 +21,8 @@ model Node { hardware_model Int role Int is_licensed Boolean? + public_key String? + is_unmessagable Boolean? firmware_version String? region Int? diff --git a/src/mqtt.js b/src/mqtt.js index 6987db8..c7a2b1d 100644 --- a/src/mqtt.js +++ b/src/mqtt.js @@ -917,7 +917,6 @@ client.on("message", async (topic, message) => { else if(portnum === 4) { const user = User.decode(envelope.packet.decoded.payload); - let isOkToMqtt = null if(logKnownPacketTypes) { console.log("NODEINFO_APP", { @@ -926,7 +925,9 @@ client.on("message", async (topic, message) => { }); } - // check if bitfield is available, then check if ok-to-mqtt + // check if bitfield is available, then set ok-to-mqtt + // else leave undefined to let Prisma ignore it. + let isOkToMqtt if(bitfield != null){ isOkToMqtt = Boolean(bitfield & BITFIELD_OK_TO_MQTT_MASK); } @@ -944,15 +945,17 @@ client.on("message", async (topic, message) => { hardware_model: user.hwModel, is_licensed: user.isLicensed === true, role: user.role, - // Since packages beeing forwarded by older firmwars dropps the bitfield - // We only want to set form nodes that have the bitfield set. - // That way we can get a more correct reading firmware status in the mesh. - // This works since we had the old code: - // firmware_version: (bitfield != null) ? '2.5.0 or newer' : '2.4.3 or older', - ...(bitfield != null && { - firmware_version: '2.5.0 or newer', - ok_to_mqtt: isOkToMqtt, - }), + is_unmessagable: user.isUnmessagable, + ok_to_mqtt: isOkToMqtt, + + firmware_version: '<2.5.0', + ...(user.publicKey != '' && { + firmware_version: '>2.5.0', + public_key: user.publicKey?.toString("base64"), + }), + ...(user.isUnmessagable != null && { + firmware_version: '>2.6.8', + }), }, update: { long_name: user.longName, @@ -960,9 +963,16 @@ client.on("message", async (topic, message) => { hardware_model: user.hwModel, is_licensed: user.isLicensed === true, role: user.role, - ...(bitfield != null && { - firmware_version: '2.5.0 or newer', - ok_to_mqtt: isOkToMqtt, + is_unmessagable: user.isUnmessagable, + ok_to_mqtt: isOkToMqtt, + + firmware_version: '<2.5.0', + ...(user.publicKey != '' && { + firmware_version: '>2.5.0', + public_key: user.publicKey?.toString("base64"), + }), + ...(user.isUnmessagable != null && { + firmware_version: '>2.6.8', }), }, }); @@ -1429,6 +1439,6 @@ client.on("message", async (topic, message) => { } } catch(e) { - // ignore errors + console.log("error", e); } });