mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-10-04 14:25:08 +00:00
* chore(scripts): delete unreferenced helper scripts None of these is referenced by an installer, systemd unit, CI workflow, test, the web UI or src/: - utils/cleanup_venv.sh removes venv_web_v2, which nothing creates - utils/clear_python_cache.sh hardcodes ~/LEDMatrix and a .webassets-cache nothing uses - install/migrate_config.sh only copies the template, which the installer and ConfigManager already do - install/debug_install.sh, debug/debug_web_manual.py - diagnose_web_ui.sh and verify_web_ui.sh overlap diagnose_web_interface.sh, which the docs point to - fix_internet_connectivity.sh is iptables-only (stale on nftables) - diagnose_plugin_permissions.sh, dev/validate_python.py - download_nba_logos.py + README_NBA_LOGOS.md: logo_downloader fetches logos on demand - setup_plugin_repos.py linked into the production plugin-repos/ dir; the dev workflow is scripts/dev/dev_plugin_setup.sh, and MULTI_ROOT_WORKSPACE_SETUP.md now uses it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(config): drop unused plugin_system flags and a dead unit comment - config.template.json: remove plugin_system.auto_discover, auto_load_enabled and development_mode. Nothing reads them; the web UI only stores them when a client sends them. ConfigManager's migration only adds template keys, so existing configs keep theirs unchanged. - config.template.json: re-indent vegas_scroll's live_* keys. - systemd/ledmatrix.service: remove the comment documenting LEDMATRIX_ON_DEMAND_PLUGIN / on_demand_env.conf; nothing reads either. - CONFIG_REFERENCE.md: say the legacy keys are no longer in the template. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: delete docs/archive and PLUGIN_IMPLEMENTATION_SUMMARY.md - docs/archive/: superseded guides; the repository history keeps them and no live doc links into the directory. The one open document in it, WEB_UI_AUDIT_2026-09.md, moves to docs/audits/ and is linked from the docs index. - PLUGIN_IMPLEMENTATION_SUMMARY.md invented usage statistics, called v2.0.0 current, listed shipped auto-updates as future work and documented a BasePlugin.get_config() that does not exist. - docs/README.md: drop both, and stop telling contributors to archive obsolete pages instead of deleting them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(plugin-api): fix extra_small_font size, cache metric key and scroll pacing example - PLUGIN_API_REFERENCE: extra_small_font loads at 7, not 6 (crisp_size snaps it, src/display_manager.py); get_cache_metrics() returns cache_hit_rate, not hit_rate (src/cache/cache_metrics.py). - ADVANCED_PLUGIN_DEVELOPMENT: the basic scrolling example slept in a loop and never passed frame_hold; use ScrollHelper + scroll_config.configure() and set_scrolling_state(True, frame_hold=...) as PLUGIN_API_REFERENCE does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(plugin-config): match the config tab, icon and web-action docs to the code - PLUGIN_CONFIG_QUICK_START / PLUGIN_CONFIGURATION_TABS / PLUGIN_CONFIGURATION_GUIDE: there is no "Reset to Defaults" button (the tab has Refresh, Update, Uninstall, Save Configuration); plugin config hot-reloads (ConfigService + on_config_change), so no restart; the schema is found by the fixed name config_schema.json, not a manifest config_schema field; the tab row is "Plugin Manager", not "Plugins"; forms are server-rendered from /v3/partials/plugin-config/<id>; the duration hook is get_display_duration()/display_duration; a class_name mismatch raises PluginError; the store requires id, name, class_name and display_modes (not version); plugin_system.debug/log_level do not exist (use run.py -d / LEDMATRIX_DEBUG). Drop "future" features that shipped. - PLUGIN_CONFIG_CORE_PROPERTIES: list all of CORE_PLUGIN_PROPERTIES, including skin, skin_options and the vegas_* tuning keys. - PLUGIN_CUSTOM_ICONS: icon is only a Font Awesome class (fallback fa-puzzle-piece); emoji/URL icons and getPluginIcon() never existed in v3. Note that /api/v3/plugins/installed currently omits icon. - PLUGIN_WEB_UI_ACTIONS (+ example JSON): success_message, error_message and step1_message are never read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(store): describe the monorepo registry and the store UI as they are - PLUGIN_STORE_GUIDE: the Plugin Store is a section of the Plugin Manager tab; URL installs are "Install from GitHub" -> "Install Single Plugin"; bulk update exists (Check & Update All) plus opt-in weekly auto-update; PluginStoreManager() defaults to plugins/, so the Python examples pass plugin-repos; registry plugins are downloaded (GitHub API, ZIP fallback), not cloned; updates compare version with latest_version. - PLUGIN_REGISTRY_SETUP_GUIDE: replace the per-plugin-repo + tag walkthrough with a short page on the monorepo registry (plugin_path, latest_version, update_registry.py) that points at the monorepo's own SUBMISSION.md. Drops the reference to the deleted PLUGIN_IMPLEMENTATION_SUMMARY.md and setup_plugin_repos.py. - plugin_registry_template.json: use the real entry shape. - PLUGIN_QUICK_REFERENCE: automatic background updates exist (opt-in); registry example and publishing steps use the monorepo, not tags. - PLUGIN_DEVELOPMENT_GUIDE: tags/releases are not read by the store. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(readme): fix the Triple Bonnet mapping, install prerequisites and backup names - README: the Adafruit Triple Bonnet uses `regular` (3 outputs), not `regular-pi1` (1 output) -- src/matrix_support.py MAPPING_OUTPUTS, and the README's own hardware_mapping section; the template default mapping is adafruit-hat, the PWM mod switches it to adafruit-hat-pwm; manual install only needs git up front (first_time_install.sh installs python-dev-is-python3, cmake, ninja-build etc.; cython3/scons are not used); the Pi Zero 2 W is a supported low-memory board, consistent with PRODUCT.md, LOW_MEMORY_BOARDS.md and the installer's low-memory build; fix the "First_time_install.sh" spelling, an orphan "2." list item and the hello-world starter link (it lives in the plugins monorepo). - CONFIG_DEBUGGING: automatic backups are config/backups/config.json.backup.<YYYYMMDD_HHMMSS_ffffff> (five kept), not config_YYYYMMDD_HHMMSS.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(dev): correct the test-running and rgbmatrix build instructions - HOW_TO_RUN_TESTS: coverage is not collected by a plain pytest run and pytest.ini has no threshold; the only one is --cov-fail-under=52 in the core unit-test job of .github/workflows/test.yml, which runs the whole test/ tree (not an allowlist). Almost no tests carry markers, so -m integration / -m slow select nothing; drop them and -m unit as the quick check. Replace the hardcoded /home/chuck path. - DEVELOPMENT: the rgbmatrix package is built with pip install . from the submodule root (scikit-build-core + CMake + Ninja), as first_time_install.sh does; there is no make build-python / bindings/python step, and the build deps are python-dev-is-python3, cmake and ninja-build, not cython3/scons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(wifi): the setup AP is open; auto-enable can be turned off without code changes - WIFI_NETWORK_SETUP / SSH_UNAVAILABLE_AFTER_INSTALL: both AP paths in src/wifi_manager.py create an open network and nothing reads ap_password, so drop the "ledmatrix123" password and the ap_password key/advice. - SSH_UNAVAILABLE_AFTER_INSTALL: disabling automatic AP mode does not need code changes -- auto_enable_ap_mode is a WiFi-tab toggle and POST /api/v3/wifi/ap/auto-enable; note the monitor daemon reads wifi_config.json at start, so restart it after changing the setting. Use the ledpi username and a relative install path like the other docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(reference): add auto_update, drop drifted line numbers, fix UI and service details - CONFIG_REFERENCE: document the top-level auto_update.enabled key (read by web_interface/auto_update.py and src/auto_update_setup.py); replace drifted file:line references with function names; the template's dim_schedule mode is "global". - ADVANCED_FEATURES: core does not read a per-plugin background_service block (the sports plugins read their own), and priority is "higher number = higher priority" on FetchRequest but not used for ordering. - WEB_INTERFACE_GUIDE: the General tab toggle is "Web Display Autostart" (web interface service), brightness is 1-100, and config paths are relative to the LEDMatrix folder, not /config. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: drop references to code removed in #608 get_installed_plugin_info, WiFiManager's saved_networks and the six always-skipping plugin test files are deleted there. NetworkManager already remembers joined networks; LEDMatrix no longer stores WiFi passwords. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: don't link SKIN_SYSTEM.md from the core-properties page #615 deletes SKIN_SYSTEM.md; with this link, whichever of the two merged second would break test_doc_links. The skin/skin_options entries go when #615 removes the keys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
614 lines
15 KiB
Markdown
614 lines
15 KiB
Markdown
# WiFi Network Setup Guide
|
||
|
||
## Overview
|
||
|
||
The LEDMatrix WiFi system provides automatic network configuration with intelligent failover to Access Point (AP) mode. When your Raspberry Pi loses network connectivity, it automatically creates a WiFi access point for easy configuration—ensuring you can always connect to your device.
|
||
|
||
### Key Features
|
||
|
||
- **Automatic AP Mode**: Creates a WiFi access point when network connection is lost
|
||
- **Intelligent Failover**: Only activates after a grace period to prevent false positives
|
||
- **Dual Connectivity**: Supports both WiFi and Ethernet with automatic priority management
|
||
- **Web Interface**: Configure WiFi through an easy-to-use web interface
|
||
- **Network Scanning**: Scan and connect to available WiFi networks
|
||
- **Secure Storage**: WiFi credentials stored securely
|
||
|
||
---
|
||
|
||
## Quick Start
|
||
|
||
### Accessing WiFi Setup
|
||
|
||
**If not connected to WiFi:**
|
||
1. Wait 90 seconds after boot (AP mode activation grace period)
|
||
2. Connect to WiFi network **LEDMatrix-Setup** (an open network: no
|
||
password)
|
||
3. Open browser to: `http://192.168.4.1:5000`
|
||
4. Open the **WiFi** tab
|
||
5. Scan, select your network, and connect
|
||
|
||
**If already connected:**
|
||
1. Open browser to: `http://your-pi-ip:5000`
|
||
2. Navigate to the WiFi tab
|
||
3. Configure as needed
|
||
|
||
---
|
||
|
||
## Installation
|
||
|
||
### Prerequisites
|
||
|
||
The following packages are required:
|
||
- **hostapd** - Access point software
|
||
- **dnsmasq** - DHCP server for AP mode
|
||
- **NetworkManager** - WiFi management
|
||
|
||
### Install WiFi Monitor Service
|
||
|
||
```bash
|
||
cd /home/ledpi/LEDMatrix
|
||
sudo ./scripts/install/install_wifi_monitor.sh
|
||
```
|
||
|
||
This script will:
|
||
- Check for required packages and offer to install them
|
||
- Create the systemd service file
|
||
- Enable and start the WiFi monitor service
|
||
- Configure the service to start on boot
|
||
|
||
### Verify Installation
|
||
|
||
```bash
|
||
# Check service status
|
||
sudo systemctl status ledmatrix-wifi-monitor
|
||
|
||
# Run verification script
|
||
./scripts/verify_wifi_setup.sh
|
||
```
|
||
|
||
---
|
||
|
||
## Configuration
|
||
|
||
### Configuration File
|
||
|
||
WiFi settings are stored in `config/wifi_config.json`:
|
||
|
||
```json
|
||
{
|
||
"ap_ssid": "LEDMatrix-Setup",
|
||
"ap_channel": 7,
|
||
"auto_enable_ap_mode": true
|
||
}
|
||
```
|
||
|
||
### Configuration Options
|
||
|
||
| Setting | Default | Description |
|
||
|---------|---------|-------------|
|
||
| `ap_ssid` | `LEDMatrix-Setup` | Network name broadcast in AP mode |
|
||
| `ap_channel` | `7` | WiFi channel (1, 6, or 11 are non-overlapping) |
|
||
| `auto_enable_ap_mode` | `true` | Automatically enable AP mode when both WiFi and Ethernet are disconnected |
|
||
|
||
### Auto-Enable AP Mode Behavior
|
||
|
||
**When enabled (`true` - recommended):**
|
||
- AP mode activates automatically after 90-second grace period
|
||
- Only when both WiFi AND Ethernet are disconnected
|
||
- Automatically disables when either WiFi or Ethernet connects
|
||
- Best for portable devices or unreliable network environments
|
||
|
||
**When disabled (`false`):**
|
||
- AP mode must be manually enabled through web interface
|
||
- Prevents unnecessary AP activation
|
||
- Best for devices with stable network connections
|
||
|
||
---
|
||
|
||
## Using WiFi Setup
|
||
|
||
### Connecting to a WiFi Network
|
||
|
||
**Via Web Interface:**
|
||
1. Navigate to the **WiFi** tab
|
||
2. Click **Scan** to search for networks
|
||
3. Select a network from the dropdown (or enter SSID manually)
|
||
4. Enter the WiFi password (leave empty for open networks)
|
||
5. Click **Connect**
|
||
6. System will attempt connection
|
||
7. AP mode automatically disables once connected
|
||
|
||
**Via API:**
|
||
```bash
|
||
# Scan for networks
|
||
curl "http://your-pi-ip:5000/api/v3/wifi/scan"
|
||
|
||
# Connect to network
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/connect \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"ssid": "YourNetwork", "password": "your-password"}'
|
||
```
|
||
|
||
### Manual AP Mode Control
|
||
|
||
**Via Web Interface:**
|
||
- **Enable AP Mode**: Click "Enable AP Mode" button (only when WiFi/Ethernet disconnected)
|
||
- **Disable AP Mode**: Click "Disable AP Mode" button (when AP is active)
|
||
|
||
**Via API:**
|
||
```bash
|
||
# Enable AP mode
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/ap/enable
|
||
|
||
# Disable AP mode
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/ap/disable
|
||
```
|
||
|
||
**Note:** Manual enable still requires both WiFi and Ethernet to be disconnected.
|
||
|
||
---
|
||
|
||
## Understanding AP Mode Failover
|
||
|
||
### How the Grace Period Works
|
||
|
||
The system uses a **grace period mechanism** to prevent false positives from temporary network hiccups:
|
||
|
||
```
|
||
Check Interval: 30 seconds (default)
|
||
Required Checks: 3 consecutive
|
||
Grace Period: 90 seconds total
|
||
```
|
||
|
||
**Timeline Example:**
|
||
```
|
||
Time 0s: WiFi disconnects
|
||
Time 30s: Check 1 - Disconnected (counter = 1)
|
||
Time 60s: Check 2 - Disconnected (counter = 2)
|
||
Time 90s: Check 3 - Disconnected (counter = 3) → AP MODE ENABLED
|
||
```
|
||
|
||
If WiFi or Ethernet reconnects at any point, the counter resets to 0.
|
||
|
||
### Why Grace Period is Important
|
||
|
||
Without a grace period, AP mode would activate during:
|
||
- Brief network hiccups
|
||
- Router reboots
|
||
- Temporary signal interference
|
||
- NetworkManager reconnection attempts
|
||
|
||
The 90-second grace period ensures AP mode only activates during **sustained disconnection**.
|
||
|
||
### Connection Priority
|
||
|
||
The system checks connections in this order:
|
||
1. **WiFi Connection** (highest priority)
|
||
2. **Ethernet Connection** (fallback)
|
||
3. **AP Mode** (last resort - only when both WiFi and Ethernet disconnected)
|
||
|
||
### Behavior Summary
|
||
|
||
| WiFi Status | Ethernet Status | Auto-Enable | AP Mode Behavior |
|
||
|-------------|-----------------|-------------|------------------|
|
||
| Any | Any | `false` | Manual enable only |
|
||
| Connected | Any | `true` | Disabled |
|
||
| Disconnected | Connected | `true` | Disabled (Ethernet available) |
|
||
| Disconnected | Disconnected | `true` | Auto-enabled after 90s |
|
||
|
||
---
|
||
|
||
## Access Point Configuration
|
||
|
||
### AP Mode Settings
|
||
|
||
- **SSID**: `LEDMatrix-Setup` (configurable via `ap_ssid`)
|
||
- **Network**: open (no password). Both AP paths create an open network
|
||
(`_create_hostapd_config()` and `_enable_ap_mode_nmcli_hotspot()` in
|
||
`src/wifi_manager.py`); an `ap_password` key in `wifi_config.json` is not
|
||
read
|
||
- **IP Address**: 192.168.4.1
|
||
- **DHCP Range**: 192.168.4.2 – 192.168.4.20
|
||
- **Channel**: 7 (configurable via `ap_channel`)
|
||
|
||
### Accessing Services in AP Mode
|
||
|
||
When AP mode is active:
|
||
- Web Interface: `http://192.168.4.1:5000`
|
||
- SSH: `ssh ledpi@192.168.4.1`
|
||
- Captive portal may automatically redirect browsers
|
||
|
||
---
|
||
|
||
## Best Practices
|
||
|
||
### Security Recommendations
|
||
|
||
**1. Keep AP mode short-lived:**
|
||
The setup network is open, so anyone nearby can join it and reach the web
|
||
interface while it is up. AP mode only comes up when WiFi and Ethernet are
|
||
both disconnected (after the 90 second grace period) and goes down again once
|
||
the Pi is connected; in a public area, consider setting
|
||
`auto_enable_ap_mode` to `false` and enabling AP mode by hand when needed.
|
||
|
||
**2. Use Non-Overlapping WiFi Channels:**
|
||
- Channels 1, 6, 11 are non-overlapping (2.4GHz)
|
||
- Choose a channel that doesn't conflict with your primary network
|
||
- Example: If primary uses channel 1, use channel 11 for AP mode
|
||
|
||
**3. Secure WiFi Credentials:**
|
||
```bash
|
||
sudo chmod 600 config/wifi_config.json
|
||
```
|
||
|
||
### Network Configuration Tips
|
||
|
||
**Multiple Networks:**
|
||
|
||
NetworkManager remembers every network you connect to and rejoins whichever is
|
||
in range; list them with `nmcli connection show`. LEDMatrix itself does not
|
||
store WiFi passwords.
|
||
|
||
**Adjust Check Interval:**
|
||
|
||
Edit the systemd service file to change grace period:
|
||
```bash
|
||
sudo systemctl edit ledmatrix-wifi-monitor
|
||
```
|
||
|
||
Add:
|
||
```ini
|
||
[Service]
|
||
ExecStart=
|
||
ExecStart=/usr/bin/python3 /path/to/LEDMatrix/scripts/utils/wifi_monitor_daemon.py --interval 20
|
||
```
|
||
|
||
**Note:** Interval affects grace period:
|
||
- 20-second interval = 60-second grace period (3 × 20)
|
||
- 30-second interval = 90-second grace period (3 × 30) ← Default
|
||
- 60-second interval = 180-second grace period (3 × 60)
|
||
|
||
---
|
||
|
||
## Configuration Scenarios
|
||
|
||
### Scenario 1: Portable Device with Auto-Failover (Recommended)
|
||
|
||
**Use Case:** Device may lose WiFi connection
|
||
|
||
**Configuration:**
|
||
```json
|
||
{
|
||
"auto_enable_ap_mode": true
|
||
}
|
||
```
|
||
|
||
**Behavior:**
|
||
- AP mode activates automatically after 90 seconds of disconnection
|
||
- Always provides a way to connect
|
||
- Best for devices that move or have unreliable WiFi
|
||
|
||
### Scenario 2: Stable Network Connection
|
||
|
||
**Use Case:** Ethernet or reliable WiFi connection
|
||
|
||
**Configuration:**
|
||
```json
|
||
{
|
||
"auto_enable_ap_mode": false
|
||
}
|
||
```
|
||
|
||
**Behavior:**
|
||
- AP mode must be manually enabled
|
||
- Prevents unnecessary activation
|
||
- Best for stationary devices with stable connections
|
||
|
||
### Scenario 3: Ethernet Primary with WiFi Backup
|
||
|
||
**Use Case:** Primary Ethernet, WiFi as backup
|
||
|
||
**Configuration:**
|
||
```json
|
||
{
|
||
"auto_enable_ap_mode": true
|
||
}
|
||
```
|
||
|
||
**Behavior:**
|
||
- Ethernet connection prevents AP mode activation
|
||
- If Ethernet disconnects, WiFi is attempted
|
||
- If both disconnect, AP mode activates after grace period
|
||
- Best for devices with both Ethernet and WiFi
|
||
|
||
---
|
||
|
||
## Troubleshooting
|
||
|
||
### AP Mode Not Activating
|
||
|
||
**Check 1: Auto-Enable Setting**
|
||
```bash
|
||
cat config/wifi_config.json | grep auto_enable_ap_mode
|
||
```
|
||
Should show `"auto_enable_ap_mode": true`
|
||
|
||
**Check 2: Service Status**
|
||
```bash
|
||
sudo systemctl status ledmatrix-wifi-monitor
|
||
```
|
||
Service should be `active (running)`
|
||
|
||
**Check 3: Grace Period**
|
||
- Wait at least 90 seconds after disconnection
|
||
- Check logs: `sudo journalctl -u ledmatrix-wifi-monitor -f`
|
||
|
||
**Check 4: Ethernet Connection**
|
||
- If Ethernet is connected, AP mode won't activate
|
||
- Verify: `nmcli device status`
|
||
- Disconnect Ethernet to test AP mode
|
||
|
||
**Check 5: Required Packages**
|
||
```bash
|
||
# Verify hostapd is installed
|
||
which hostapd
|
||
|
||
# Verify dnsmasq is installed
|
||
which dnsmasq
|
||
```
|
||
|
||
### Cannot Access AP Mode
|
||
|
||
**Check 1: AP Mode Active**
|
||
```bash
|
||
sudo systemctl status hostapd
|
||
sudo systemctl status dnsmasq
|
||
```
|
||
Both should be running
|
||
|
||
**Check 2: Network Interface**
|
||
```bash
|
||
ip addr show wlan0
|
||
```
|
||
Should show IP `192.168.4.1`
|
||
|
||
**Check 3: WiFi Interface Available**
|
||
```bash
|
||
ip link show wlan0
|
||
```
|
||
Interface should exist
|
||
|
||
**Check 4: Try Manual Enable**
|
||
- Use web interface: WiFi tab → Enable AP Mode
|
||
- Or via API: `curl -X POST http://localhost:5000/api/v3/wifi/ap/enable`
|
||
|
||
### Cannot Connect to WiFi Network
|
||
|
||
**Check 1: Verify Credentials**
|
||
- Ensure SSID and password are correct
|
||
- Check for hidden networks (manual SSID entry required)
|
||
|
||
**Check 2: Check Logs**
|
||
```bash
|
||
# WiFi monitor logs
|
||
sudo journalctl -u ledmatrix-wifi-monitor -f
|
||
|
||
# NetworkManager logs
|
||
sudo journalctl -u NetworkManager -n 50
|
||
```
|
||
|
||
**Check 3: Network Compatibility**
|
||
- Verify network is 2.4GHz (5GHz may not be supported on all Pi models)
|
||
- Check if network requires special authentication
|
||
|
||
### AP Mode Not Disabling After WiFi Connect
|
||
|
||
**Check 1: WiFi Connection Status**
|
||
```bash
|
||
nmcli device status
|
||
```
|
||
|
||
**Check 2: Manually Disable**
|
||
- Use web interface: WiFi tab → Disable AP Mode
|
||
- Or restart service: `sudo systemctl restart ledmatrix-wifi-monitor`
|
||
|
||
**Check 3: Check Logs**
|
||
```bash
|
||
sudo journalctl -u ledmatrix-wifi-monitor -n 50
|
||
```
|
||
|
||
### AP Mode Activating Unexpectedly
|
||
|
||
**Check 1: Network Stability**
|
||
- Verify WiFi connection is stable
|
||
- Check router status
|
||
- Check signal strength
|
||
|
||
**Check 2: Disable Auto-Enable**
|
||
```bash
|
||
nano config/wifi_config.json
|
||
# Change: "auto_enable_ap_mode": false
|
||
sudo systemctl restart ledmatrix-wifi-monitor
|
||
```
|
||
|
||
**Check 3: Increase Grace Period**
|
||
- Edit service file to increase check interval
|
||
- Longer interval = longer grace period
|
||
- See "Best Practices" section above
|
||
|
||
---
|
||
|
||
## Monitoring and Diagnostics
|
||
|
||
### Check WiFi Status
|
||
|
||
**Via Python:**
|
||
```python
|
||
from src.wifi_manager import WiFiManager
|
||
|
||
wm = WiFiManager()
|
||
status = wm.get_wifi_status()
|
||
|
||
print(f'Connected: {status.connected}')
|
||
print(f'SSID: {status.ssid}')
|
||
print(f'IP Address: {status.ip_address}')
|
||
print(f'AP Mode Active: {status.ap_mode_active}')
|
||
print(f'Auto-Enable: {wm.config.get("auto_enable_ap_mode", False)}')
|
||
```
|
||
|
||
**Via NetworkManager:**
|
||
```bash
|
||
# View device status
|
||
nmcli device status
|
||
|
||
# View connections
|
||
nmcli connection show
|
||
|
||
# View available WiFi networks
|
||
nmcli device wifi list
|
||
```
|
||
|
||
### View Service Logs
|
||
|
||
```bash
|
||
# Real-time logs
|
||
sudo journalctl -u ledmatrix-wifi-monitor -f
|
||
|
||
# Recent logs (last 50 lines)
|
||
sudo journalctl -u ledmatrix-wifi-monitor -n 50
|
||
|
||
# Logs from specific time
|
||
sudo journalctl -u ledmatrix-wifi-monitor --since "1 hour ago"
|
||
```
|
||
|
||
### Run Verification Script
|
||
|
||
```bash
|
||
cd /home/ledpi/LEDMatrix
|
||
./scripts/verify_wifi_setup.sh
|
||
```
|
||
|
||
Checks:
|
||
- Required packages installed
|
||
- WiFi monitor service running
|
||
- Configuration files valid
|
||
- WiFi interface available
|
||
- Current connection status
|
||
- AP mode status
|
||
|
||
---
|
||
|
||
## Service Management
|
||
|
||
### Useful Commands
|
||
|
||
```bash
|
||
# Check service status
|
||
sudo systemctl status ledmatrix-wifi-monitor
|
||
|
||
# Start the service
|
||
sudo systemctl start ledmatrix-wifi-monitor
|
||
|
||
# Stop the service
|
||
sudo systemctl stop ledmatrix-wifi-monitor
|
||
|
||
# Restart the service
|
||
sudo systemctl restart ledmatrix-wifi-monitor
|
||
|
||
# View logs
|
||
sudo journalctl -u ledmatrix-wifi-monitor -f
|
||
|
||
# Disable service from starting on boot
|
||
sudo systemctl disable ledmatrix-wifi-monitor
|
||
|
||
# Enable service to start on boot
|
||
sudo systemctl enable ledmatrix-wifi-monitor
|
||
```
|
||
|
||
---
|
||
|
||
## API Reference
|
||
|
||
The WiFi setup feature exposes the following API endpoints:
|
||
|
||
| Method | Endpoint | Description |
|
||
|--------|----------|-------------|
|
||
| GET | `/api/v3/wifi/status` | Get current WiFi connection status |
|
||
| GET | `/api/v3/wifi/scan` | Scan for available WiFi networks |
|
||
| POST | `/api/v3/wifi/connect` | Connect to a WiFi network |
|
||
| POST | `/api/v3/wifi/ap/enable` | Enable access point mode |
|
||
| POST | `/api/v3/wifi/ap/disable` | Disable access point mode |
|
||
| GET | `/api/v3/wifi/ap/auto-enable` | Get auto-enable setting |
|
||
| POST | `/api/v3/wifi/ap/auto-enable` | Set auto-enable setting |
|
||
|
||
### Example Usage
|
||
|
||
```bash
|
||
# Get WiFi status
|
||
curl "http://your-pi-ip:5000/api/v3/wifi/status"
|
||
|
||
# Scan for networks
|
||
curl "http://your-pi-ip:5000/api/v3/wifi/scan"
|
||
|
||
# Connect to network
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/connect \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"ssid": "MyNetwork", "password": "mypassword"}'
|
||
|
||
# Enable AP mode
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/ap/enable
|
||
|
||
# Check auto-enable setting
|
||
curl "http://your-pi-ip:5000/api/v3/wifi/ap/auto-enable"
|
||
|
||
# Set auto-enable
|
||
curl -X POST http://your-pi-ip:5000/api/v3/wifi/ap/auto-enable \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"auto_enable_ap_mode": true}'
|
||
```
|
||
|
||
---
|
||
|
||
## Technical Details
|
||
|
||
### WiFi Monitor Daemon
|
||
|
||
The WiFi monitor daemon (`wifi_monitor_daemon.py`) runs as a background service that:
|
||
|
||
1. Checks WiFi and Ethernet connection status every 30 seconds (configurable)
|
||
2. Maintains disconnected check counter for grace period
|
||
3. Automatically enables AP mode when:
|
||
- `auto_enable_ap_mode` is enabled AND
|
||
- Both WiFi and Ethernet disconnected AND
|
||
- Grace period elapsed (3 consecutive checks)
|
||
4. Automatically disables AP mode when WiFi or Ethernet connects
|
||
5. Logs all state changes
|
||
|
||
### WiFi Detection Methods
|
||
|
||
The WiFi manager tries multiple methods:
|
||
|
||
1. **NetworkManager (nmcli)** - Preferred method
|
||
2. **iwconfig** - Fallback for systems without NetworkManager
|
||
|
||
### Network Scanning Methods
|
||
|
||
1. **nmcli** - Fast, preferred method
|
||
2. **iwlist** - Fallback for older systems
|
||
|
||
### Access Point Implementation
|
||
|
||
- Uses `hostapd` for WiFi access point functionality
|
||
- Uses `dnsmasq` for DHCP and DNS services
|
||
- Configures wlan0 interface with IP 192.168.4.1
|
||
- Provides DHCP range: 192.168.4.2-20
|
||
- Captive portal with DNS redirection
|
||
|
||
---
|
||
|
||
## Related Documentation
|
||
|
||
- [WEB_INTERFACE_GUIDE.md](WEB_INTERFACE_GUIDE.md) - Using the web interface
|
||
- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) - General troubleshooting
|
||
- [GETTING_STARTED.md](GETTING_STARTED.md) - Initial setup guide
|