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
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.
## 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 -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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:original_path(received — what gets published): 0forwarded_path(transmitted): 172Downstream, CoreScope showed
relay_count_1h = 0all day while the openHop dashboard showed hundreds of forwards. Bringing a separate observer node ~55 m away back online fixed it immediately —relay_count_1hwent 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:
where
onuplinks 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:
openHop already computes and stores
forwarded_pathwith 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(oradvert) would keep current behaviour unchanged for anyone who doesn't opt in.Environment
1.1.2.dev1pymc_usb, 910.525 MHz / 62.5 kHz / SF7 / CR8format: letsmesh)