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.
This commit is contained in:
@@ -0,0 +1,428 @@
|
||||
{
|
||||
"page": {
|
||||
"title": "Конфигурация",
|
||||
"tabBluetooth": "Bluetooth",
|
||||
"tabDevice": "Устройство",
|
||||
"tabDisplay": "Дисплей",
|
||||
"tabLora": "LoRa",
|
||||
"tabNetwork": "Мрежа",
|
||||
"tabPosition": "Позиция",
|
||||
"tabPower": "Захранване",
|
||||
"tabSecurity": "Сигурност"
|
||||
},
|
||||
"sidebar": {
|
||||
"label": "Модули"
|
||||
},
|
||||
"device": {
|
||||
"title": "Настройки на устройството",
|
||||
"description": "Настройки за устройството",
|
||||
"buttonPin": {
|
||||
"description": "Button pin override",
|
||||
"label": "Пин за бутон"
|
||||
},
|
||||
"buzzerPin": {
|
||||
"description": "Buzzer pin override",
|
||||
"label": "Пин за зумер"
|
||||
},
|
||||
"disableTripleClick": {
|
||||
"description": "Дезактивиране на трикратното щракване",
|
||||
"label": "Дезактивиране на трикратното щракване"
|
||||
},
|
||||
"doubleTapAsButtonPress": {
|
||||
"description": "Treat double tap as button press",
|
||||
"label": "Double Tap as Button Press"
|
||||
},
|
||||
"ledHeartbeatDisabled": {
|
||||
"description": "Дезактивиране на мигащия светодиод по подразбиране",
|
||||
"label": "LED Heartbeat Disabled"
|
||||
},
|
||||
"nodeInfoBroadcastInterval": {
|
||||
"description": "How often to broadcast node info",
|
||||
"label": "Node Info Broadcast Interval"
|
||||
},
|
||||
"posixTimezone": {
|
||||
"description": "The POSIX timezone string for the device",
|
||||
"label": "POSIX часова зона"
|
||||
},
|
||||
"rebroadcastMode": {
|
||||
"description": "How to handle rebroadcasting",
|
||||
"label": "Rebroadcast Mode"
|
||||
},
|
||||
"role": {
|
||||
"description": "What role the device performs on the mesh",
|
||||
"label": "Роля"
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"title": "Настройки за Bluetooth",
|
||||
"description": "Настройки за Bluetooth модула",
|
||||
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
||||
"enabled": {
|
||||
"description": "Активиране или дезактивиране на Bluetooth",
|
||||
"label": "Активиран"
|
||||
},
|
||||
"pairingMode": {
|
||||
"description": "Поведение при избор на ПИН.",
|
||||
"label": "Режим на сдвояване"
|
||||
},
|
||||
"pin": {
|
||||
"description": "Pin to use when pairing",
|
||||
"label": "ПИН"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": "Настройки за дисплея на устройството",
|
||||
"title": "Настройки на дисплея",
|
||||
"headingBold": {
|
||||
"description": "Bolden the heading text",
|
||||
"label": "Bold Heading"
|
||||
},
|
||||
"carouselDelay": {
|
||||
"description": "Колко бързо да се превключва между прозорците",
|
||||
"label": "Carousel Delay"
|
||||
},
|
||||
"compassNorthTop": {
|
||||
"description": "Fix north to the top of compass",
|
||||
"label": "Север на компаса отгоре"
|
||||
},
|
||||
"displayMode": {
|
||||
"description": "Screen layout variant",
|
||||
"label": "Display Mode"
|
||||
},
|
||||
"displayUnits": {
|
||||
"description": "Показване на метрични или имперски мерни единици",
|
||||
"label": "Display Units"
|
||||
},
|
||||
"flipScreen": {
|
||||
"description": "Flip display 180 degrees",
|
||||
"label": "Flip Screen"
|
||||
},
|
||||
"gpsDisplayUnits": {
|
||||
"description": "Coordinate display format",
|
||||
"label": "GPS Display Units"
|
||||
},
|
||||
"oledType": {
|
||||
"description": "Тип на OLED екрана, прикрепен към устройството",
|
||||
"label": "Тип OLED"
|
||||
},
|
||||
"screenTimeout": {
|
||||
"description": "Turn off the display after this long",
|
||||
"label": "Screen Timeout"
|
||||
},
|
||||
"twelveHourClock": {
|
||||
"description": "Използване на 12-часов формат на часовника",
|
||||
"label": "12-часов часовник"
|
||||
},
|
||||
"wakeOnTapOrMotion": {
|
||||
"description": "Събуждане на устройството при докосване или движение",
|
||||
"label": "Събуждане при докосване или движение"
|
||||
}
|
||||
},
|
||||
"lora": {
|
||||
"title": "Настройки на Mesh",
|
||||
"description": "Настройки за LoRa mesh",
|
||||
"bandwidth": {
|
||||
"description": "Широчина на канала в kHz",
|
||||
"label": "Широчина на честотната лента"
|
||||
},
|
||||
"boostedRxGain": {
|
||||
"description": "Boosted RX gain",
|
||||
"label": "Boosted RX Gain"
|
||||
},
|
||||
"codingRate": {
|
||||
"description": "The denominator of the coding rate",
|
||||
"label": "Coding Rate"
|
||||
},
|
||||
"frequencyOffset": {
|
||||
"description": "Frequency offset to correct for crystal calibration errors",
|
||||
"label": "Отместване на честотата"
|
||||
},
|
||||
"frequencySlot": {
|
||||
"description": "Номер на LoRa честотен канал",
|
||||
"label": "Честотен слот"
|
||||
},
|
||||
"hopLimit": {
|
||||
"description": "Максимален брой хопове",
|
||||
"label": "Лимит на хопове"
|
||||
},
|
||||
"ignoreMqtt": {
|
||||
"description": "Да не се препращат MQTT съобщения през mesh",
|
||||
"label": "Игнориране на MQTT"
|
||||
},
|
||||
"modemPreset": {
|
||||
"description": "Използване на предварително настроен модем",
|
||||
"label": "Предварително настроен модем"
|
||||
},
|
||||
"okToMqtt": {
|
||||
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
|
||||
"label": "OK to MQTT"
|
||||
},
|
||||
"overrideDutyCycle": {
|
||||
"description": "Override Duty Cycle",
|
||||
"label": "Override Duty Cycle"
|
||||
},
|
||||
"overrideFrequency": {
|
||||
"description": "Override frequency",
|
||||
"label": "Override Frequency"
|
||||
},
|
||||
"region": {
|
||||
"description": "Задаване на региона за вашия възел",
|
||||
"label": "Регион"
|
||||
},
|
||||
"spreadingFactor": {
|
||||
"description": "Indicates the number of chirps per symbol",
|
||||
"label": "Spreading Factor"
|
||||
},
|
||||
"transmitEnabled": {
|
||||
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
|
||||
"label": "Предаването е активирано"
|
||||
},
|
||||
"transmitPower": {
|
||||
"description": "Максимална мощност на предаване",
|
||||
"label": "Мощност на предаване"
|
||||
},
|
||||
"usePreset": {
|
||||
"description": "Use one of the predefined modem presets",
|
||||
"label": "Използване на предварително зададени настройки"
|
||||
},
|
||||
"meshSettings": {
|
||||
"description": "Настройки за LoRa mesh",
|
||||
"label": "Настройки на Mesh"
|
||||
},
|
||||
"waveformSettings": {
|
||||
"description": "Settings for the LoRa waveform",
|
||||
"label": "Waveform Settings"
|
||||
},
|
||||
"radioSettings": {
|
||||
"label": "Настройки на радиото",
|
||||
"description": "Настройки за LoRa радиото"
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
"title": "Конфигурация на WiFi",
|
||||
"description": "Конфигурация на WiFi радиото",
|
||||
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
||||
"addressMode": {
|
||||
"description": "Address assignment selection",
|
||||
"label": "Режим на адреса"
|
||||
},
|
||||
"dns": {
|
||||
"description": "DNS сървър",
|
||||
"label": "DNS"
|
||||
},
|
||||
"ethernetEnabled": {
|
||||
"description": "Активиране или дезактивиране на Ethernet порта",
|
||||
"label": "Активиран"
|
||||
},
|
||||
"gateway": {
|
||||
"description": "Шлюз по подразбиране",
|
||||
"label": "Шлюз"
|
||||
},
|
||||
"ip": {
|
||||
"description": "IP адрес",
|
||||
"label": "IP"
|
||||
},
|
||||
"psk": {
|
||||
"description": "Парола за мрежата",
|
||||
"label": "PSK"
|
||||
},
|
||||
"ssid": {
|
||||
"description": "Име на мрежата",
|
||||
"label": "SSID"
|
||||
},
|
||||
"subnet": {
|
||||
"description": "Подмрежова маска",
|
||||
"label": "Подмрежа"
|
||||
},
|
||||
"wifiEnabled": {
|
||||
"description": "Активиране или дезактивиране на WiFi радиото",
|
||||
"label": "Активиран"
|
||||
},
|
||||
"meshViaUdp": {
|
||||
"label": "Mesh чрез UDP"
|
||||
},
|
||||
"ntpServer": {
|
||||
"label": "NTP сървър"
|
||||
},
|
||||
"rsyslogServer": {
|
||||
"label": "Сървър Rsyslog"
|
||||
},
|
||||
"ethernetConfigSettings": {
|
||||
"description": "Конфигурация на Ethernet порта",
|
||||
"label": "Конфигурация на Ethernet "
|
||||
},
|
||||
"ipConfigSettings": {
|
||||
"description": "Конфигуриране на IP",
|
||||
"label": "Конфигурация на IP"
|
||||
},
|
||||
"ntpConfigSettings": {
|
||||
"description": "Конфигуриране на NTP",
|
||||
"label": "Конфигурация на NTP"
|
||||
},
|
||||
"rsyslogConfigSettings": {
|
||||
"description": "Конфигурация на Rsyslog",
|
||||
"label": "Конфиг. на Rsyslog"
|
||||
},
|
||||
"udpConfigSettings": {
|
||||
"description": "Конфигурация на UDP през Mesh",
|
||||
"label": "Конфигурация на UDP"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"title": "Настройки на позицията",
|
||||
"description": "Настройки за модула за позиция",
|
||||
"broadcastInterval": {
|
||||
"description": "How often your position is sent out over the mesh",
|
||||
"label": "Broadcast Interval"
|
||||
},
|
||||
"enablePin": {
|
||||
"description": "GPS module enable pin override",
|
||||
"label": "Активиране на пин"
|
||||
},
|
||||
"fixedPosition": {
|
||||
"description": "Don't report GPS position, but a manually-specified one",
|
||||
"label": "Фиксирана позиция"
|
||||
},
|
||||
"gpsMode": {
|
||||
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
||||
"label": "Режим на GPS"
|
||||
},
|
||||
"gpsUpdateInterval": {
|
||||
"description": "How often a GPS fix should be acquired",
|
||||
"label": "Интервал на актуализиране на GPS"
|
||||
},
|
||||
"positionFlags": {
|
||||
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
|
||||
"label": "Position Flags"
|
||||
},
|
||||
"receivePin": {
|
||||
"description": "GPS module RX pin override",
|
||||
"label": "Receive Pin"
|
||||
},
|
||||
"smartPositionEnabled": {
|
||||
"description": "Only send position when there has been a meaningful change in location",
|
||||
"label": "Enable Smart Position"
|
||||
},
|
||||
"smartPositionMinDistance": {
|
||||
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
||||
"label": "Smart Position Minimum Distance"
|
||||
},
|
||||
"smartPositionMinInterval": {
|
||||
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
||||
"label": "Smart Position Minimum Interval"
|
||||
},
|
||||
"transmitPin": {
|
||||
"description": "GPS module TX pin override",
|
||||
"label": "Transmit Pin"
|
||||
},
|
||||
"intervalsSettings": {
|
||||
"description": "How often to send position updates",
|
||||
"label": "Интервали"
|
||||
},
|
||||
"flags": {
|
||||
"placeholder": "Select position flags...",
|
||||
"altitude": "Надморска височина",
|
||||
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
||||
"altitudeMsl": "Altitude is Mean Sea Level",
|
||||
"dop": "Dilution of precision (DOP) PDOP used by default",
|
||||
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
||||
"numSatellites": "Брой сателити",
|
||||
"sequenceNumber": "Sequence number",
|
||||
"timestamp": "Времево клеймо",
|
||||
"unset": "Не е зададен",
|
||||
"vehicleHeading": "Vehicle heading",
|
||||
"vehicleSpeed": "Скорост на превозното средство"
|
||||
}
|
||||
},
|
||||
"power": {
|
||||
"adcMultiplierOverride": {
|
||||
"description": "Used for tweaking battery voltage reading",
|
||||
"label": "ADC Multiplier Override ratio"
|
||||
},
|
||||
"ina219Address": {
|
||||
"description": "Address of the INA219 battery monitor",
|
||||
"label": "INA219 адрес"
|
||||
},
|
||||
"lightSleepDuration": {
|
||||
"description": "How long the device will be in light sleep for",
|
||||
"label": "Light Sleep Duration"
|
||||
},
|
||||
"minimumWakeTime": {
|
||||
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
||||
"label": "Minimum Wake Time"
|
||||
},
|
||||
"noConnectionBluetoothDisabled": {
|
||||
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
||||
"label": "Няма връзка Bluetooth е дезактивиран"
|
||||
},
|
||||
"powerSavingEnabled": {
|
||||
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
||||
"label": "Активиране на енергоспестяващ режим"
|
||||
},
|
||||
"shutdownOnBatteryDelay": {
|
||||
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
||||
"label": "Shutdown on battery delay"
|
||||
},
|
||||
"superDeepSleepDuration": {
|
||||
"description": "How long the device will be in super deep sleep for",
|
||||
"label": "Super Deep Sleep Duration"
|
||||
},
|
||||
"powerConfigSettings": {
|
||||
"description": "Settings for the power module",
|
||||
"label": "Конфигурация на захранването"
|
||||
},
|
||||
"sleepSettings": {
|
||||
"description": "Sleep settings for the power module",
|
||||
"label": "Sleep Settings"
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"description": "Settings for the Security configuration",
|
||||
"title": "Насртойки на сигурността",
|
||||
"button_backupKey": "Резервно копие на ключа",
|
||||
"adminChannelEnabled": {
|
||||
"description": "Allow incoming device control over the insecure legacy admin channel",
|
||||
"label": "Allow Legacy Admin"
|
||||
},
|
||||
"enableDebugLogApi": {
|
||||
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
||||
"label": "Enable Debug Log API"
|
||||
},
|
||||
"managed": {
|
||||
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
|
||||
"label": "Управляван"
|
||||
},
|
||||
"privateKey": {
|
||||
"description": "Използва се за създаване на споделен ключ с отдалечено устройство",
|
||||
"label": "Частен ключ"
|
||||
},
|
||||
"publicKey": {
|
||||
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
||||
"label": "Публичен ключ"
|
||||
},
|
||||
"primaryAdminKey": {
|
||||
"description": "Основният публичен ключ, оторизиран за изпращане на администраторски съобщения до този възел",
|
||||
"label": "Основен администраторски ключ"
|
||||
},
|
||||
"secondaryAdminKey": {
|
||||
"description": "Вторичният публичен ключ, оторизиран за изпращане на администраторски съобщения до този възел",
|
||||
"label": "Вторичен администраторски ключ"
|
||||
},
|
||||
"serialOutputEnabled": {
|
||||
"description": "Serial Console over the Stream API",
|
||||
"label": "Serial Output Enabled"
|
||||
},
|
||||
"tertiaryAdminKey": {
|
||||
"description": "Третичният публичен ключ, оторизиран за изпращане на администраторски съобщения до този възел",
|
||||
"label": "Третичен администраторски ключ"
|
||||
},
|
||||
"adminSettings": {
|
||||
"description": "Настройки за Admin",
|
||||
"label": "Администраторски настройки"
|
||||
},
|
||||
"loggingSettings": {
|
||||
"description": "Settings for Logging",
|
||||
"label": "Logging Settings"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user