feat: read radio1 AP state in wifi get_ap

This commit is contained in:
2026-08-17 23:17:57 -05:00
parent 27df97ec43
commit 7aff767f2a
2 changed files with 127 additions and 19 deletions
@@ -1646,29 +1646,41 @@ def _uci_section(section):
def h_pineap_wifi_get_ap(ctx):
open_cfg = _uci_wifi_iface('wlan0open')
radio_cfg = _uci_wifi_iface('radio0')
wpa_cfg = _uci_wifi_iface('wlan0wpa')
def _iface_state(open_name, wpa_name, radio_name):
open_cfg = _uci_wifi_iface(open_name)
wpa_cfg = _uci_wifi_iface(wpa_name)
radio_cfg = _uci_wifi_iface(radio_name)
def _chan(cfg):
channel = cfg.get('channel') or ''
try:
return int(channel)
except (TypeError, ValueError):
return None
open_channel = _chan(open_cfg)
wpa_channel = _chan(wpa_cfg)
encryption = wpa_cfg.get('encryption') or ''
if encryption.startswith('psk2'):
encryption = 'psk2'
elif encryption.startswith('sae'):
encryption = 'sae'
elif encryption.startswith('owe'):
encryption = 'owe'
return open_cfg, wpa_cfg, radio_cfg, open_channel, wpa_channel, encryption
if _uci_wifi_iface('wlan1open') or _uci_wifi_iface('wlan1wpa'):
open_cfg, wpa_cfg, radio_cfg, open_channel, wpa_channel, encryption = _iface_state(
'wlan1open', 'wlan1wpa', 'radio1')
else:
open_cfg, wpa_cfg, radio_cfg, open_channel, wpa_channel, encryption = _iface_state(
'wlan0open', 'wlan0wpa', 'radio0')
status, data = daemon_sock_call('GET', '/api/pineap/hostapd/get_config')
host = data if status == 200 and isinstance(data, dict) else {}
status2, data2 = daemon_sock_call('GET', '/api/pineap/get_config')
pinecfg = data2 if status2 == 200 and isinstance(data2, dict) else {}
pool = _uci_section('pineapd.@ssidpool[0]')
channel = radio_cfg.get('channel') or ''
try:
channel = int(channel)
except (TypeError, ValueError):
channel = None
encryption = wpa_cfg.get('encryption') or ''
# OpenWrt commonly decorates the key-management value with a cipher
# (for example, "psk2+ccmp"). The UI exposes the logical modes, so
# normalize the live UCI value to an option the select can represent.
if encryption.startswith('psk2'):
encryption = 'psk2'
elif encryption.startswith('sae'):
encryption = 'sae'
elif encryption.startswith('owe'):
encryption = 'owe'
radio1 = _uci_wifi_iface('radio1')
return 200, {
'open': {
'enabled': open_cfg.get('disabled') == '0',
@@ -1676,7 +1688,7 @@ def h_pineap_wifi_get_ap(ctx):
'bssid': open_cfg.get('macaddr') or '',
'target': pool.get('target') or None,
'hidden': open_cfg.get('hidden') == '1',
'channel': channel,
'channel': open_channel,
'country': radio_cfg.get('country') or '',
},
'wpa': {
@@ -1685,9 +1697,17 @@ def h_pineap_wifi_get_ap(ctx):
'enctype': encryption,
'hidden': wpa_cfg.get('hidden') == '1',
'enabled': wpa_cfg.get('disabled') == '0',
'channel': wpa_channel,
},
'enterprise': {'enabled': not host.get('pineape_disabled', True)},
'pool': {'disabled': None, 'collecting': bool(pinecfg.get('autossidpool'))},
'radio1': {
'band': {'2g': BAND_2G, '5g': BAND_5G, '6g': BAND_6G}.get(
(radio1 or {}).get('band'), BAND_5G),
'channel': (radio1 or {}).get('channel') or 'auto',
'htmode': (radio1 or {}).get('htmode') or 'VHT80',
'country': (radio1 or {}).get('country') or '',
},
}