Compare commits

2 Commits

Author SHA1 Message Date
2f76091ae6 fix nodeinfo and telemetry
All checks were successful
Build Docker containers / Build (push) Successful in 42s
2025-04-18 13:06:11 +00:00
0f4035ec3a add debug-incoming-packets option
All checks were successful
Build Docker containers / Build (push) Successful in 42s
2025-04-17 14:22:37 +00:00

View File

@ -107,6 +107,11 @@ const optionsList = [
type: Boolean, type: Boolean,
description: "This option will drop all packets that have 'OK to MQTT' set to false.", description: "This option will drop all packets that have 'OK to MQTT' set to false.",
}, },
{
name: "debug-incoming-packets",
type: Boolean,
description: "This option will print out all known packets as they arrive.",
},
{ {
name: "drop-portnums-without-bitfield", name: "drop-portnums-without-bitfield",
type: Number, type: Number,
@ -225,7 +230,7 @@ const collectorEnabled = {
const decryptionKeys = options["decryption-keys"] ?? [ const decryptionKeys = options["decryption-keys"] ?? [
"1PG7OiApB1nwvP+rz05pAQ==", // add default "AQ==" decryption key "1PG7OiApB1nwvP+rz05pAQ==", // add default "AQ==" decryption key
]; ];
const logKnownPacketTypes = false; const logKnownPacketTypes = options["debug-incoming-packets"] ?? false;
const dropPacketsNotOkToMqtt = options["drop-packets-not-ok-to-mqtt"] ?? false; const dropPacketsNotOkToMqtt = options["drop-packets-not-ok-to-mqtt"] ?? false;
const dropPortnumsWithoutBitfield = options["drop-portnums-without-bitfield"] ?? null; const dropPortnumsWithoutBitfield = options["drop-portnums-without-bitfield"] ?? null;
const oldFirmwarePositionPrecision = options["old-firmware-position-precision"] ?? null; const oldFirmwarePositionPrecision = options["old-firmware-position-precision"] ?? null;
@ -787,7 +792,7 @@ client.on('message', async (topic, message) => {
break; break;
case Portnums.PortNum.NODEINFO_APP: case Portnums.PortNum.NODEINFO_APP:
callback = onNodeInfo; callback = onNodeInfo;
schema = Mesh.NodeInfoSchema; schema = Mesh.UserSchema;
break; break;
case Portnums.PortNum.WAYPOINT_APP: case Portnums.PortNum.WAYPOINT_APP:
callback = onWaypoint; callback = onWaypoint;
@ -1218,25 +1223,28 @@ async function onRouteDiscovery(envelope, payload) {
} }
async function onTelemetry(envelope, payload) { async function onTelemetry(envelope, payload) {
// we need to do some work on the packet to log it properly
const telemetryType = payload.variant.case
if(logKnownPacketTypes) { if(logKnownPacketTypes) {
console.log('TELEMETRY_APP', { console.log('TELEMETRY_APP', {
from: envelope.packet.from.toString(16), from: envelope.packet.from.toString(16),
telemetry: payload, type: telemetryType,
telemetry: payload.variant.value,
}); });
} }
payload = payload.variant.value
// data to update // data to update
const data = {}; const data = {};
// handle device metrics // handle device metrics
if(payload.deviceMetrics){ if (telemetryType === 'deviceMetrics'){
data.battery_level = payload.deviceMetrics.batteryLevel !== 0 ? payload.deviceMetrics.batteryLevel : null; data.battery_level = payload.batteryLevel !== 0 ? payload.batteryLevel : null;
data.voltage = payload.deviceMetrics.voltage !== 0 ? payload.deviceMetrics.voltage : null; data.voltage = payload.voltage !== 0 ? payload.voltage : null;
data.channel_utilization = payload.deviceMetrics.channelUtilization !== 0 ? payload.deviceMetrics.channelUtilization : null; data.channel_utilization = payload.channelUtilization !== 0 ? payload.channelUtilization : null;
data.air_util_tx = payload.deviceMetrics.airUtilTx !== 0 ? payload.deviceMetrics.airUtilTx : null; data.air_util_tx = payload.airUtilTx !== 0 ? payload.airUtilTx : null;
data.uptime_seconds = payload.deviceMetrics.uptimeSeconds !== 0 ? payload.deviceMetrics.uptimeSeconds : null; data.uptime_seconds = payload.uptimeSeconds !== 0 ? payload.uptimeSeconds : null;
// create device metric // create device metric
try { try {
@ -1275,20 +1283,20 @@ async function onTelemetry(envelope, payload) {
} }
// handle environment metrics // handle environment metrics
if(payload.environmentMetrics){ if(telemetryType === 'environmentMetrics'){
// get metric values // get metric values
const temperature = payload.environmentMetrics.temperature !== 0 ? payload.environmentMetrics.temperature : null; const temperature = payload.temperature !== 0 ? payload.temperature : null;
const relativeHumidity = payload.environmentMetrics.relativeHumidity !== 0 ? payload.environmentMetrics.relativeHumidity : null; const relativeHumidity = payload.relativeHumidity !== 0 ? payload.relativeHumidity : null;
const barometricPressure = payload.environmentMetrics.barometricPressure !== 0 ? payload.environmentMetrics.barometricPressure : null; const barometricPressure = payload.barometricPressure !== 0 ? payload.barometricPressure : null;
const gasResistance = payload.environmentMetrics.gasResistance !== 0 ? payload.environmentMetrics.gasResistance : null; const gasResistance = payload.gasResistance !== 0 ? payload.gasResistance : null;
const voltage = payload.environmentMetrics.voltage !== 0 ? payload.environmentMetrics.voltage : null; const voltage = payload.voltage !== 0 ? payload.voltage : null;
const current = payload.environmentMetrics.current !== 0 ? payload.environmentMetrics.current : null; const current = payload.current !== 0 ? payload.current : null;
const iaq = payload.environmentMetrics.iaq !== 0 ? payload.environmentMetrics.iaq : null; const iaq = payload.iaq !== 0 ? payload.iaq : null;
const windDirection = payload.environmentMetrics.windDirection; const windDirection = payload.windDirection;
const windSpeed = payload.environmentMetrics.windSpeed; const windSpeed = payload.windSpeed;
const windGust = payload.environmentMetrics.windGust; const windGust = payload.windGust;
const windLull = payload.environmentMetrics.windLull; const windLull = payload.windLull;
// set metrics to update on node table // set metrics to update on node table
data.temperature = temperature; data.temperature = temperature;
@ -1337,15 +1345,15 @@ async function onTelemetry(envelope, payload) {
} }
// handle power metrics // handle power metrics
if(payload.powerMetrics){ if(telemetryType === 'powerMetrics'){
// get metric values // get metric values
const ch1Voltage = payload.powerMetrics.ch1Voltage !== 0 ? payload.powerMetrics.ch1Voltage : null; const ch1Voltage = payload.ch1Voltage !== 0 ? payload.ch1Voltage : null;
const ch1Current = payload.powerMetrics.ch1Current !== 0 ? payload.powerMetrics.ch1Current : null; const ch1Current = payload.ch1Current !== 0 ? payload.ch1Current : null;
const ch2Voltage = payload.powerMetrics.ch2Voltage !== 0 ? payload.powerMetrics.ch2Voltage : null; const ch2Voltage = payload.ch2Voltage !== 0 ? payload.ch2Voltage : null;
const ch2Current = payload.powerMetrics.ch2Current !== 0 ? payload.powerMetrics.ch2Current : null; const ch2Current = payload.ch2Current !== 0 ? payload.ch2Current : null;
const ch3Voltage = payload.powerMetrics.ch3Voltage !== 0 ? payload.powerMetrics.ch3Voltage : null; const ch3Voltage = payload.ch3Voltage !== 0 ? payload.ch3Voltage : null;
const ch3Current = payload.powerMetrics.ch3Current !== 0 ? payload.powerMetrics.ch3Current : null; const ch3Current = payload.ch3Current !== 0 ? payload.ch3Current : null;
// create power metric // create power metric
try { try {