feat(deploy): Windows board-attach scripts + WiFi provisioning + Win11 docs

- connect-board.ps1 / .bat: PowerShell twin of connect-board.sh so teams on
  Windows 11 attach the USB Uno Q to the local self-host stack (adb forward +
  self-register; -Watch for auto-reattach; .bat bypasses execution policy)
- provision-wifi.sh: idempotent nmcli join over adb, venue WiFi baked as default
- provision-fleet.sh: run the WiFi step per board during fleet bring-up
- REQUIREMENTS.md: Windows 11 section (Docker+WSL2, native adb, USB driver),
  'does adb see your board?' check, and correct the WiFi reality (board needs
  venue WiFi for the cloud brain; we pre-join it)

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Omar Sobh
2026-07-27 14:58:16 +02:00
co-authored by Claude Opus 4.8
parent 05207ba986
commit 77373c6fc7
5 changed files with 202 additions and 6 deletions
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# provision-wifi.sh — join a Uno Q board to the workshop WiFi over adb and persist
# it. NetworkManager saves the connection profile, so the board auto-reconnects on
# every boot. The board reaches the cloud brain (api.anthropic.com) NAT'd out
# through this WiFi, so every workshop board needs it.
#
# The venue network is baked in as the default (override with WIFI_SSID/WIFI_PASS).
#
# Usage:
# ./provision-wifi.sh # first attached board
# ./provision-wifi.sh <adb-serial> # a specific board
# # every attached board at once:
# for s in $(adb devices | awk 'NR>1 && $2=="device"{print $1}'); do ./provision-wifi.sh "$s"; done
set -uo pipefail
# ── workshop WiFi (FabLab Torino) — override per venue with WIFI_SSID / WIFI_PASS ──
WIFI_SSID="${WIFI_SSID:-Fablab_Torino}"
WIFI_PASS="${WIFI_PASS:-Fablab.Torino!}"
S="${1:-$(adb devices 2>/dev/null | awk '/\tdevice$/{print $1; exit}')}"
[ -n "$S" ] || { echo "provision-wifi: no board attached over USB" >&2; exit 1; }
echo "==> [$S] joining WiFi '$WIFI_SSID'"
# Idempotent: if a saved profile already exists, just bring it up; otherwise scan
# and create it (a persistent NetworkManager profile that auto-reconnects on boot).
adb -s "$S" shell "nmcli radio wifi on >/dev/null 2>&1; sleep 1
if nmcli -t -f NAME connection show 2>/dev/null | grep -qx '$WIFI_SSID'; then
nmcli connection up '$WIFI_SSID'
else
nmcli device wifi rescan >/dev/null 2>&1; sleep 4
nmcli device wifi connect '$WIFI_SSID' password '$WIFI_PASS'
fi" 2>&1 | sed 's/^/ /'
# verify link + that the cloud is reachable through it
adb -s "$S" shell 'ip -brief addr show wlan0 2>/dev/null | sed "s/^/ wlan0: /"'
if adb -s "$S" shell 'getent hosts api.anthropic.com >/dev/null 2>&1'; then
echo " cloud DNS: resolves ✓ — board can reach the agent brain"
else
echo " cloud DNS: FAILS — check WiFi coverage / credentials" >&2
exit 1
fi