Christian Manivong and Claude Sonnet 4.6
512871b1bb
feat: get_channel_scan() + push_radio_channel() in OpenWrtWirelessMixin
...
get_channel_scan(mode='active'|'passive'):
- Discovers AP-mode interfaces via 'iw dev'
- Runs 'iw dev <iface> scan [passive]' on each AP interface
- Parses BSS blocks: BSSID, SSID, frequency, channel, signal, channel
width (HT/VHT/HE), band (2.4/5/6 GHz)
- Returns dict[iface → list[ChannelScanEntryDict]]
push_radio_channel(radio, channel):
- Sets channel via 'uci set wireless.<radio>.channel=<ch|auto>'
- Commits and reloads: 'uci commit wireless && wifi reload'
- channel=0 writes 'auto'
Tests: 19 new unit tests covering parse logic, active/passive flag,
AP-only interface filtering, 6 GHz band detection, push command order.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-24 23:26:25 +02:00
Christian Manivong and Claude Sonnet 4.6
2c0a5e94bf
chore: track extracted mixin modules
...
Split from monolithic openwrt.py into separate mixin files for
interfaces, VLANs, packages, routing, wireless, LLDP, and config.
Already in use by the main driver; just missing from git tracking.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-19 22:13:04 +02:00