Add a Wi-Fi panel to Settings so a thriveOS appliance (e.g. the wall) can join a wireless network from the UI — no SSH/keyboard needed.
Scope (agreed): full — show current connection status, Scan for nearby networks (SSID / signal / secured), pick one → enter password → Connect, plus Forget. Targets the working onboard radio first; bake firmware-realtek so a USB dongle's wlan1 also appears (interface-picker UI is a follow-up).
Architecture (mirrors Power controls #39): the API is containerized and can't touch the host radio. thriveOS uses systemd-networkd + wpa_supplicant (no NetworkManager). A host-side helper watches the bind-mounted trunk/data/control/ dir:
- API → host:
request-wifi-scan, request-wifi-connect (SSID+PSK as JSON payload), request-wifi-forget.
- host → API:
wifi-status.json (refreshed on a timer) and wifi-scan.json.
- A
.wifi-available marker makes the panel self-hide on bare/NAS Docker hosts, exactly like Power.
Layers:
os/: thrive-wifi helper + .path/.service/init/status-timer units, 25-wlan.network, packages (wpasupplicant, iw, wireless-regdb, firmware-realtek).
trunk/api: GET /system/wifi, GET|POST /system/wifi/scan, POST /system/wifi/connect, POST /system/wifi/forget (admin-gated; connect/forget admin-only).
trunk/ui: admin-only, self-hiding WifiSection in SettingsPage.
Note: the host-side units live in the OS image, so they take effect only after an image rebuild/reflash (or a manual ephemeral install on the running Pi for testing). The UI+API layers deploy the usual way.
Add a Wi-Fi panel to Settings so a thriveOS appliance (e.g. the wall) can join a wireless network from the UI — no SSH/keyboard needed.
Scope (agreed): full — show current connection status, Scan for nearby networks (SSID / signal / secured), pick one → enter password → Connect, plus Forget. Targets the working onboard radio first; bake
firmware-realtekso a USB dongle'swlan1also appears (interface-picker UI is a follow-up).Architecture (mirrors Power controls #39): the API is containerized and can't touch the host radio. thriveOS uses systemd-networkd + wpa_supplicant (no NetworkManager). A host-side helper watches the bind-mounted
trunk/data/control/dir:request-wifi-scan,request-wifi-connect(SSID+PSK as JSON payload),request-wifi-forget.wifi-status.json(refreshed on a timer) andwifi-scan.json..wifi-availablemarker makes the panel self-hide on bare/NAS Docker hosts, exactly like Power.Layers:
os/:thrive-wifihelper +.path/.service/init/status-timer units,25-wlan.network, packages (wpasupplicant,iw,wireless-regdb,firmware-realtek).trunk/api:GET /system/wifi,GET|POST /system/wifi/scan,POST /system/wifi/connect,POST /system/wifi/forget(admin-gated; connect/forget admin-only).trunk/ui: admin-only, self-hidingWifiSectionin SettingsPage.Note: the host-side units live in the OS image, so they take effect only after an image rebuild/reflash (or a manual ephemeral install on the running Pi for testing). The UI+API layers deploy the usual way.