Skip to content

Releases: dr-dolomite/QManager-RM520N

QManager RM520N BETA v0.1.4

10 Apr 07:29

Choose a tag to compare

Pre-release

πŸš€ QManager RM520N BETA v0.1.4

SMS alerts, new Rust-based AT transport, onboarding accuracy, and install reliability β€” QManager can now SMS you when your connection goes down, so you get notified even while your data link is offline. atcli_smd11 is a modern Rust reimplementation with cross-modem support, the onboarding band picker shows only the bands your modem actually supports, cell distance readings no longer lie when there's no signal, and the installer survives a read-only rootfs when enabling SSH.

Upgrading from v0.1.3? Go to System Settings -> Software Update or re-run the installer via ADB/SSH. All existing settings and profiles are preserved.


✨ What's New

πŸ“± SMS Alerts β€” Get Notified While Your Data Link Is Down

Email Alerts can only reach you after your internet comes back β€” the whole point of the alert is moot if you're notified 10 minutes late. SMS Alerts solves that by delivering notifications over the cellular control channel using the bundled sms_tool binary, so your phone rings the moment threshold is crossed even though the data PDP is offline.

  • Downtime-start + recovery β€” two notifications per outage: one when your connection has been down longer than the configured threshold, one when it returns. A separate recovery SMS fires if downtime-start succeeded, otherwise a single combined "was down for Xm, now restored" dedup message is sent so the recipient never gets confused about state
  • Registration-guarded sending β€” SMS is only attempted when the modem is actually registered on LTE or NR (modem_reachable=true AND (lte_state=connected OR nr_state=connected)). If the radio is down, the state machine waits β€” unbounded at the cycle level β€” until registration returns, rather than burning retry attempts on a dead radio
  • Bounded retry budget β€” each send event gets up to 3 real sms_tool attempts with 5s backoff. Unregistered cycles do NOT count against the budget (tracked separately via _SA_MAX_SKIPS), so a SIM with no credits produces a clean "Failed" log row, not an infinite loop
  • Threshold-based suppression β€” sub-threshold blips (e.g. a 20-second outage when threshold is 5 minutes) are silently ignored. No notifications, no log entries, no noise. Only outages that genuinely cross the threshold trigger the state machine
  • Dedup collapse β€” if the downtime-start SMS never actually went out (radio was down, 3 attempts failed, etc.), the recovery path collapses into a single combined "was down for X, now restored" message instead of firing a misleading "recovery" SMS for an event the user never heard about
  • Alert Log card β€” every send (successful or failed) is recorded in an NDJSON log at /tmp/qmanager_sms_log.json and displayed in the UI with timestamp, trigger description, status badge (Sent/Failed), and recipient number. Retained up to 100 entries
  • Hot config reload β€” changing the recipient or threshold during an active tracked outage takes effect on the next poll cycle via /tmp/qmanager_sms_reload flag β€” no poller restart needed
  • Low-power mode aware β€” alerts are suppressed when /tmp/qmanager_low_power_active is set, matching Email Alerts behavior
  • E.164 recipient format β€” phone entered as +<countrycode><number> for clarity in the UI; backend strips the + before handing off to sms_tool send
  • No new dependencies β€” sms_tool is already bundled with QManager for the SMS Center feature; SMS Alerts reuses it with the same /tmp/qmanager_at.lock flock serialization used by qcmd and the SMS Center CGI

Navigate to Monitoring > SMS Alerts in the sidebar.

⚑ Rust-Based atcli_smd11 β€” Safer, Smaller, Cross-Modem

QManager's AT command transport has been replaced with a modern Rust reimplementation from 1alessandro1/atcli_rust. The previous binary was derived from Compal's original C atcli utility, which had a known 4096-byte buffer overflow bug on large responses. The Rust version is a clean-room reimplementation with memory safety and streaming I/O.

  • Memory-safe β€” BufReader::read_line streams responses with O(1) memory usage, eliminating the 4096-byte buffer overflow from the OEM C binary
  • Cross-modem support β€” works across Quectel RM502, RM520, RM521, and RM551 β€” not locked to a single hardware variant
  • Static ARMv7 build β€” no external glibc dependencies, self-contained ~647KB binary
  • OEM-compatible terminators β€” matches the exact response terminator array from the Compal firmware (OK\r\n, ERROR\r\n, +CME ERROR:, +CMS ERROR:, BUSY\r\n, NO CARRIER\r\n, etc.)
  • Same CLI contract β€” drop-in replacement: same command-line args, same stdout output, always exits 0, handles long commands natively (AT+QSCAN tested at 1m+ without timeout). No code changes needed in qcmd or CGI scripts.
  • Tested end-to-end β€” verified against AT, ATI, AT+CSQ, AT+QSCAN, and error responses on a live RM520N-GL

