diff --git a/README.md b/README.md index 53ff298..83612ef 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ open http://localhost:8080 This starts all services: MQTT broker, collector, API, web dashboard, and packet capture. The `observer` profile runs [meshcore-packet-capture](https://github.com/agessaman/meshcore-packet-capture) to observe MeshCore RF traffic and publish decoded packets to MQTT. -> **ARM / Raspberry Pi:** The `observer` service Docker image (`ghcr.io/agessaman/meshcore-packet-capture`) does not currently support ARM architectures. A [PR is open](https://github.com/agessaman/meshcore-packet-capture/pull/13) on the upstream project to add ARM support but has not yet been merged. To run the observer on a Raspberry Pi, do not use the `--profile observer` Docker profile — instead, install [meshcore-packet-capture](https://github.com/agessaman/meshcore-packet-capture) natively on the Pi and configure it to publish to your MQTT broker. +> **ARM / Raspberry Pi:** The `observer` service Docker image (`ghcr.io/agessaman/meshcore-packet-capture`) does not support 32-bit ARM (`armv7l`) architectures. Modern Raspberry Pi models (3, 4, 5) using a 64-bit OS are fully supported. If you are running a 32-bit ARM system, install [meshcore-packet-capture](https://github.com/agessaman/meshcore-packet-capture) natively and configure it to publish to your MQTT broker instead of using the `--profile observer` Docker profile. ## Deployment diff --git a/docs/i18n.md b/docs/i18n.md index 539c846..88b313f 100644 --- a/docs/i18n.md +++ b/docs/i18n.md @@ -176,6 +176,9 @@ Toast/flash messages after successful operations: | `received_by` | Received By | Received by field | | `receivers` | Receivers | Multiple receivers | | `from` | From | Message sender | +| `hops` | Hops | Number of mesh hops (table header) | +| `observers` | Observers | Observers of an event | +| `snr_db` | SNR (dB) | Signal-to-noise ratio in decibels (table header) | | `unnamed` | Unnamed | Fallback for unnamed items | | `unnamed_node` | Unnamed Node | Fallback for unnamed nodes | diff --git a/src/meshcore_hub/web/static/js/spa/components.js b/src/meshcore_hub/web/static/js/spa/components.js index eb3af35..a8091e0 100644 --- a/src/meshcore_hub/web/static/js/spa/components.js +++ b/src/meshcore_hub/web/static/js/spa/components.js @@ -478,16 +478,16 @@ export function observerDetailRow(observers, eventProperties, options = {}) { Observer - SNR - ${showPath ? html`Path` : nothing} + ${t('common.snr_db')} + ${showPath ? html`${t('common.hops')}` : nothing} Received ${observers.map(o => { const displayName = o.tag_name || o.name || truncateKey(o.public_key, 12); - const snrDisplay = o.snr != null ? `${Number(o.snr).toFixed(1)} dB` : '\u2014'; - const pathDisplay = o.path_len != null ? `${o.path_len} hop${o.path_len !== 1 ? 's' : ''}` : '\u2014'; + const snrDisplay = o.snr != null ? `${Number(o.snr).toFixed(1)}` : '\u2014'; + const pathDisplay = o.path_len != null ? `${o.path_len}` : '\u2014'; const timeDisplay = formatRelativeTime(o.observed_at); return html` diff --git a/src/meshcore_hub/web/static/js/spa/pages/advertisements.js b/src/meshcore_hub/web/static/js/spa/pages/advertisements.js index c62e800..7eb58a8 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/advertisements.js +++ b/src/meshcore_hub/web/static/js/spa/pages/advertisements.js @@ -133,11 +133,11 @@ ${displayContent}`, container); ${ad.observers && ad.observers.length > 0 ? html`