Skip to content

BCStamper/TravelQ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TravelQ (Arduino Uno Q)

TravelQ lets an Arduino Uno Q act as a practical travel router:

  • It boots a private AP (TravelQ) and a phone-friendly provisioning UI.
  • You use that UI to connect upstream WiFi.
  • You turn on internet sharing (NAT) when you want downstream devices to share one upstream path (important for captive portals).
  • It supports hotel flows where a phone completes login after NAT is already in place.

This is Linux-side networking on the Uno Q (NetworkManager, hostapd, dnsmasq, iptables), not an App Lab project.

Architecture

flowchart LR
  upstream[Upstream_WiFi]
  wlan0[wlan0_STA]
  unoq[UnoQ_Linux]
  ap0[ap0_AP_TravelQ]
  phone[Phone_ProvisioningUI]
  clients[Client_Devices]
  upstream <--> wlan0
  wlan0 <--> unoq
  unoq <--> ap0
  ap0 <--> phone
  ap0 <--> clients
Loading

Current behavior

  • Default boot mode: setup-only (TravelQ AP + DHCP + provisioning UI), NAT off.
  • Provisioning UI URL: http://192.168.50.1/
  • mDNS URL: http://travelq.local/ (if avahi-daemon + avahi-utils are installed).
  • Internet sharing: enable in the UI (step 1) or run scripts/enable_travel_router_wan.sh.

Recommended hotel workflow (NAT before captive)

Venues often key off the first device that hits their portal. With NAT on, traffic from your phone is masqueraded out wlan0, so completing login from the phone tends to authorize the path that downstream clients (baby monitor, laptop, etc.) will reuse—instead of each client fighting the portal separately.

  1. Install the boot service (below) so TravelQ and the UI come up automatically.
  2. Join WiFi TravelQ on your phone (set your passphrase in config/hostapd-travelq-wpa2.conf).
  3. Open http://travelq.local/ (or http://192.168.50.1/).
  4. Enable internet sharing (NAT) in the UI (step 1) before you open the hotel login page.
  5. Scan and connect to the hotel SSID (steps 2–3).
  6. Open the hotel / captive page (step 4), e.g. neverssl.com, and complete sign-in.
  7. Attach other devices to TravelQ; they should route without repeating the portal when upstream is ready.

If you prefer one tap: use “Enable NAT & open hotel login” in step 4 after upstream is connected (or enable NAT in step 1 first, then connect, then open the link).

Quick start (Obviously, do this BEFOREHAND on your Uno Q via SSH on your known/home network).

1) Install dependencies (optional manual path)

sudo apt-get update
sudo apt-get install -y python3-flask avahi-daemon avahi-utils iw hostapd dnsmasq iptables network-manager

2) Install boot service

cd ~/TravelQ
sudo ./scripts/install_systemd.sh
sudo ./scripts/check_prereqs.sh
sudo systemctl enable --now unoq-travel-router.service

install_systemd.sh now installs required apt packages by default. Use sudo ./scripts/install_systemd.sh --skip-deps if you want to manage packages manually.

3) Uninstall boot service (optional)

cd ~/TravelQ
sudo ./scripts/uninstall_systemd.sh

To also remove optional provisioning packages that TravelQ uses:

sudo ./scripts/uninstall_systemd.sh --purge-deps

Then follow the Recommended hotel workflow above from your phone.

Core commands

For scripting, SSH, or recovery, the same operations are available from the shell:

# Setup mode (AP + provisioning UI only)
sudo ./scripts/start_travel_router.sh --setup-only --with-portal

# Full router mode now (AP + NAT + provisioning UI)
sudo ./scripts/start_travel_router.sh --with-portal

# Toggle internet sharing without restarting AP
sudo ./scripts/enable_travel_router_wan.sh
sudo ./scripts/disable_travel_router_wan.sh

# Upstream helpers
./scripts/scan_upstream.sh
sudo ./scripts/connect_upstream.sh "SSID" "PASSWORD"

# Status + diagnostics
sudo ./scripts/status_travel_router.sh
sudo ./scripts/audit_radio.sh

# Stop everything
sudo ./scripts/stop_travel_router.sh

Troubleshooting examples

  • wlan0 wait timeout at boot

    • Check: journalctl -u unoq-travel-router.service -b
    • Check: logs/boot-start.log
    • Tune: UNOQ_WLAN_WAIT_SEC and UNOQ_WLAN_IW_WAIT_SEC
  • Upstream auth/connect failure

    • Check: journalctl -u NetworkManager -n 80
    • Try: sudo ./scripts/connect_upstream.sh "SSID" "PASSWORD"
  • Captive portal does not appear

    • Ensure NAT is enabled before loading the login page, then open a plain HTTP destination.
    • Try http://neverssl.com and complete venue login.

Setup UI screenshot

TravelQ provisioning UI

Documentation

  • Provisioning UI docs: notes/provisioning_ui.md
  • Boot/systemd docs: notes/persistence.md
  • Captive portal test flow: notes/captive_portal_field_test.md
  • Release checklist: docs/release-checklist.md
  • Roadmap: ROADMAP.md

Safety

  • This is a convenience router utility, not a hardened security appliance.
  • Review and change AP credentials before wide sharing.
  • Public/captive networks vary by venue; expect occasional edge cases.

About

Arduino Uno Q travel router: downstream AP, DHCP, NAT over upstream Wi-Fi

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors