Skip to content

Releases: moxy-kit/QManager

v0.1.23-cm.2: Fix LuCI 403 (hotfix)

05 May 04:53

Choose a tag to compare

Pre-release

Hotfix for v0.1.23-cm.1 / v0.1.21-cm.4 / v0.1.21-cm.5.

Bug

LuCI returned 403 Forbidden on /cgi-bin/luci after any cm.4+ install.

Root cause

install_frontend() chmod'd everything in /www to 644, then only restored the exec bit on files matching *.sh inside cgi-bin. LuCI's main CGI entry is /www/cgi-bin/luci — a Lua script with no extension — so it stayed 644 and uhttpd refused to execute it.

Fix

Drop the *.sh filter. Every file under cgi-bin is intended to be CGI-executed; the chmod now applies to all of them.

Affected versions

  • v0.1.21-cm.4
  • v0.1.21-cm.5
  • v0.1.23-cm.1

Recovery for already-installed sleds (no OTA possible — LuCI isn't the install path anyway)

Either:

  1. Apply this update via QManager UI → System Settings → Software Update, OR
  2. SSH in and run: chmod 755 /www/cgi-bin/luci (instant fix, no reboot)

v0.1.23-cm.1: Upstream sync + CellMapper

04 May 11:47

Choose a tag to compare

Brings the cellmapper fork in sync with upstream dr-dolomite/QManager v0.1.23.

Upstream features now available

  • Tower Lock Simple Mode (LTE + NR-SA) — pick from active carriers via dropdown instead of typing EARFCN/PCI
  • Verizon Custom Profile support with MPDN routing + IP Passthrough lock
  • Public overview card — glanceable modem status pre-login
  • 2.5 Gbps Ethernet on supported hardware
  • Tailscale migrated to tailscale-tiny — smaller, survives firmware upgrades
  • Force Tailscale Fixes opt-in toggle for R02 firmware (firewall zone + mwan3 ipset workarounds)
  • Persistent DPI nftables rules survive fw4 reload (Video Optimizer / Traffic Masquerade no longer go silent)
  • Custom SIM Profile activation lock fix (start_failed)
  • Cancel/Close buttons now respect active language

Cellmapper additions

Unchanged from v0.1.21-cm.5:

  • Collector + uploader + NMEA UDP relay daemons
  • 13 CGI endpoints, 21 React components, Leaflet live map
  • Schema migration, normalize/errors modules
  • Centralized router u-blox GPS fan-out

Conflicts resolved

  • package.json: version → v0.1.23-cm.1, kept leaflet/react-leaflet deps
  • monitoring.json: tailscale install command updated to community-tiny, cellmapper section preserved
  • scripts/install.sh: socat + sqlite3-cli critical-deps integration alongside seed_uci_defaults + migrate_tailscale_* functions

Install

Software Update tab on any v0.1.21-cm.x sled, or manual:

opkg update && opkg install /tmp/qmanager.tar.gz

v0.1.21-cm.5: CellMapper polish

28 Apr 01:54

Choose a tag to compare

Backend reliability

  • NMEA timeout wrappertimeout 10 around socat calls prevents the relay from hanging forever on dead phone connections.
  • Relay sentinel infinite loop — fixed 24h death cycle where the watchdog's exit conditions could never be met.
  • DB race condition — added busy_timeout=5000 to all SQLite connections; collector + uploader can now race on fresh start without "database is locked" failures.
  • Disable toggle clean exit — collector now exits cleanly when disabled via UI (was leaving zombie process).
  • Smart restart — only structural settings changes (URL, intervals) trigger daemon restart; cosmetic changes apply live.
  • Firewall rule — auto-creates UDP 29998 ACCEPT rule on enable so phone NMEA reaches the sled out of the box.
  • Uploader latency on all pathslast_latency_ms in state file now reflects every attempt (success and failure), not just successes.

UI fixes

  • Desktop dashboard rendering — fixed black screen at 1440px+ caused by container query width inheritance + Leaflet height collapse in 3-column grid.
  • Sidebar nav — removed redundant "Dashboard" sub-item (parent link goes there); active state now highlights the correct sub-route.
  • Upload card — removed stub "—" rows for unimplemented metrics and the sparkline placeholder. Cleaner 3-row layout.
  • GPS error context — added "Errors are cleared on collector restart" hint when error count exceeds 50, so the historical pile doesn't look like an active fire.
  • Buffer actions — Export button now disables when buffer is empty (Flush/Purge already did).
  • Settings labels — shortened "Interval (moving)" → "Moving interval" and "Interval (stopped)" → "Stationary interval" to fix clipping in narrow card containers.

Feature

  • Motion state badges — dashboard now shows live Moving/Stationary state from the collector, so you can see the speed-based interval kick in.

📥 Installation

Fresh Install

curl -fsSL -o /tmp/qmanager-installer.sh https://raw.githubusercontent.com/dr-dolomite/QManager/development-home/qmanager-installer.sh && sh /tmp/qmanager-installer.sh

Upgrading from v0.1.21-cm.4

System Settings → Software Update. No migration steps required.

SHA-256: 9d93fa072fe30b077af3dcd7050e906f9920191518b5adffaf35e5dbcff5acc7 qmanager.tar.gz

v0.1.21-cm.3 — Fix AT+QENG single-line format, revert forwarding

26 Apr 13:37

Choose a tag to compare

Bug fixes:

  1. RM551 adapter fails to parse single-line AT+QENG response — T-Mobile and Verizon modems return the serving cell on one line (+QENG: "servingcell","NOCONN","LTE",...), while AT&T returns it on two separate lines. The adapter only matched the two-line format (grep '+QENG: "LTE"'). Fixed: try two-line format first, then normalize single-line by extracting from "LTE" onward. Same fix applied to neighbourcell helper.

  2. Reverted peer forwarding feature — Phone already sends NMEA to all three sleds directly. Removed nmea_forward_peers UCI option, settings CGI fields, and relay forwarding code.

What changed:

  • scripts/usr/lib/qmanager/cellmapper/adapters/rm551.sh — dual-format parsing
  • scripts/usr/bin/qmanager_cm_nmea_relay — reverted to base relay (no forwarding)
  • scripts/usr/lib/qmanager/cellmapper_uci.sh — removed forward_peers default
  • scripts/www/cgi-bin/quecmanager/cellmapper/settings.sh — removed forward_peers fields

v0.1.21-cm.2 — Fix sqlite3, GPS fan-out, sidebar highlight

26 Apr 12:45

Choose a tag to compare

Bug fixes:

  1. sqlite3-cli missing from install — Collector and uploader crash on fresh installs with sqlite3: not found. Added to REQUIRED_PACKAGES.

  2. NMEA UDP relay — multi-sled GPS fan-out — Phone's gpsdRelay sends NMEA to one sled only. Added nmea_forward_peers UCI option: primary sled forwards raw NMEA via persistent socat pipes to peer sleds over Tailscale. Fire-and-forget — peer unreachability doesn't affect local processing.

  3. Dashboard submenu always highlighted — Dashboard URL was same as parent CellMapper URL, causing startsWith active check to match all subpages. Fixed: exact match when sub-item URL equals parent URL.

Upgrade:

sled_upgrade http://YOUR_SLED_IP

After upgrade, configure forwarding on the primary sled (AT&T):

uci set quecmanager.cellmapper.nmea_forward_peers='100.127.10.72:29998 100.115.138.16:29998'
uci commit quecmanager
/etc/init.d/qmanager_cellmapper restart

v0.1.21-cm.4 — CellMapper bugfixes

26 Apr 15:50

Choose a tag to compare

Pre-release

Critical fixes

  • Distance calculation bugcm_distance_m glob pattern *''* always matched, permanently locking device in MOVING state. Bypassed all dedup, polled at 5s instead of 60s. Fixed with explicit -z guards.
  • Error tracking subshell_cm_add_error inside pipe subshell was silently dropped. Errors now routed through flag file to parent shell.
  • Re-auth pipelinestatus.sh was sanitizing needs_reauth and backoff uploader states to idle, making re-auth banner and error badges invisible to the UI.

Medium fixes

  • AT+QENG grep: head -1 safety on all 4 fallback patterns
  • Uploader state JSON: safe jq -n construction (replaces manual printf/sed)
  • Sign-out button: AlertDialog confirmation
  • Info strip: reads actual upload target from settings
  • Buffer table: PCI column added

Polish

  • Map card: lazy-loaded with next/dynamic (SSR disabled)
  • TypeScript types: extended uploader_state union across all components
  • i18n: 7 new keys for new states and dialogs

SHA-256: f78a8226bed3f222fe01788b9653579d31f9aeb8484d19dfd061820e42c79608 qmanager.tar.gz

v0.1.21-cm.1 — Rebased on upstream v0.1.21

26 Apr 05:05

Choose a tag to compare

CellMapper integration rebased onto upstream QManager v0.1.21.

What's new from upstream v0.1.21:

  • Poller: per-antenna signal promoted to Tier 1 (2s interval, was 10s)
  • Wake-on-LAN control (new CGI + init script)
  • Indonesian + Italian language packs
  • Locale stripping in firmware builds
  • Signal history chart now shows 2-minute window at 2s resolution

CellMapper integration (unchanged from cm.11):

  • Full collect → queue → upload pipeline
  • 12 CGI endpoints, SQLite queue DB
  • Dashboard with status, buffer, log, settings, map
  • WAL stdout leak fix, field name mismatches fixed
  • Collector writes last_measurement to state file

Note on poller change: Upstream now polls the modem every 2s instead of 10s for per-antenna signal. This increases AT command traffic on the serial port. Our collector handles contention gracefully (retry on empty response), but you may see slightly more 'empty response' warnings in logs during heavy polling periods.

v0.1.20-cm.8 — CellMapper Pipeline Fix

26 Apr 01:49

Choose a tag to compare

🐛 6 Critical Bug Fixes — CellMapper Pipeline Now Fully Operational

Fixes

  • grep -c double-output crash — BusyBox ash arithmetic syntax error from grep -c outputting 0 on exit code 1, then || echo 0 appending a second 0
  • Adapter cache never re-sourced adapter script — cache hit restored CM_ADAPTER_ID/CM_ADAPTER_NAME but never sourced rm551.sh, leaving cm_adapter_collect_serving undefined (silent exit 127)
  • install.sh skipped plugin subdirectoriesinstall_dir_flat() only copies top-level files; added install_tree for cellmapper/adapters/ and cellmapper/gps/
  • Settings CGI doesn't trigger procd reloaduci commit from CLI/CGI does NOT emit ubus config.change event; added explicit service restart after save
  • Frontend GPS field mismatchdata.fix?.satellitesdata.fix?.sats

Install

cd /tmp && wget https://github.com/moxy-kit/QManager/releases/download/v0.1.20-cm.8/qmanager.tar.gz && tar xzf qmanager.tar.gz && cd qmanager_install && sh install.sh

v0.1.20-cm.7: NMEA UDP Relay GPS Source

26 Apr 00:25

Choose a tag to compare

Features

  • Phone relay (gpsdRelay) — new built-in GPS source that receives NMEA sentences over UDP directly from a phone. No gpsd daemon, socat bridge, or router needed.
  • Lightweight relay daemon: socat (preferred) or nc (fallback) → awk NMEA parser → atomic JSON state file
  • Auto-managed procd instance — only runs when nmea_udp is selected as GPS source
  • Configurable UDP port (default 29998, range 1024-65535)
  • GPS test endpoint validates relay status and data freshness

Bug Fixes

  • GPS dispatcher: gpsd_local and gpsd_remote UCI values are now properly handled. Previously only gpsd was matched, so UI-configured gpsd sources were silently broken.
  • i18n interpolation: 6 broken placeholder calls fixed across the UI

Upgrade

opkg install /tmp/qmanager_cm_*.ipk
# Or via QManager OTA update

Set GPS source to Phone relay (gpsdRelay), configure gpsdRelay on your Android phone to send NMEA to your sled's IP on port 29998.

v0.1.20-cm.9 — CellMapper E2E Fix

26 Apr 03:37

Choose a tag to compare

Pre-release

Fixes (7 bugs)

Critical

  • Relay crash-loop: BusyBox nc can't do persistent UDP listen — FIFO bridge with sentinel writer pattern (nc reconnects freely, awk parser persists with GPS state). socat still preferred when available.
  • Status CGI field mismatches: collector writes .state but CGI read .collector_state → always showed Stopped. Same for GPS fix (.last_gps_fix vs .gps.fix). Fixed all jq paths.
  • Adapter detection: USB sysfs/lsusb fails on PCIe/SMD modems. Falls back to reading adapter info from collector state file.
  • Uploader state: Now reads from uploader's own state file.

Secondary

  • GPS test: Frontend read fix.sats but backend sends fix.satellites. Fixed.
  • Collector: Tracks fix_type and hdop in state file. Pause flag support.
  • New control.sh: Pause/resume/restart endpoint. Frontend buttons wired with loading states and toasts.
  • install.sh: socat added to optional packages.