πŸ“‘ Onboarding Band Preferences β€” Now Modem-Aware

The band preferences step in the onboarding wizard previously offered a hardcoded list of 46 LTE and 59 NR5G bands carried over from the RM551E. Users could select bands the RM520N-GL doesn't support, silently failing when the AT command was applied. Now the step reads live supported bands from the poller and only shows what your hardware actually handles.

  • Dynamic band lists β€” LTE and 5G (NSA+SA combined) bands come straight from useModemStatus(), driven by the poller's AT+QNWCFG="policy_band" query at boot
  • Filtered presets β€” the Low-band and Mid-band preset options only include candidates your modem supports; unsupported bands are quietly removed from the preset string
  • Hidden empty presets β€” if a preset would have no bands after filtering, the option is hidden entirely from the radio group rather than shown as an empty choice
  • Loading state β€” a clean spinner is displayed while the poller data loads, preventing interaction with an empty band list
  • Consistent with the main band-locking page β€” the onboarding step now matches the behavior of Cellular > Band Locking, so users see the same band set in both places

πŸ› Bug Fixes

  • Fixed Tailscale install hanging on download β€” both UI and CLI installs would get stuck at the "Downloading Tailscale..." stage and never complete. Two root causes: (1) detect_latest_version() ran curl -fsSL against the Tailscale CDN directory listing with no timeout, blocking indefinitely when the CDN was slow; (2) the install ran as a child process of the CGI request, so any transient network glitch or connection reset would kill the install mid-way. The qmanager_tailscale_mgr helper has been completely rewritten to mirror the proven iamromulan/quectel-rgmii-toolkit install flow: hardcoded version 1.92.5 and arch arm (no CDN scraping), two-layer execution that runs the install under a temporary systemd oneshot unit (detached from the caller), bare curl -O to download into /usrdata/ (persistent partition), sleep 2 after daemon-reload before starting the daemon, and bundled systemd units from /usr/lib/qmanager/. Validated end-to-end with reboot persistence, auth URL smoke test, and UI install/uninstall cycles.
  • Fixed tailscale CLI not found on PATH after install β€” the old script only symlinked tailscale into /usrdata/root/bin/, matching rgmii-toolkit's convention. But QManager's default root shell uses HOME=/home/root and doesn't extend PATH to include /usrdata/root/bin, so which tailscale returned empty even though the daemon was running fine. The helper now creates two symlinks: /usr/bin/tailscale (always on default PATH) and /usrdata/root/bin/tailscale (rgmii-toolkit convention). Uninstall removes both.
  • Fixed installer failing to enable SSH on read-only rootfs β€” when the user opted in to SSH at the end of the install, the script tried to write /lib/systemd/system/dropbear.service but the rootfs had already been remounted read-only by qmanager_console_mgr earlier in start_services. The SSH setup function now explicitly remounts rw before writing the service file, matching the defensive pattern used elsewhere in the installer.
  • Fixed Modem Temperature reading too low on dashboard β€” the AT+QTEMP parser averaged all sensor readings but excluded only the -273 "unavailable" sentinel from the unused mmWave sensor. Idle SDR power amplifiers (modem-sdr0-pa0..2, modem-sdr1-pa0..2) report 0 as their "not transmitting" sentinel, and those zeros were dragging the average down β€” e.g. a device with real sensor readings in the 39–43Β°C range was showing 26Β°C on the dashboard because 418 / 16 sensors = 26 instead of the correct 418 / 10 active sensors = 42. The parser now filters out both -273 and 0 readings, so only active sensors contribute to the average.
  • Fixed LTE/NR cell distance showing "< 10 m" with no signal β€” calculateLteDistance() and calculateNrDistance() previously treated TA=0 as a valid "zero distance" result, displaying "< 10 m" even when there was no 5G connection at all (the modem reports stale nr_ta=0 in that state). Both functions now treat TA <= 0 as "no data" and return null, so the UI correctly shows -. The associated tooltip also switches to "Timing Advance value is not available" when TA is 0.

πŸ“₯ Installation

No prerequisites required β€” QManager is fully independent. The installer bootstraps Entware, installs lighttpd, and sets up everything from scratch. You only need ADB or SSH access and internet connectivity on the modem.

ADB or SSH into the modem and run:

curl -fsSL -o /tmp/qmanager-installer.sh \
  https://github.com/dr-dolomite/QManager-RM520N/raw/refs/heads/main/qmanager-installer.sh && \
  bash /tmp/qmanager-installer.sh

Note: Use scp -O (legacy mode) whe...

Read more

QManager RM520N BETA v0.1.3

09 Apr 15:25

Choose a tag to compare

Pre-release

πŸš€ QManager RM520N BETA v0.1.3

Tailscale VPN, web console, email alerts, IMEI tools, and port firewall β€” access your modem remotely via Tailscale, run commands in a browser-based terminal, get email notifications on connectivity events, generate and validate IMEIs, and protect the web UI from cellular-side access.

Upgrading from v0.1.2? Go to System Settings -> Software Update or re-run the installer via ADB/SSH. All existing settings and profiles are preserved.


✨ What's New

πŸ”’ Tailscale VPN

Install, connect, and manage Tailscale directly from the QManager web UI. Access your modem remotely from any device on your Tailscale network.

  • One-click install β€” downloads the latest stable ARM binary from Tailscale's CDN automatically (falls back to v1.92.5 if version detection fails)
  • Connect & authenticate β€” generates a login URL, opens it in a new tab, and auto-detects when authentication completes
  • Connection status β€” shows hostname, Tailscale IPs (IPv4/IPv6), DNS name, tailnet, DERP relay, and MagicDNS info
  • Network peers β€” table of all devices on your tailnet with online/offline status, OS, IP addresses, exit node indicators, and relative last-seen times
  • Service control β€” start/stop the Tailscale daemon, enable/disable on boot, disconnect, logout, or fully uninstall
  • Health warnings β€” surfaces Tailscale health check messages (filtered to suppress the expected --accept-routes warning)
  • Survives reboot β€” daemon auto-starts on boot with persisted auth state
  • No SimpleAdmin dependency β€” works on clean-flashed devices without the RGMII toolkit

Navigate to Monitoring > Tailscale VPN in the sidebar.

πŸ’» Web Console

A browser-based terminal is now built into QManager β€” no need for SimpleAdmin's ttyd setup or separate SSH clients for quick commands.

  • Integrated into the QManager UI β€” the console renders inside a card matching the AT Terminal design, with the sidebar staying visible
  • ttyd v1.7.7 β€” lightweight web terminal downloaded automatically during install
  • Connection status bar β€” shows live connection state (Connected/Disconnected/Reconnecting) with automatic reconnect and exponential backoff β€” resilient on flaky cellular connections
  • Fullscreen mode β€” expand the terminal to fill the entire viewport with one click
  • Dark theme β€” colors match QManager's UI (zinc-950 background, zinc-200 text)
  • Full Entware PATH β€” /opt/bin, /opt/sbin included so Entware packages work out of the box
  • Graceful unavailable state β€” if ttyd isn't installed or isn't running, shows a clear message with a Retry button instead of a broken page
  • Protected by QManager auth β€” same session cookie as the rest of the UI
  • Non-fatal install β€” if the ttyd download fails (no internet), everything else works normally

Navigate to System > Web Console in the sidebar.

πŸ“§ Email Alerts

Get notified by email when your modem loses and recovers internet connectivity. Previously deferred from the RM520N-GL port, now fully enabled.

  • Automatic recovery alerts β€” sends an HTML email when internet returns after a downtime exceeding your configured threshold
  • Configurable threshold β€” set minimum downtime (1-60 minutes) before an alert is triggered
  • Gmail app password support β€” configure sender email, recipient, and Google app password
  • Install msmtp from UI β€” one-click install of the msmtp mail client from Entware
  • Test email β€” verify your configuration works before waiting for an actual outage
  • Alert log β€” view history of sent alerts with timestamps, trigger type, and delivery status

