Feature request: option to publish the repeater's own transmitted/forwarded packets to MQTT (mirror MeshCore's mqtt.tx) #145

Open
opened 2026-10-27 09:35:24 +01:00 by adam · 0 comments
Owner

Problem

An openHop node acting as both repeater and MQTT observer can't get credit for its own relays on downstream aggregators (CoreScope, MeshMapper, LetsMesh). The radio is half-duplex, so the node never receives its own relayed copy — and since the observer feed publishes received packets, its own path-hash never appears in anything it uplinks.

Concretely, on my node (1.1.2.dev1), across a 400-packet sample:

  • own hash in original_path (received — what gets published): 0
  • own hash in forwarded_path (transmitted): 172
original_path  (as received) : AC5F, 0F4B, 571E
forwarded_path (as sent)     : AC5F, 0F4B, 571E, 6742

Downstream, CoreScope showed relay_count_1h = 0 all day while the openHop dashboard showed hundreds of forwards. Bringing a separate observer node ~55 m away back online fixed it immediately — relay_count_1h went 0 → 5 within minutes — because that node hears the transmissions over the air and publishes them.

This also appears to be why a repeater that is its own observer often can't get its own advert onto the map; the MeshMapper wiki documents that case and recommends a manual zero-hop advert from a companion as a workaround.

Why this isn't simply expected behaviour

MeshCore's MQTT Observer firmware has a setting for exactly this:

set mqtt.tx off | advert | on

where on uplinks all of the node's own transmissions. Self-reported TX is already treated as valid and supported elsewhere in the ecosystem.

Proposal

A per-broker option mirroring those semantics:

mqtt_brokers:
  brokers:
    - name: ...
      publish_tx: off   # off | advert | on

openHop already computes and stores forwarded_path with its own hash appended on every relay, so the data is present — it just isn't published.

Caveat

Self-reported TX has no RSSI/SNR, since a node can't measure its own signal, so aggregators may want to treat it distinctly from a witnessed observation. Making the default off (or advert) would keep current behaviour unchanged for anyone who doesn't opt in.

Environment

  • openHop Repeater 1.1.2.dev1
  • Raspberry Pi 4, Debian 13 (trixie)
  • Radio: pymc_usb, 910.525 MHz / 62.5 kHz / SF7 / CR8
  • Brokers: LetsMesh v1, MeshMapper, CDME (all format: letsmesh)
## Problem An openHop node acting as both repeater and MQTT observer can't get credit for its own relays on downstream aggregators (CoreScope, MeshMapper, LetsMesh). The radio is half-duplex, so the node never receives its own relayed copy — and since the observer feed publishes *received* packets, its own path-hash never appears in anything it uplinks. Concretely, on my node (`1.1.2.dev1`), across a 400-packet sample: - own hash in `original_path` (received — what gets published): **0** - own hash in `forwarded_path` (transmitted): **172** ``` original_path (as received) : AC5F, 0F4B, 571E forwarded_path (as sent) : AC5F, 0F4B, 571E, 6742 ``` Downstream, CoreScope showed `relay_count_1h = 0` all day while the openHop dashboard showed hundreds of forwards. Bringing a separate observer node ~55 m away back online fixed it immediately — `relay_count_1h` went 0 → 5 within minutes — because that node hears the transmissions over the air and publishes them. This also appears to be why a repeater that is its own observer often can't get its own advert onto the map; the MeshMapper wiki documents that case and recommends a manual zero-hop advert from a companion as a workaround. ## Why this isn't simply expected behaviour MeshCore's MQTT Observer firmware has a setting for exactly this: ``` set mqtt.tx off | advert | on ``` where `on` uplinks all of the node's own transmissions. Self-reported TX is already treated as valid and supported elsewhere in the ecosystem. ## Proposal A per-broker option mirroring those semantics: ```yaml mqtt_brokers: brokers: - name: ... publish_tx: off # off | advert | on ``` openHop already computes and stores `forwarded_path` with its own hash appended on every relay, so the data is present — it just isn't published. ## Caveat Self-reported TX has no RSSI/SNR, since a node can't measure its own signal, so aggregators may want to treat it distinctly from a witnessed observation. Making the default `off` (or `advert`) would keep current behaviour unchanged for anyone who doesn't opt in. ## Environment - openHop Repeater `1.1.2.dev1` - Raspberry Pi 4, Debian 13 (trixie) - Radio: `pymc_usb`, 910.525 MHz / 62.5 kHz / SF7 / CR8 - Brokers: LetsMesh v1, MeshMapper, CDME (all `format: letsmesh`) <!-- github-sync-id:5294642381 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/pyMC_Repeater#145