telemetry support

This commit is contained in:
Benjamin Faershtein 2026-02-21 16:08:31 -08:00
parent b6d0eb3565
commit 239f1ac5cc
2 changed files with 36 additions and 7 deletions

View file

@ -131,7 +131,8 @@ struct CoTMessage: Identifiable, Sendable {
team: String = "Cyan",
role: String = "Team Member",
battery: Int = 100,
staleMinutes: Int = 10
staleMinutes: Int = 10,
remarks: String? = nil
) -> CoTMessage {
let now = Date()
return CoTMessage(
@ -149,7 +150,8 @@ struct CoTMessage: Identifiable, Sendable {
contact: CoTContact(callsign: callsign, endpoint: "0.0.0.0:4242:tcp"),
group: CoTGroup(name: team, role: role),
status: CoTStatus(battery: battery),
track: CoTTrack(speed: speed, course: course)
track: CoTTrack(speed: speed, course: course),
remarks: remarks
)
}

View file

@ -460,11 +460,37 @@ final class TAKMeshtasticBridge {
}
let uid = "MESHTASTIC-\(String(format: "%08X", node.num))"
let callsign = node.user?.shortName ?? node.user?.longName ?? "MESH-\(node.num)"
// Get battery level from device metrics
let battery = Int(node.latestDeviceMetrics?.batteryLevel ?? 100)
// Format: "SHORT - Long Name" or just "ShortName" if no long name
let callsign: String
if let shortName = node.user?.shortName, let longName = node.user?.longName, !longName.isEmpty {
callsign = "\(shortName) - \(longName)"
} else {
callsign = node.user?.shortName ?? node.user?.longName ?? "MESH-\(node.num)"
}
// Get telemetry from device metrics
let deviceMetrics = node.latestDeviceMetrics
let battery = Int(deviceMetrics?.batteryLevel ?? 100)
let voltage = deviceMetrics?.voltage ?? 0
let channelUtil = deviceMetrics?.channelUtilization ?? 0
let rssi = deviceMetrics?.rssi ?? 0
let snr = deviceMetrics?.snr ?? 0
// Build remarks with telemetry info
var remarks = "Battery: \(battery)%"
if voltage > 0 {
remarks += " | Voltage: \(String(format: "%.2f", voltage))V"
}
if channelUtil > 0 {
remarks += " | Chan Util: \(String(format: "%.1f", channelUtil))%"
}
if rssi != 0 {
remarks += " | RSSI: \(rssi) dBm"
}
if snr != 0 {
remarks += " | SNR: \(String(format: "%.1f", snr)) dB"
}
return CoTMessage.pli(
uid: uid,
callsign: callsign,
@ -476,7 +502,8 @@ final class TAKMeshtasticBridge {
team: "Green", // Meshtastic nodes shown as green by default
role: "Team Member",
battery: battery,
staleMinutes: 15 // Meshtastic positions can be older
staleMinutes: 15, // Meshtastic positions can be older
remarks: remarks
)
}