Navigate to Monitoring > Network Events > Email Alerts in the sidebar.

πŸ”’ IMEI Tools

A new IMEI Generator and Validator is now available under IMEI Settings β€” no backend needed, runs entirely in the browser.

  • Generate valid IMEIs β€” select a device TAC preset or enter a custom 8–12 digit prefix; the tool fills the remaining digits and computes the Luhn check digit
  • Device presets β€” ships with verified TACs (Apple iPhone 16/17 Pro, iPad Pro, Samsung Galaxy S25 Ultra/Tab S10+, Google Pixel 10 Pro) and a "Custom Prefix" option
  • Real-time Luhn validation β€” paste or type any 15-digit IMEI and see a Valid/Invalid badge instantly
  • IMEI breakdown β€” shows TAC (1–8), Serial Number (9–14), and Check Digit (15) in a structured display
  • Check on imei.info β€” one-click external lookup for any generated or entered IMEI
  • Copy to clipboard β€” grab the generated IMEI with one click
  • For educational purposes only β€” generated IMEIs pass Luhn validation but are not registered with any network

Navigate to Cellular > Settings > IMEI Settings in the sidebar.

πŸ›‘οΈ Port Firewall

A new built-in firewall service replaces SimpleAdmin's simplefirewall, protecting the web UI from unauthorized access on the cellular interface.

  • Ports 80/443 restricted to trusted interfaces: loopback, bridge0 (LAN), eth0 (Ethernet), and tailscale0 (if installed)
  • Cellular access blocked β€” DROP rules prevent anyone on the cellular/WAN side from reaching the admin panel
  • SSH (port 22) intentionally left open β€” emergency access is never blocked
  • Starts before lighttpd β€” firewall rules are active before the web server accepts connections
  • Tailscale-aware β€” automatically trusts the tailscale0 interface when Tailscale is installed; restarts itself after Tailscale install/uninstall to update trusted interfaces
  • Enabled by default β€” installed and activated during QManager setup, no configuration needed

πŸ”§ Installer Improvements

  • Firewall service is now part of the always-on service list, started and verified during install
  • Tailscale systemd units are staged in /usr/lib/qmanager/ for on-demand installation via the helper script
  • Removed ad-hoc iptables rules from qmanager_setup and the installer's start_services() β€” all port firewall management is centralized in qmanager-firewall.service
  • Web console (ttyd) is downloaded during install and enabled as an always-on service; non-fatal if download fails

