diff --git a/Meshtastic/Resources/docs/assets/screenshots/settingsLanguageRegion.png b/Meshtastic/Resources/docs/assets/screenshots/settingsLanguageRegion.png new file mode 100644 index 000000000..c13d7f784 Binary files /dev/null and b/Meshtastic/Resources/docs/assets/screenshots/settingsLanguageRegion.png differ diff --git a/Meshtastic/Resources/docs/index.json b/Meshtastic/Resources/docs/index.json index 59fb8e342..d834065f8 100644 --- a/Meshtastic/Resources/docs/index.json +++ b/Meshtastic/Resources/docs/index.json @@ -545,6 +545,45 @@ ], "charCount": 1115 }, + { + "id": "units-and-locale", + "title": "Units, Measurement & Locale", + "section": "user", + "navOrder": 9, + "keywords": [ + "system", + "app", + "setting", + "metric", + "measurement", + "node", + "temperature", + "imperial", + "distances", + "distance", + "date", + "amp", + "units", + "telemetry", + "meshtastic", + "device", + "automatically", + "weather", + "unit", + "transmitted", + "speed", + "see", + "locale", + "language", + "gps", + "displays", + "change", + "altitude", + "uses", + "time" + ], + "charCount": 4817 + }, { "id": "watch", "title": "Apple Watch App", diff --git a/Meshtastic/Resources/docs/user/units-and-locale.html b/Meshtastic/Resources/docs/user/units-and-locale.html new file mode 100644 index 000000000..004558b13 --- /dev/null +++ b/Meshtastic/Resources/docs/user/units-and-locale.html @@ -0,0 +1,267 @@ + + + + + + Units, Measurement & Locale + + + +
⚠️ Pre-release — subject to change

Units, Measurement & Locale

+

The Meshtastic app automatically displays temperatures, distances, speeds, and times in the units your device is configured to use — no settings to change inside the app.

+
+

How It Works

+

Meshtastic radios always transmit data in metric units (meters, °C, km/h, hPa, etc.). When the app receives this data, it hands it to your device's built-in formatting system, which converts and displays values in whatever unit system you've chosen in Settings → General → Language & Region.

+

Language & Region settings

+

The Language & Region screen controls how the Meshtastic app displays temperatures, distances, dates, numbers, and more. Key settings:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingWhat It Controls in Meshtastic
Temperature°C or °F for all sensor readings and weather
Measurement SystemMetric (m, km, kg, mm) or US/UK (ft, mi, lbs, in)
CalendarCalendar system for all dates
First Day of WeekWeek start day in date displays
Date FormatDate ordering throughout the app
Number FormatDecimal separators and digit grouping
+
Tip — You never need to toggle units inside the app. Change your system measurement preferences and every screen in Meshtastic updates automatically — node details, telemetry charts, weather, altitude, and more.
+

Temperature

+

Temperature values from environment sensors and weather forecasts are transmitted as °C and displayed as either °C or °F based on your device's temperature unit preference.

+ + + + + + + + + + + + + + + + + +
Your SettingYou See
Celsius22 °C
Fahrenheit72 °F
+

This affects all temperature displays throughout the app: node environment telemetry, soil temperature, dew point, weather forecasts, and telemetry chart axes.

+

Distance & Altitude

+

Distances between nodes and GPS altitudes are transmitted as meters and automatically scaled and converted by the system.

+ + + + + + + + + + + + + + + + + + + + + + + +
Your SettingSmall DistanceLarge DistanceAltitude
Metric350 m2.5 km1,200 m
Imperial (US)1,148 ft1.6 mi3,937 ft
+

The app uses natural scaling — short distances stay in meters or feet, while longer distances switch to kilometres or miles automatically.

+

Where these appear

+ +

Speed

+

GPS ground speed is displayed in your locale's preferred speed unit.

+ + + + + + + + + + + + + + + + + +
Your SettingYou See
Metric12 km/h
Imperial (US)7 mph
+

Speed appears on the GPS Status screen when your device has an active GPS fix.

+

Wind

+

Wind speed and gust data from environment sensors are transmitted as m/s and converted for display.

+ + + + + + + + + + + + + + + + + +
Your SettingYou See
Metric5 m/s
Imperial (US)11 mph
+

Wind readings appear in the Node Detail weather section and the Environment Telemetry log columns.

+

Weight

+

Weight telemetry is transmitted as kg and converted for display.

+ + + + + + + + + + + + + + + + + +
Your SettingYou See
Metric24.5 kg
Imperial (US)54.0 lbs
+

Rainfall

+

Rainfall measurements (1-hour and 24-hour totals) are transmitted as mm and converted for display.

+ + + + + + + + + + + + + + + + + +
Your SettingYou See
Metric12 mm
Imperial (US)0.5 in
+

Units That Never Change

+

Some units are international standards and are displayed the same way regardless of your locale:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MeasurementUnitWhy
Barometric pressurehPaInternational meteorological standard
Heading / bearing° (degrees)Universal navigation convention
RadiationµR/hrStandard dosimetry unit
GPS coordinatesdecimal degreesUniversal geographic standard
Humidity, battery, soil moisture%Universal
+

Date & Time

+

All timestamps throughout the app — last heard, message times, telemetry logs, chart axes — follow your device's date and time preferences.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
SettingWhat It ControlsExample
24-Hour TimeClock format14:30 vs 2:30 PM
Date FormatDate ordering09/05/2026 vs 05/09/2026 vs 2026-05-09
CalendarCalendar systemGregorian, Buddhist, Japanese, etc.
+

The app also uses relative time where it makes sense — for example, "5 min ago" or "2 hours ago" in the node list — which is automatically localised into your device language.

+

Changing Your Measurement System

+

Your measurement system (metric vs imperial) is tied to your region setting. To change it without changing your language:

+
    +
  1. Open Settings → General → Language & Region
  2. +
  3. Tap Measurement System
  4. +
  5. Choose Metric, US, or UK
  6. +
+

The Meshtastic app picks up the change immediately — no restart needed.

+
Tip — UK vs US imperial. The UK measurement system uses miles for distance but stones for body weight and Celsius for temperature. The US system uses Fahrenheit and pounds. The app respects these distinctions automatically.
+ + diff --git a/docs/assets/screenshots/MANUAL_SCREENSHOTS b/docs/assets/screenshots/MANUAL_SCREENSHOTS new file mode 100644 index 000000000..7c222d59c --- /dev/null +++ b/docs/assets/screenshots/MANUAL_SCREENSHOTS @@ -0,0 +1,9 @@ +# Manual Screenshots +# +# Screenshots in this directory that are NOT generated by snapshot tests. +# These are captured manually (e.g., from iOS Simulator Settings screens) +# and must not be deleted by automated cleanup scripts. +# +# Format: one filename per line, lines starting with # are comments. + +settingsLanguageRegion.png diff --git a/docs/assets/screenshots/settingsLanguageRegion.png b/docs/assets/screenshots/settingsLanguageRegion.png new file mode 100644 index 000000000..c13d7f784 Binary files /dev/null and b/docs/assets/screenshots/settingsLanguageRegion.png differ diff --git a/docs/index.md b/docs/index.md index 43f8227b6..6f6687b64 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,4 +19,5 @@ Use the sidebar navigation to browse the **User Guide** for app features and the | [Getting Started](user/getting-started) | Connect your first radio and send a message | | [Nodes List](user/nodes) | Understanding the mesh network node list | | [Signal Meter](user/signal-meter) | How the LoRa signal quality meter works | +| [Units & Locale](user/units-and-locale) | How temperatures, distances, and times adapt to your region | | [Architecture](developer/architecture) | App architecture overview for contributors | diff --git a/docs/user.md b/docs/user.md index 573ec0530..fd3c3adc1 100644 --- a/docs/user.md +++ b/docs/user.md @@ -18,6 +18,8 @@ Documentation for using the Meshtastic iOS, iPadOS, macOS, watchOS, and visionOS Keep the last 5–8 entries and archive older ones by removing them. --> +**May 2026** — [Units, Measurement & Locale](user/units-and-locale) — New page explaining how the app automatically adapts temperatures, distances, speeds, and times to your device's regional settings. + **May 2026** — [Messages & Channels](user/messages) — Channel conversations now load the most recent 50 messages with a Load More button for older history. **May 2026** — [CarPlay](user/carplay) — Direct message list is now capped at 200 users sorted by most recent, improving performance on large meshes. diff --git a/docs/user/units-and-locale.md b/docs/user/units-and-locale.md new file mode 100644 index 000000000..b94f92441 --- /dev/null +++ b/docs/user/units-and-locale.md @@ -0,0 +1,137 @@ +--- +title: Units, Measurement & Locale +parent: User Guide +nav_order: 9 +--- + +# Units, Measurement & Locale + +{: .fs-6 } +The Meshtastic app automatically displays temperatures, distances, speeds, and times in the units your device is configured to use — no settings to change inside the app. + +--- + +## How It Works + +Meshtastic radios always transmit data in **metric units** (meters, °C, km/h, hPa, etc.). When the app receives this data, it hands it to your device's built-in formatting system, which converts and displays values in whatever unit system you've chosen in **Settings → General → Language & Region**. + +![Language & Region settings](../assets/screenshots/settingsLanguageRegion.png) + +The **Language & Region** screen controls how the Meshtastic app displays temperatures, distances, dates, numbers, and more. Key settings: + +| Setting | What It Controls in Meshtastic | +|---|---| +| **Temperature** | °C or °F for all sensor readings and weather | +| **Measurement System** | Metric (m, km, kg, mm) or US/UK (ft, mi, lbs, in) | +| **Calendar** | Calendar system for all dates | +| **First Day of Week** | Week start day in date displays | +| **Date Format** | Date ordering throughout the app | +| **Number Format** | Decimal separators and digit grouping | + +> **Tip — You never need to toggle units inside the app.** Change your system measurement preferences and every screen in Meshtastic updates automatically — node details, telemetry charts, weather, altitude, and more. + +## Temperature + +Temperature values from environment sensors and weather forecasts are transmitted as **°C** and displayed as either **°C** or **°F** based on your device's temperature unit preference. + +| Your Setting | You See | +|---|---| +| Celsius | 22 °C | +| Fahrenheit | 72 °F | + +This affects all temperature displays throughout the app: node environment telemetry, soil temperature, dew point, weather forecasts, and telemetry chart axes. + +## Distance & Altitude + +Distances between nodes and GPS altitudes are transmitted as **meters** and automatically scaled and converted by the system. + +| Your Setting | Small Distance | Large Distance | Altitude | +|---|---|---|---| +| Metric | 350 m | 2.5 km | 1,200 m | +| Imperial (US) | 1,148 ft | 1.6 mi | 3,937 ft | + +The app uses natural scaling — short distances stay in meters or feet, while longer distances switch to kilometres or miles automatically. + +### Where these appear + +- **Node list** — distance and bearing to each node +- **Node detail** — altitude, distance from your position +- **Map** — waypoint distances, trace route hop distances +- **Compass** — distance to selected node +- **Altitude chart** — Y-axis labels adapt to your locale + +## Speed + +GPS ground speed is displayed in your locale's preferred speed unit. + +| Your Setting | You See | +|---|---| +| Metric | 12 km/h | +| Imperial (US) | 7 mph | + +Speed appears on the **GPS Status** screen when your device has an active GPS fix. + +## Wind + +Wind speed and gust data from environment sensors are transmitted as **m/s** and converted for display. + +| Your Setting | You See | +|---|---| +| Metric | 5 m/s | +| Imperial (US) | 11 mph | + +Wind readings appear in the **Node Detail** weather section and the **Environment Telemetry** log columns. + +## Weight + +Weight telemetry is transmitted as **kg** and converted for display. + +| Your Setting | You See | +|---|---| +| Metric | 24.5 kg | +| Imperial (US) | 54.0 lbs | + +## Rainfall + +Rainfall measurements (1-hour and 24-hour totals) are transmitted as **mm** and converted for display. + +| Your Setting | You See | +|---|---| +| Metric | 12 mm | +| Imperial (US) | 0.5 in | + +## Units That Never Change + +Some units are international standards and are displayed the same way regardless of your locale: + +| Measurement | Unit | Why | +|---|---|---| +| Barometric pressure | hPa | International meteorological standard | +| Heading / bearing | ° (degrees) | Universal navigation convention | +| Radiation | µR/hr | Standard dosimetry unit | +| GPS coordinates | decimal degrees | Universal geographic standard | +| Humidity, battery, soil moisture | % | Universal | + +## Date & Time + +All timestamps throughout the app — last heard, message times, telemetry logs, chart axes — follow your device's date and time preferences. + +| Setting | What It Controls | Example | +|---|---|---| +| **24-Hour Time** | Clock format | 14:30 vs 2:30 PM | +| **Date Format** | Date ordering | 09/05/2026 vs 05/09/2026 vs 2026-05-09 | +| **Calendar** | Calendar system | Gregorian, Buddhist, Japanese, etc. | + +The app also uses **relative time** where it makes sense — for example, "5 min ago" or "2 hours ago" in the node list — which is automatically localised into your device language. + +## Changing Your Measurement System + +Your measurement system (metric vs imperial) is tied to your region setting. To change it without changing your language: + +1. Open **Settings → General → Language & Region** +2. Tap **Measurement System** +3. Choose **Metric**, **US**, or **UK** + +The Meshtastic app picks up the change immediately — no restart needed. + +> **Tip — UK vs US imperial.** The UK measurement system uses miles for distance but stones for body weight and Celsius for temperature. The US system uses Fahrenheit and pounds. The app respects these distinctions automatically. diff --git a/scripts/cleanup-screenshots.sh b/scripts/cleanup-screenshots.sh new file mode 100755 index 000000000..8b37efd0a --- /dev/null +++ b/scripts/cleanup-screenshots.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# scripts/cleanup-screenshots.sh +# Removes orphaned screenshots from docs/assets/screenshots/ that are: +# 1. NOT referenced by any markdown file under docs/ +# 2. NOT listed in the MANUAL_SCREENSHOTS manifest +# +# Usage: bash scripts/cleanup-screenshots.sh [--dry-run] +# +# With --dry-run, prints what would be deleted without removing anything. + +set -euo pipefail + +DRY_RUN=false +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=true; shift ;; + *) echo "Unknown option: $1" >&2; exit 1 ;; + esac +done + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +DOCS_DIR="$REPO_ROOT/docs" +SOURCE_DIR="$DOCS_DIR/assets/screenshots" +MANIFEST="$SOURCE_DIR/MANUAL_SCREENSHOTS" + +if [[ ! -d "$SOURCE_DIR" ]]; then + echo "No screenshots directory found at $SOURCE_DIR" + exit 0 +fi + +# Build set of referenced filenames from markdown +referenced=$(grep -roh 'screenshots/[^")*]*\.png' "$DOCS_DIR" --include='*.md' \ + | sed 's|screenshots/||' \ + | sort -u) + +# Build set of manually maintained filenames from manifest +manual="" +if [[ -f "$MANIFEST" ]]; then + manual=$(grep -v '^\s*#' "$MANIFEST" | grep -v '^\s*$' | sort -u) +fi + +# Combine into a single keep-list +keep=$(printf '%s\n%s' "$referenced" "$manual" | grep -v '^\s*$' | sort -u) + +removed=0 +kept=0 +for file in "$SOURCE_DIR"/*.png; do + [[ -f "$file" ]] || continue + filename=$(basename "$file") + if echo "$keep" | grep -qx "$filename"; then + kept=$((kept + 1)) + else + if $DRY_RUN; then + echo "Would remove: $filename" + else + rm "$file" + echo "Removed: $filename" + fi + removed=$((removed + 1)) + fi +done + +if $DRY_RUN; then + echo "" + echo "Dry run complete: $removed orphaned, $kept referenced/manual" +else + echo "" + echo "Cleanup complete: removed $removed orphaned, kept $kept screenshots" +fi diff --git a/scripts/copy-snapshots.sh b/scripts/copy-snapshots.sh index 2cbfe4fbd..8dac720ab 100755 --- a/scripts/copy-snapshots.sh +++ b/scripts/copy-snapshots.sh @@ -40,3 +40,7 @@ for filename in $referenced; do done echo "Copied $copied doc-referenced screenshots to $OUTPUT_DIR" + +# Clean up orphaned screenshots from the source directory +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +bash "$SCRIPT_DIR/cleanup-screenshots.sh"