Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ base (currently synced to upstream `v1.18.0`, embedded firmware version `v1.18.0
- **duty-cycle region gating** (`dc.gate.*`) — `test/test_region_gating/`, wired through
`RegionMap.*`, `Dispatcher.*`, `MyMesh.*` and the radio-prefs CLI;
- a **frequency-derived duty-cycle default** (`set dutycycle auto`) — `src/helpers/DutyCycleLimits.{cpp,h}`.
- a **companion receive filter** (`filter ...` on companions) — `examples/companion_radio/CompanionFilter*`,
reusing the repeater filter's header-only rule engine; see `docs/companion_filter_reference.md`.

Most of it lives in DMC-only files (see §2). The rest is two DMC build workflows, `build.sh`,
`scripts/publish-release.sh`, and a handful of small variant and radio tweaks.
Expand All @@ -62,6 +64,7 @@ not a side effect. Grouped by what pulls them in:
```
build / release build.sh, platformio.ini
packet filter examples/simple_repeater/MyMesh.{cpp,h}, docs/cli_commands.md
companion filter examples/companion_radio/MyMesh.{cpp,h}, docs/cli_commands.md
region gating src/Dispatcher.{cpp,h}, src/helpers/RegionMap.{cpp,h},
src/helpers/CommonCLI.{cpp,h}, test/mocks/{Arduino,SHA256,Stream}.h
duty-cycle auto src/helpers/CommonRadioPrefs.{cpp,h}, src/helpers/CommonCLI.{cpp,h},
Expand Down
19 changes: 19 additions & 0 deletions dmc-docs/custom-cli.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,25 @@ ACL-Kontaktpakete werden übersprungen. Der Zustand wird in `/filter_prefs` gesp
| `04` | ADVERT | `10` | MULTIPART |
| `05` | GRP_TXT | `11` | CONTROL |

## Companion-Filter

`filter ...` auf der **Companion**-Firmware: blendet Müll und unerwünschte Kanalnachrichten in der
App aus. Wird über die Befehlskonsole der App, USB-Seriell oder Remote-CLI gesendet. Standardmäßig
**aus**; Direktnachrichten werden nie gefiltert. Gespeichert in `/cfilter.json`. Siehe
[`docs/companion_filter_reference.md`](https://github.com/Dutch-MeshCore/MeshCore/blob/dmc-dev/docs/companion_filter_reference.md).

- `filter`: Status und Summen pro Grund
- `filter help` / `filter on` / `filter off` / `filter reset`
- `filter malformed on|off` (falscher Zeitstempel, leerer Text oder ungültiges UTF-8, auf jedem eigenen Kanal)
- `filter age <Minuten>|off` (1-10080; Gruppennachrichten, die älter sind)
- `filter path list|add|remove <hex>` (bis zu 8; Adverts und Gruppenverkehr über diesen Repeater)
- `filter sender add <Name> [secs] [prob]` / `remove` / `list` (bis zu 8; `Bot*` = Präfix)
- `filter text add <Muster> [secs] [prob]` / `remove` / `list` (bis zu 8; `^` = Anfang der Nachricht)
- `filter stats malformed|age|path|sender|text`

Mit aktiviertem Repeat werden malformed/age/path-Nachrichten auch nicht weitergeleitet;
sender/text-Regeln blenden eine Nachricht nur für dich aus, sie wird für andere weiterhin weitergeleitet.

## Duty-Cycle-Region-Gating

`dc.gate.*`. Standardmäßig **aus**. Wirft Inter-Regions-Flood-Verkehr ab, wenn der
Expand Down
19 changes: 19 additions & 0 deletions dmc-docs/custom-cli.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,25 @@ packets bypass it. State is persisted to `/filter_prefs`.
| `04` | ADVERT | `10` | MULTIPART |
| `05` | GRP_TXT | `11` | CONTROL |

## Companion filter

`filter ...` on the **companion** firmware: hides junk and unwanted channel messages from the
app. Sent from the app's command console, USB serial or remote CLI. **Off** by default; direct
messages are never filtered. Saved to `/cfilter.json`. See
[`docs/companion_filter_reference.md`](https://github.com/Dutch-MeshCore/MeshCore/blob/dmc-dev/docs/companion_filter_reference.md).

- `filter`: status and per-reason totals
- `filter help` / `filter on` / `filter off` / `filter reset`
- `filter malformed on|off` (bad timestamp, empty text or invalid UTF-8, on every channel you hold)
- `filter age <minutes>|off` (1-10080; group text older than this)
- `filter path list|add|remove <hex>` (up to 8; adverts and group traffic relayed by that repeater)
- `filter sender add <name> [secs] [prob]` / `remove` / `list` (up to 8; `Bot*` = prefix)
- `filter text add <pattern> [secs] [prob]` / `remove` / `list` (up to 8; `^` = start of message)
- `filter stats malformed|age|path|sender|text`

With repeat enabled, malformed/age/path messages are not repeated either; sender/text rules only
hide a message from you and it is still repeated for others.

## Duty-cycle region gating

`dc.gate.*`. **Off** by default. Sheds inter-region flood traffic when the repeater has
Expand Down
19 changes: 19 additions & 0 deletions dmc-docs/custom-cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,25 @@ ACL-contactpakketten worden overgeslagen. De status wordt bewaard in `/filter_pr
| `04` | ADVERT | `10` | MULTIPART |
| `05` | GRP_TXT | `11` | CONTROL |

## Companion filter

`filter ...` op de **companion**-firmware: verbergt rommel en ongewenste kanaalberichten voor de
app. Te versturen via de commandoconsole van de app, USB-serieel of remote CLI. Standaard **uit**;
directe berichten worden nooit gefilterd. Opgeslagen in `/cfilter.json`. Zie
[`docs/companion_filter_reference.md`](https://github.com/Dutch-MeshCore/MeshCore/blob/dmc-dev/docs/companion_filter_reference.md).

- `filter`: status en totalen per reden
- `filter help` / `filter on` / `filter off` / `filter reset`
- `filter malformed on|off` (foute tijdstempel, lege tekst of ongeldige UTF-8, op elk kanaal dat je hebt)
- `filter age <minuten>|off` (1-10080; groepsberichten ouder dan dit)
- `filter path list|add|remove <hex>` (max. 8; adverts en groepsverkeer via die repeater)
- `filter sender add <naam> [secs] [prob]` / `remove` / `list` (max. 8; `Bot*` = prefix)
- `filter text add <patroon> [secs] [prob]` / `remove` / `list` (max. 8; `^` = begin van het bericht)
- `filter stats malformed|age|path|sender|text`

Met repeat aan worden malformed/age/path-berichten ook niet doorgestuurd; sender/text-regels
verbergen een bericht alleen voor jou en het wordt nog steeds doorgestuurd voor anderen.

## Duty-cycle region gating

`dc.gate.*`. Standaard **uit**. Werpt inter-regio-floodverkeer af wanneer de repeater
Expand Down
19 changes: 19 additions & 0 deletions dmc-docs/migration.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,25 @@ get mqtt.status

Aktiviere bei Bedarf das [Webpanel](web-panel.md), um den Status zu bestätigen.

## Von meshcomod (Companion)

Ein Companion, der von meshcomod auf die DMC-Companion-Firmware wechselt, behält Identität,
Kontakte, Kanäle und Einstellungen, einschließlich CAD-Schalter und WLAN-Netz. Beim ersten Start
liest die DMC-Firmware die meshcomod-Einstellungen einmal ein und speichert sie im eigenen Format.

- Flashe das **Update-Image** (`*.bin`, an `0x10000`), nicht `*-merged.bin`: Das Merged-Image
löscht den NVS-Bereich, in dem meshcomod die WLAN-Zugangsdaten ablegt. Alles andere bleibt so
oder so erhalten.
- Hat sich meshcomod je per OTA aktualisiert, läuft es eventuell aus dem zweiten App-Slot. Lösche
dann auch die Boot-Auswahl, sonst startet das Gerät weiter meshcomod:

```text
esptool.py --chip esp32s3 erase_region 0xe000 0x2000
esptool.py --chip esp32s3 write_flash 0x10000 <firmware>.bin
```

- Daten, die meshcomod auf einer SD-Karte ablegt (Launcher-Installationen), werden nicht übernommen.

## Letzter Ausweg

Läuft es nicht stabil, führe eine vollständige Löschung durch und flashe die
Expand Down
18 changes: 18 additions & 0 deletions dmc-docs/migration.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,24 @@ get mqtt.status

Optionally enable the [Web Panel](web-panel.md) to confirm the status.

## From meshcomod (companion)

A companion moving from meshcomod to the DMC companion firmware keeps its identity, contacts,
channels and settings, including the CAD toggle and the WiFi network. On the first boot the DMC
firmware reads meshcomod's settings once and stores them in its own format.

- Flash the **update image** (`*.bin`, at `0x10000`), not `*-merged.bin`: the merged image wipes
the NVS area where meshcomod keeps the WiFi credentials. Everything else survives either way.
- If meshcomod ever updated itself over the air, it may be running from the second app slot. Clear
the boot selector as well, or the device keeps booting meshcomod:

```text
esptool.py --chip esp32s3 erase_region 0xe000 0x2000
esptool.py --chip esp32s3 write_flash 0x10000 <firmware>.bin
```

- Data that meshcomod keeps on an SD card (Launcher installs) is not picked up.

## Last resort

If it will not run stably, do a full erase and flash the `*-merged.bin` clean from `0x0`,
Expand Down
18 changes: 18 additions & 0 deletions dmc-docs/migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,24 @@ get mqtt.status

Schakel eventueel het [Webpaneel](web-panel.md) in om de status te bevestigen.

## Vanaf meshcomod (companion)

Een companion die van meshcomod naar de DMC-companionfirmware gaat, houdt zijn identiteit,
contacten, kanalen en instellingen, inclusief de CAD-schakelaar en het WiFi-netwerk. Bij de eerste
start leest de DMC-firmware de meshcomod-instellingen één keer en slaat ze op in het eigen formaat.

- Flash het **update-image** (`*.bin`, op `0x10000`), niet `*-merged.bin`: het merged image wist
het NVS-gebied waar meshcomod de WiFi-gegevens bewaart. De rest blijft hoe dan ook staan.
- Heeft meshcomod zichzelf ooit over-the-air bijgewerkt, dan draait het mogelijk vanuit het tweede
app-slot. Wis dan ook de bootkeuze, anders blijft het apparaat meshcomod starten:

```text
esptool.py --chip esp32s3 erase_region 0xe000 0x2000
esptool.py --chip esp32s3 write_flash 0x10000 <firmware>.bin
```

- Gegevens die meshcomod op een SD-kaart bewaart (Launcher-installaties) worden niet overgenomen.

## Laatste redmiddel

Werkt het niet stabiel, doe dan een volledige wis en flash de `*-merged.bin` schoon vanaf
Expand Down
23 changes: 23 additions & 0 deletions docs/cli_commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore
- [Logging](#logging)
- [Information](#info)
- [Packet Filter](#packet-filter-repeater-only)
- [Companion Receive Filter](#companion-receive-filter-companion-only)
- [Configuration](#configuration)
- [Radio](#radio)
- [System](#system)
Expand Down Expand Up @@ -323,6 +324,28 @@ filter stats hops

---

## Companion Receive Filter (Companion Only)

The DMC companion firmware has its own `filter` command that keeps junk and unwanted channel messages out of the app. It is sent through the app's command console (`CMD_RUN_CLI_COMMAND`), USB serial, or remote CLI. Settings are persisted to `/cfilter.json`. Disabled by default; direct and addressed traffic is never filtered.

Find more information in [companion_filter_reference.md](companion_filter_reference.md)

**Usage:**
- `filter` — status: `> Filter on: Hidden [ Malformed: N | Age: N | Path: N | Sender: N | Text: N ]`
- `filter help`
- `filter on` / `filter off`
- `filter reset` — restore the defaults (counters are not affected)
- `filter malformed` / `filter malformed <on|off>` — drop group text with a bad timestamp, empty text or invalid UTF-8, on every channel the companion holds
- `filter age` / `filter age <minutes>|off` — drop group text older than this (1–10080)
- `filter path list|add|remove <hex>` — drop flood adverts and group traffic relayed by a repeater whose ID starts with the prefix (2–8 hex digits, up to 8)
- `filter sender list|add <name> [secs] [prob]|remove <name>` — hide group text by sender (up to 8; `Bot*` = prefix)
- `filter text list|add <pattern> [secs] [prob]|remove <pattern>` — hide group text by content (up to 8; `^` = start of message)
- `filter stats malformed|age|path|sender|text` — what each setting filtered, in the same formats as the repeater filter

**Note:** Malformed, age and path filtering *drop* a packet: with repeat enabled it is not repeated either. Sender and text rules only *hide* it: it is still repeated for others.

---

## Configuration

### Radio
Expand Down
Loading
Loading