πŸ› Bug Fixes

  • Fixed reboot fetch missing keepalive β€” the reboot request from the Tailscale uninstall dialog now uses keepalive: true and sends the proper request body, matching the nav-user reboot pattern. Previously the request could be cancelled by the browser during page navigation.
  • Fixed Tailscale not surviving reboot β€” two root causes: (1) tailscaled resets its state directory to 700 on every start, blocking the CGI from detecting the installation β€” is_installed() now checks the world-readable systemd unit file instead of traversing the restricted directory; (2) rootfs writes (unit file, boot symlink) weren't flushed before remounting read-only β€” added sync before every mount -o remount,ro / in the helper.
  • Fixed tailscale up --json output buffering β€” the --json flag's output is fully buffered on RM520N-GL (no stdbuf available) and never flushes to file. Switched to interactive mode with grep-based URL parsing.
  • Fixed cellular sidebar nav highlighting β€” "Cellular Information" no longer stays highlighted when navigating to other cellular sections like Settings. Active state now checks declared sub-item URLs instead of prefix matching.
  • Fixed poller logging silently failing β€” /tmp/qmanager.log was owned by www-data, blocking root (poller) from writing due to fs.protected_regular=1. Now pre-created as root-owned with mode 666. This also fixed email alerts never triggering (poller couldn't track downtime state).
  • Fixed msmtp returning rc=1 on successful sends β€” msmtp's logfile directive caused it to report failure when it couldn't write to /tmp/msmtp.log (same ownership issue). Removed the logfile directive from generated msmtprc β€” QManager has its own logging.
  • Fixed msmtp binary not found in poller context β€” the poller runs without /opt/bin in PATH. Now detects /opt/bin/msmtp explicitly at library load time.
  • Added 30s stabilization delay for recovery emails β€” after cellular radio recovery, DNS/SMTP need time to stabilize. Previously all 3 retry attempts fired too quickly and failed.

πŸ“₯ Installation

No prerequisites required β€” QManager is fully independent. The installer bootstraps Entware, installs lighttpd, and sets up everything from scratch. You only need ADB or SSH access and internet connectivity on the modem.

ADB or SSH into the modem and run:

curl -fsSL -o /tmp/qmanager-installer.sh \
  https://github.com/dr-dolomite/QManager-RM520N/raw/refs/heads/main/qmanager-installer.sh && \
  bash /tmp/qmanager-installer.sh

Note: Use scp -O (legacy mode) when transferring files to the modem β€” dropbear lacks an SFTP subsystem.

Uninstalling

bash /tmp/qmanager_install/uninstall_rm520n.sh

# To also remove config/profiles/passwords:
bash /tmp/qmanager_install/uninstall_rm520n.sh --purge

πŸ“„ Platform Notes

Features Not Yet Ported

The following RM551E features are deferred due to platform differences:

  • VPN management (NetBird) β€” Tailscale is now available, NetBird remains deferred
  • Video optimizer / traffic masquerade (DPI)
  • Bandwidth monitor
  • Ethernet status & link speed
  • Custom DNS
  • WAN interface guard

⚠️ Known Issues

  • This is a pre-release β€” please report bugs at GitHub Issues.
  • Tailscale's --accept-routes flag must never be used β€” it disconnects the device from the network entirely and requires a physical reboot to recover.
  • BusyBox flock lacks -w (timeout flag) β€” all flock usage has been adapted to use non-blocking polling loops.

πŸ’™ Thank You

Thanks for using QManager! If ...

Read more

QManager RM520N BETA v0.1.2

08 Apr 10:16

Choose a tag to compare

Pre-release

πŸš€ QManager RM520N BETA v0.1.2

Stability and installer improvements β€” fixes SMS multi-part messages, adds SSH password management, bundles Speedtest CLI, and hardens the installer for reliable upgrades.

Upgrading from v0.1.1? Go to System Settings -> Software Update or re-run the installer via ADB/SSH. All existing settings and profiles are preserved.


✨ What's New

πŸ“± SMS Multi-Part Message Support

SMS messages that span multiple segments (common for carrier notifications) are now properly reassembled and displayed as a single message. Previously, each segment appeared as a separate entry in the inbox.

  • Switched SMS backend to sms_tool which handles PDU-level multi-part reassembly natively
  • Merged messages show all storage indexes for proper deletion
  • Sending and deleting SMS messages works reliably

πŸ”‘ SSH Password Management

SSH access no longer requires manual passwd root setup via ADB.

  • Automatic setup during onboarding β€” the web UI password you set during first-time setup is automatically applied as the SSH root password
  • System Settings > SSH Password β€” new card to change the SSH password independently from the web UI password at any time
  • Connect via ssh root@192.168.225.1 using the password set during onboarding or from the settings card

πŸš„ Speedtest CLI Auto-Install

The Ookla Speedtest CLI is now automatically downloaded and installed during QManager setup. No need to install it separately from the RGMII toolkit.

  • Downloaded from Ookla's servers during install (ARMv7 armhf binary)
  • Installed to /usrdata/root/bin/speedtest (persistent across reboots)
  • Non-fatal if download fails (feature shows as unavailable in the UI)

πŸ“‘ Cell Scanner Fix

Cell scanning now works correctly with operator name resolution.

  • Fixed operator-list.json path for the RM520N-GL directory structure
  • Fixed JSON assembly crash when operator list is empty or missing
  • Provider names now resolve properly via MCC/MNC lookup

πŸ”§ Installer Improvements

Windows Line Ending Safety

Tarballs built on Windows no longer cause script failures. The installer now strips \r (carriage return) characters from all deployed shell scripts, systemd units, and sudoers rules after copying them to the device.

lighttpd Module Version Sync

When upgrading, the installer now runs opkg upgrade on lighttpd and all its modules together, preventing the plugin-version doesn't match lighttpd-version crash that could occur when modules were out of sync.

Graceful No-Internet Handling

If opkg update fails due to no internet connection, the installer now prints clear warning messages and skips all Entware package installs instead of crashing. The rest of the installation (scripts, frontend, systemd units) continues normally. Re-run the installer with internet to complete package setup.


πŸ“₯ Installation

No prerequisites required β€” QManager is fully independent. The installer bootstraps Entware, installs lighttpd, and sets up everything from scratch. You only need ADB or SSH access and internet connectivity on the modem.

ADB or SSH into the modem and run:

curl -fsSL -o /tmp/qmanager-installer.sh \
  https://github.com/dr-dolomite/QManager-RM520N/raw/refs/heads/main/qmanager-installer.sh && \
  bash /tmp/qmanager-installer.sh

Bundled Dependencies

  • atcli_smd11 β€” AT command transport via /dev/smd11
  • sms_tool β€” SMS send/recv/delete with multi-part reassembly
  • jq β€” JSON processor (Entware package)
  • dropbear β€” SSH server (Entware package)
  • speedtest β€” Ookla Speedtest CLI (downloaded during install)

Uninstalling

bash /tmp/qmanager_install/uninstall_rm520n.sh

# To also remove config/profiles/passwords:
bash /tmp/qmanager_install/uninstall_rm520n.sh --purge

πŸ“„ Platform Notes

This is a native port to the RM520N-GL's internal Linux (SDXLEMUR, ARMv7l, kernel 5.4.180). Uses systemd for service management, lighttpd for web serving, iptables for firewall rules, and /usrdata/ for persistent storage.

Features Not Yet Ported

The following RM551E features are deferred due to platform differences:

  • VPN management (Tailscale + NetBird) β€” for Tailscale, please use the RGMII Toolkit for now
  • Video optimizer / traffic masquerade (DPI)
  • Bandwidth monitor
  • Ethernet status & link speed
  • Custom DNS
  • WAN interface guard
  • Email Alerts

⚠️ Known Issues

  • This is a pre-release β€” please report bugs at GitHub Issues.
  • Email alerts require msmtp which can be installed from within the app (System Settings).
  • BusyBox flock lacks -w (timeout flag) β€” all flock usage has been adapted to use non-blocking polling loops.

πŸ’™ Thank You

Thanks for using QManager! If you find it useful, consider supporting the project on Ko-fi or PayPal. Bug reports and feature requests are always welcome.

License: MIT + Commons Clause

Happy connecting!

QManager RM520N BETA v0.1.1

06 Apr 16:17

Choose a tag to compare

Pre-release

πŸš€ QManager RM520N BETA v0.1.1 β€” First Release

The first public release of QManager for the Quectel RM520N-GL. A modern, full-featured web management interface running natively on the modem's internal Linux OS β€” a ground-up port from the RM551E/OpenWRT variant.

⚠ First release disclaimer: This is the very first release for the RM520N-GL platform. While it has been tested, there will be bugs. If possible, please test on a spare modem first before deploying on your primary device. Your bug reports help make QManager better for everyone β€” open an issue if you run into anything.


✨ What's Inside

35 pages Β· 173 components Β· 59 CGI endpoints Β· 12 shell libraries Β· 8 systemd services

πŸ“‘ Signal & Network Monitoring

  • Live Signal Dashboard β€” Real-time RSRP, RSRQ, SINR with per-antenna values (4x4 MIMO) and 30-minute historical charts
  • Antenna Statistics β€” Per-port signal breakdown with quality indicators for all 4 antenna ports
  • Antenna Alignment β€” 3-position recording tool with composite RSRP+SINR scoring to recommend best antenna placement
  • Network Events β€” Automatic detection of band changes, cell handoffs, and carrier aggregation changes
  • Latency Monitoring β€” Real-time ping with 24-hour history, jitter, packet loss, and aggregated views
  • Traffic Statistics β€” Live throughput (Mbps) and cumulative data usage

πŸ”§ Cellular Configuration

  • Band Locking β€” Select and lock specific LTE/NR bands with automatic band failover
  • Tower Locking β€” Lock to a specific cell by PCI with automatic failover and scheduled changes
  • Frequency Locking β€” Lock to exact EARFCN/ARFCN channels
  • APN Management β€” Create, edit, delete APN profiles with MNO presets (T-Mobile, AT&T, Verizon, etc.)
  • Custom SIM Profiles β€” Save complete configs (APN + TTL/HL + optional IMEI) per SIM, with ICCID-based auto-apply on SIM swap or boot
  • Connection Scenarios β€” Save and restore full network configuration snapshots
  • Network Priority β€” Configure preferred network types and selection modes
  • Cell Scanner β€” Active and neighbor cell scanning with signal comparison
  • Frequency Calculator β€” EARFCN/ARFCN to frequency conversion tool
  • SMS Center β€” Send and receive SMS messages directly from the interface
  • IMEI Settings β€” Read, backup, and modify device IMEI (with integrity check at boot)
  • FPLMN Management β€” View and manage the Forbidden PLMN list
  • MBN Configuration β€” Select and activate modem broadband configuration files

🌐 Network Settings

  • TTL/HL Settings β€” IPv4 TTL and IPv6 Hop Limit via iptables (applied at boot)
  • MTU Configuration β€” Dynamic MTU application for rmnet interfaces
  • IP Passthrough β€” Direct IP assignment to downstream devices

πŸ›‘οΈ Reliability & Monitoring

  • Connection Watchdog β€” 4-tier auto-recovery: AT+COPS deregister/reregister β†’ CFUN toggle β†’ SIM failover β†’ full reboot (with token bucket rate limiting)
  • Low Power Mode β€” Scheduled CFUN power-down windows via cron
  • Software Updates β€” In-app OTA update checking, download, SHA-256 verification, installation, and rollback
  • System Logs β€” Centralized log viewer with search

🎨 Interface

  • Dark/Light Mode β€” Full theme support with OKLCH perceptual color system
  • Responsive Design β€” Works on desktop monitors and tablets in the field
  • Cookie-Based Auth β€” Secure session management with rate limiting
  • AT Terminal β€” Direct AT command interface for advanced users
  • Setup Wizard β€” Guided onboarding for first-time configuration

πŸ“₯ Installation

No prerequisites required β€” QManager is fully independent. The installer bootstraps Entware, installs lighttpd, and sets up everything from scratch. You only need ADB or SSH access and internet connectivity on the modem.

ADB or SSH into the modem and run:

curl -fsSL -o /tmp/qmanager-installer.sh \
  https://github.com/dr-dolomite/QManager-RM520N/raw/refs/heads/main/qmanager-installer.sh && \
  bash /tmp/qmanager-installer.sh

The interactive installer fetches the latest release, verifies the SHA-256 checksum, bootstraps Entware (if needed), installs lighttpd + atcli_smd11 + jq + dropbear, configures systemd services, and reboots the modem.

Uninstalling

bash /tmp/qmanager_install/uninstall_rm520n.sh

# To also remove config/profiles/passwords:
bash /tmp/qmanager_install/uninstall_rm520n.sh --purge

πŸ“„ Platform Notes

This is a native port to the RM520N-GL's internal Linux (SDXLEMUR, ARMv7l, kernel 5.4.180) β€” not a wrapper around the OpenWRT variant. Uses systemd for service management, lighttpd for web serving, iptables for firewall rules, and /usrdata/ for persistent storage.

Features Not Yet Ported

The following RM551E features are deferred due to platform differences:

  • VPN management (Tailscale + NetBird) β€” for Tailscale, please use the RGMII Toolkit for now
  • Video optimizer / traffic masquerade (DPI)
  • Bandwidth monitor
  • Ethernet status & link speed
  • Custom DNS
  • WAN interface guard
  • Email Alerts

⚠️ Known Issues

  • This is a pre-release β€” please report bugs at GitHub Issues.
  • Email alerts require msmtp which can be installed from within the app (System Settings).

πŸ’™ Thank You

Thanks for trying the first RM520N-GL release of QManager! If you find it useful, consider supporting the project on Ko-fi or PayPal. Bug reports and feature requests are always welcome.

License: MIT + Commons Clause

Happy connecting! πŸ“‘