Merge pull request #22 from Roslund/additional_node_info

Collect is_unmessagable, and public_key.
This commit is contained in:
Anton Roslund 2025-08-06 20:00:57 +02:00 committed by GitHub
commit 5984b8b243
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 15 deletions

View file

@ -0,0 +1,3 @@
-- AlterTable
ALTER TABLE `nodes` ADD COLUMN `is_unmessagable` BOOLEAN NULL,
ADD COLUMN `public_key` VARCHAR(191) NULL;

View file

@ -21,6 +21,8 @@ model Node {
hardware_model Int hardware_model Int
role Int role Int
is_licensed Boolean? is_licensed Boolean?
public_key String?
is_unmessagable Boolean?
firmware_version String? firmware_version String?
region Int? region Int?

View file

@ -917,7 +917,6 @@ client.on("message", async (topic, message) => {
else if(portnum === 4) { else if(portnum === 4) {
const user = User.decode(envelope.packet.decoded.payload); const user = User.decode(envelope.packet.decoded.payload);
let isOkToMqtt = null
if(logKnownPacketTypes) { if(logKnownPacketTypes) {
console.log("NODEINFO_APP", { 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){ if(bitfield != null){
isOkToMqtt = Boolean(bitfield & BITFIELD_OK_TO_MQTT_MASK); isOkToMqtt = Boolean(bitfield & BITFIELD_OK_TO_MQTT_MASK);
} }
@ -944,14 +945,16 @@ client.on("message", async (topic, message) => {
hardware_model: user.hwModel, hardware_model: user.hwModel,
is_licensed: user.isLicensed === true, is_licensed: user.isLicensed === true,
role: user.role, role: user.role,
// Since packages beeing forwarded by older firmwars dropps the bitfield is_unmessagable: user.isUnmessagable,
// 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, 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: { update: {
@ -960,9 +963,16 @@ client.on("message", async (topic, message) => {
hardware_model: user.hwModel, hardware_model: user.hwModel,
is_licensed: user.isLicensed === true, is_licensed: user.isLicensed === true,
role: user.role, role: user.role,
...(bitfield != null && { is_unmessagable: user.isUnmessagable,
firmware_version: '2.5.0 or newer',
ok_to_mqtt: isOkToMqtt, 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) { } catch(e) {
// ignore errors console.log("error", e);
} }
}); });