-
OpenMeshOS v0.1.0-beta.17 Pre-release
released this
2026-06-04 12:34:27 +02:00 | 30 commits to main since this release
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.15 Pre-release
released this
2026-06-04 11:47:48 +02:00 | 36 commits to main since this release
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.14 Pre-release
released this
2026-06-04 11:33:10 +02:00 | 38 commits to main since this release
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.13 Pre-release
released this
2026-06-04 11:15:40 +02:00 | 40 commits to main since this releaseReverted
- BLE-Scan-Fix (beta.12):
_clearBonds()+ sofortiges_ble.enable()ininit()rückgängig gemacht — Gerät war im Scan weiterhin nicht sichtbar; Original-Verhalten (enable()viastartCompanionInterface()) funktioniert korrekt
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- BLE-Scan-Fix (beta.12):
-
OpenMeshOS v0.1.0-beta.12 Pre-release
released this
2026-06-04 10:41:06 +02:00 | 42 commits to main since this release⚠ Wichtig! Diese Version löscht beim ersten BT-Start alle gespeicherten BLE-Bond-Keys aus dem NVS (stale MITM-Bonds von alter Firmware). Auf Android/iOS vor dem Pairing: Gerät in BT-Einstellungen entfernen/vergessen damit kein veralteter Bond-Cache stört.
Added
- Status-Leiste: BT-Icon + Peer-Anzahl (
ScreenLauncher): BT-Icon grau/blau/grün nach Zustand; Peer-Zähler⟳Naktualisiert bei jeder peerSerial-Änderung
Fixed
- BLE nicht sichtbar (Issue #4):
BTCompanionService::init()riefenable()erst auf wennstartCompanionInterface()aufgerufen wurde — bei Race-Condition nie. Fix:enable()direkt ininit()nachbegin()._clearBonds()löscht stale MITM-Bond-Keys aus NVS (nachBLEDevice::init()— vorher crash) _clearBonds()Reihenfolge:esp_ble_*-Aufrufe vorBLEDevice::init()crashen den Stack — Aufruf nachbegin()verschobenesp_ble_remove_bond_deviceTyp-Fehler:&list[i].bd_addr→list[i].bd_addr(uint8_t[6]zerfällt zuuint8_t*)- CI release.yml: Release-API-Calls auf
FORGEJO_INTERNALumgestellt (curl exit 7 / Hairpin-NAT)
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- Status-Leiste: BT-Icon + Peer-Anzahl (
-
OpenMeshOS v0.1.0-beta.11 Pre-release
released this
2026-06-04 10:22:06 +02:00 | 44 commits to main since this release
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.10 Pre-release
released this
2026-06-04 10:07:59 +02:00 | 47 commits to main since this releaseAdded
- Status-Leiste: BT-Icon + Peer-Anzahl (Issue #5):
_btLbl(grau=aus, blau=aktiv, grün=verbunden) und_peerLbl(⟳N, grau bei 0 Peers, weiß ab 1) im Launcher-Header;refreshBT()+refreshPeer()in ScreenLauncher; Peer-Update bei jeder peerSerial-Änderung, BT im 60s-Zyklus - BLE Android 12+ Fix (Issue #4):
pre_build.pypatchtSerialBLEInterface.cppbeim Build —ESP_LE_AUTH_REQ_SC_MITM_BOND→ESP_LE_AUTH_BOND, GATT-Permissions MITM → ENCRYPTED; Submodul bleibt git-sauber - MeshCore-Submodul:
c940ea5→add18d68(3 CI-only Commits upstream, kein API-Bruch) - CI: Zweiter Runner-Server:
runner/docker-compose.yml,setup.sh,act_runner_config.yamlfür eigenständigen Forgejo-Runner auf separatem LAN-Rechner patches/meshcore-ble-no-mitm.patch: Patch-Referenzdatei für den pre_build.py BLE-Fix
Fixed
- CI Hairpin-NAT:
build-firmware.ymlundrelease.ymlnutzen jetztFORGEJO_INTERNAL=http://192.168.11.12:3000für alle git-Clone- und curl-API-Operationen; externe Domain vom Docker-Job-Container aus nicht erreichbar - CI Release-Upload (
curl exit 7): Release-Erstellung und Asset-Upload in beiden Workflows auf interne IP umgestellt - CI Clone:
--depth=1 --shallow-submodulesfür schnellere und zuverlässigere Checkouts
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Status-Leiste: BT-Icon + Peer-Anzahl (Issue #5):
-
OpenMeshOS v0.1.0-beta.9 Pre-release
released this
2026-06-04 09:59:11 +02:00 | 49 commits to main since this release
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.6 Pre-release
released this
2026-05-28 21:33:07 +02:00 | 64 commits to main since this release
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
OpenMeshOS v0.1.0-beta.5 Pre-release
released this
2026-05-28 21:14:14 +02:00 | 66 commits to main since this releaseAdded
- Settings-Übersicht als Button-Raster: 7 Kategorien als 2-Spalten-Kacheln statt flacher Liste (
ScreenSettings.cpp—_buildOverviewGrid()) ScreenLauncher::showDeferred(): LVGL-sichere Navigation zurück zum Launcher aus Event-Callbacks (nutztlv_async_call()— verhindert LoadProhibited-Absturz wennlv_scr_load()während Event-Dispatch aufgerufen würde)- BLE-Companion: MeshCore-App kann sich per Bluetooth andocken (Nordic NUS UUID
6E400001-…);BTCompanionServicekann ohne Neustart aktiviert/deaktiviert werden ops::text::sanitize()(src/utils/TextUtils.h/cpp): kopiert UTF-8-Text und ersetzt 3-Byte-Sonderzeichen (typografische Anführungszeichen U+2018/201C, Gedankenstriche U+2013/2014, Ellipse U+2026) durch ASCII-Äquivalente; Umlaute (U+00A0-00FF) werden unverändert durchgereichtscripts/gen_latin_fonts.sh: Skript zur Generierung erweiterter LVGL-Montserrat-Schriftdateien mit Latin-1-Supplement vialv_font_conv(für zukünftige volle Unicode-Unterstützung)scripts/download_tiles.pykomplett überarbeitet: konfigurierbarer Tile-Server (--server osm-de/maptiler/stadia), optionaler--api-key, Retry mit Backoff, 429-Header-Auswertung, klare 403-Fehlermeldung mit Lösungshinweis- WiFi-Integration: optionale WLAN-Konnektivität für NTP-Zeitsync
Config: neue FelderwifiEnabled,wifiSsid[33],wifiPsk[64](persistiert via NVS + SD JSON)WifiMgr: State-Machine (OFF → CONNECTING → WAIT_NTP → CONNECTED); Retry alle 60 s; NTP-Resync alle 6 h viaconfigTime()+time(nullptr)MeshService::setCurrentTime(): übergibt NTP-Epoch an ESP32RTCClockScreenSettings: WiFi-Einstellungsdialog (SSID-Textarea, PSK-Textarea mit Passwort-Modus, Enable-Toggle, Save/Cancel)main.cpp:WifiMgr::init()insetup(),WifiMgr::tick()inloop()
- Hashtag-Kanalpräfix: Channel-Namen im Home-Screen werden jetzt mit
#dargestellt (#channel-namestattchannel-name)
Fixed
- Absturz:
lv_scr_load()aus LVGL-Event-Callbacks — alle Screens (ScreenHome,ScreenSettings,ScreenHeard,ScreenMap,ScreenPower,ScreenSignal,ScreenFinder,ScreenTrace,ScreenContacts,ScreenRepeaters,ScreenMP3Player,ScreenTerminal,ScreenPlaceholder): direkteScreenLauncher::show()-Aufrufe in Event-Callbacks durchScreenLauncher::showDeferred()ersetzt - BLE-Gerätename
OPSOPS-0001:BTCompanionService::init()übergab"OPS"als Prefix →SerialBLEInterface::begin()hängte ihn vor den Callsign → doppelter Prefix. Fix: leerer Prefix"", Gerätename ist direkt der Callsign - BLE-PIN: Standardwert 123456 → 0 (Just-Works-Pairing); MITM-Modus bleibt in
SerialBLEInterfacehardkodiert (MeshCore-Submodul, read-only) - Notification-Popup zeigt
?— Emoji und Sonderzeichen:_showNotifyPopup()inUIScreen.cpp:emojiFont()statt plain Montserrat;ops::text::sanitize()ersetzt 3-Byte-SonderzeichenScreenHome::_addBubble():emojiFont()fürmsgLbl
emojiFont()Memory-Leak (src/ui/Emoji.cpp):lv_imgfont_create()wurde bei jedem Bubble-Aufbau neu aufgerufen (500–1000 Bytes pro Nachricht verloren). Fix: statischer Cache nachline_height(max 8 Slots), Font-Objekte werden einmal angelegt und wiederverwendet- Tile-Download 403-Fehler (
scripts/download_tiles.py):tile.openstreetmap.orgblockiert Bulk-Downloads per Policy. Fix: deutscher OSM-Spiegel als Standard, konfigurierbarer Server mit API-Key-Unterstützung; User-Agent von "Saitama" auf "OpenMeshOS" korrigiert strcpy(buf, "--")Compiler-Warnungen inScreenPlaceholder.cpp— durchsnprintf()ersetzt- Config SD-Priorität:
config::init()lud bisher NVS zuerst (blob) — nach Firmware-Update ohne Struct-Größenänderung wurde dadurch veraltete NVS-Version geladen statt aktueller SD-JSON. SD ist jetzt primär (wie Contacts/Repeaters) MapEngine:mapTileDirConfig-Feld hatte keinen Effekt —init()nimmt jetzt den Pfad als Parameter,tileExists()/readTile()verwenden ihn statt hartkodiertem/ops/maps/Config: DefaultmapTileDirvon/mapauf/ops/mapskorrigiertScreenMap._build(): PSRAM-Leak bei fehlgeschlagener Puffer-Allokierung behoben;_screenwird korrekt gelöscht und aufnullptrgesetzt damitshow()erneut versuchen kannScreenMap.navigate(): Breiten-Panning verwendete linearedegPerPx-Näherung statt inverser Mercator-Formel — korrigiert durch Umrechnung in Kachel-Y-Raum und zurückScreenTrace._lookupNodeName(): Toter Code (fehlerhafte Pointer-Arithmetik, immer offset 0) entfernt; nur die korrekte Hex-Formatierungsschleife verbleibtCLAUDE.md: Trackball-Pin-Tabelle korrigiert — DOWN=GPIO15, LEFT=GPIO1, RIGHT=GPIO2 (vorher vertauscht)MapEngine.h: Kommentar inhasTileDir()korrigiert (/maps/→/ops/maps/)MeshService.cpp— MeshCore vollständig verdrahtet:OPSBoard::getMCUTemperature():temperatureRead()(ESP32-S3 interne Temperatur)OPSBoard::reboot():ESP.restart()explizit überschriebenOPSMesh::tickGpsSync(): GPS→RTC-Zeitsync alle 30 s, nur vorwärts (gleiche Guard wie BLE-Companion); UTC-Datum viaBoard::gpsDateTime(), Epoch via eigenem_utcToEpoch()(keintimegm()auf ESP32)MeshService::tick()rufttickGpsSync()auf
Config.cpp:screenOffMinundnotifySoundChoiceJSON-Fallback verwendet jetzts_cfg-Wert statt hartkodierter 0 — konsistent mit allen anderen FeldernMeshService.h:MAX_TRACE_HOPS = 64Konstante eingeführt;snrs[]/hashes[]Arrays und der Receiver-Guard inonTraceRecv()verwenden sie statt magischer Zahl 64- Projektname: alle Copyright-Header, Runtime-Strings und Kommentare von "Saitama" auf "OpenMeshOS" umgestellt —
ScreenBootzeigt jetzt "OpenMeshOS", Terminal-Begrüßung und Log-Ausgaben ebenfalls;Board.cpp/Board.h(read-only) ausgenommen
Changed
- SRAM-Optimierung — ~56 KB nach PSRAM verschoben (
EXT_RAM_BSS_ATTR):Contact s_contacts[50]7.800 B,Repeater s_reps[50]7.600 BMsgEntry s_history[30]8.370 B,TraceTarget s_targets[100]3.700 B, Dropdown-Buffer 4.000 BDiscoverEntry s_results[20]1.460 B- MP3-Dateilisten
_filePaths/Names[64]12.288 B - Sound-Synthesepuffer (Ping/Pluck/Clear/Whoosh) 9.600 B
- ScreenTerminal
lsbuf[1024]+[512]1.536 B
- Config SD-Primär: Ladereihenfolge in
config::init()geändert: SD JSON → NVS-Blob → Legacy-NVS-Keys → Defaults (entspricht Contacts/Repeaters-Muster) - Contacts, Repeaters, Routes: bereits SD-primär (seit beta.4); Config schließt jetzt auf
- Settings-Übersicht: flache Liste → 2-Spalten-Kacheln (7 Kategorien)
OPS_HAS_BUILTIN_GPS-Flag inplatformio.inidokumentiert: auf=0setzen spart ~800 Bytes SRAM + ~4 KB Flash- README: Original-Verweis auf Saitama by 868-Meshbot oben eingefügt
- README: Projektname durchgängig auf "OpenMeshOS" umgestellt
- README: Clone-URL auf dieses Repository korrigiert
- README: Version auf 0.1.0-beta.4 aktualisiert
- README: Nicht-existierende
Keyboard.h/cppaus Projektstruktur entfernt - ROADMAP: Version und LVGL-Version korrigiert, Config-Speicher-Beschreibung angepasst
- ARCHITECTURE: LVGL-Version (9→8.3), Memory-Map-Label, Config-Storage-Tabelle korrigiert
- CLAUDE.md: Projektname, Version und Lizenz-Header-Konvention auf OpenMeshOS aktualisiert
- VERSIONING.md: Projektname und Versionsreferenzen aktualisiert
- docs/TODO.md: Fehleranalyse hinzugefügt, behobene Punkte als erledigt markiert
Fixed
- Dokumentations-Inkonsistenzen: LVGL 9 → 8.3 (ARCHITECTURE, ROADMAP)
- Dokumentations-Inkonsistenzen: Config-Storage SPIFFS → NVS+SD (ARCHITECTURE, ROADMAP)
- Memory-Map-Eintrag 0xC90000 falsch als "SD card FS" beschriftet
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
- Settings-Übersicht als Button-Raster: 7 Kategorien als 2-Spalten-Kacheln statt flacher Liste (