Files
web/packages/protobufs/meshtastic/mqtt.proto
Ben Meadors bbe9a0d5cd feat(protobufs): sync to firmware-current and consume workspace package (#1097)
* feat(protobufs): sync to firmware-current and consume workspace package

Sync the vendored .proto sources to firmware-current (v2.7.25+48), regenerate the v2 TS bindings, and consume the workspace @meshtastic/protobufs (workspace:*) in place of the stale JSR 2.7.20 — finishing the monorepo migration (core was already workspace:*).

Includes the one required breaking-change fix: admin nodedb_reset changed int32 to bool, so resetNodes() now sends value: true.

* build(protobufs): vendor generated bindings for workspace consumers

The package is consumed via workspace:* — its exports point at the TS source, which imports ./dist/meshtastic/*_pb.ts — so the generated output must exist at build time. CI builds web/core with no codegen step and the runners have no buf CLI, so the bindings are vendored here (kept gitignored; lint/format skip them). Regenerate with: pnpm --filter @meshtastic/protobufs gen

* fix(protobufs): clean script removes the actual generated output dir

buf writes bindings to packages/ts/dist, but clean was removing a non-existent root dist — so it never cleaned stale output. Addresses Copilot review feedback.

* refactor: move web app packages/web -> apps/web

Aligns the web app with the apps/web layout (matching the Vercel web-test Root Directory and the SDK-migration direction). Pure directory move plus root config: pnpm-workspace (adds apps/*), vitest projects, root tsconfig reference, and the pr/release-web/nightly workflows. vercel.json moved with the app. Build + 36 validation tests green.

* feat: config fields, module pages, key verification, telemetry capture

Incorporates the firmware-current feature work onto the protobuf foundation: new config fields (Display message bubbles; LoRa fem_lna_mode + serial_hal_only; Telemetry air_quality_screen_enabled); 4 new ModuleConfig pages (TrafficManagement, StatusMessage, TAK, RemoteHardware); the manual Key Verification flow (sendKeyVerification + ClientNotificationDialog stages + Verify Key button); live telemetry capture (nodeDB addDeviceMetrics) and admin hardening (toggleMutedNode, graceful PortNum default); plus the sdk-preview ConfigEditor demo and store/config tests. Build + lint + format + 131 tests green.

* chore: drop #1062 (unsaved-change-detection) to match upstream revert

#1062 was merged to main by accident (per @danditomaso) and is being reverted. Reverse-applied its diff here via 3-way so #1097 stays consistent with where main is headed, while keeping the feature changes layered on the same files (deviceStore/changeRegistry). Build + 131 tests + lint + format green.

* fix(nodes): clean up SNR display in node table and map popup

SNR is a ratio measured in dB, not dBm (which is absolute power); the
node table and map popup both mislabeled it and crammed three values
together: '0dBm/50%/50raw'. The trailing '%/raw' pair was the same
heuristic ((snr+10)*5) shown twice — once clamped, once not.

Render SNR in dB rounded to one decimal, color-coded by a 0-100%
signal-quality heuristic (green/yellow/red), with the quality percentage
as a muted secondary. Drop the redundant raw value. Adds unit.db; this
matches the existing SNRTooltip, which already renders dB.
2026-06-15 13:23:28 -05:00

113 lines
2.7 KiB
Protocol Buffer

syntax = "proto3";
package meshtastic;
import "meshtastic/config.proto";
import "meshtastic/mesh.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "MQTTProtos";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
* This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
*/
message ServiceEnvelope {
/*
* The (probably encrypted) packet
*/
MeshPacket packet = 1;
/*
* The global channel ID it was sent on
*/
string channel_id = 2;
/*
* The sending gateway node ID. Can we use this to authenticate/prevent fake
* nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
* the globally trusted nodenum
*/
string gateway_id = 3;
}
/*
* Information about a node intended to be reported unencrypted to a map using MQTT.
*/
message MapReport {
/*
* A full name for this user, i.e. "Kevin Hester"
*/
string long_name = 1;
/*
* A VERY short name, ideally two characters.
* Suitable for a tiny OLED screen
*/
string short_name = 2;
/*
* Role of the node that applies specific settings for a particular use-case
*/
Config.DeviceConfig.Role role = 3;
/*
* Hardware model of the node, i.e. T-Beam, Heltec V3, etc...
*/
HardwareModel hw_model = 4;
/*
* Device firmware version string
*/
string firmware_version = 5;
/*
* The region code for the radio (US, CN, EU433, etc...)
*/
Config.LoRaConfig.RegionCode region = 6;
/*
* Modem preset used by the radio (LongFast, MediumSlow, etc...)
*/
Config.LoRaConfig.ModemPreset modem_preset = 7;
/*
* Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
* and it uses the default frequency slot given the region and modem preset.
*/
bool has_default_channel = 8;
/*
* Latitude: multiply by 1e-7 to get degrees in floating point
*/
sfixed32 latitude_i = 9;
/*
* Longitude: multiply by 1e-7 to get degrees in floating point
*/
sfixed32 longitude_i = 10;
/*
* Altitude in meters above MSL
*/
int32 altitude = 11;
/*
* Indicates the bits of precision for latitude and longitude set by the sending node
*/
uint32 position_precision = 12;
/*
* Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
*/
uint32 num_online_local_nodes = 13;
/*
* User has opted in to share their location (map report) with the mqtt server
* Controlled by map_report.should_report_location
*/
bool has_opted_report_location = 14;
}