feat(settings/espnow): validate wifi_channel and wire into firmware
This commit is contained in:
@@ -8,8 +8,14 @@ import time
|
|||||||
UART_BAUD = 912000
|
UART_BAUD = 912000
|
||||||
BROADCAST = b"\xff\xff\xff\xff\xff\xff"
|
BROADCAST = b"\xff\xff\xff\xff\xff\xff"
|
||||||
MAX_PEERS = 20
|
MAX_PEERS = 20
|
||||||
|
# Match led-driver / controller default settings wifi_channel (1–11)
|
||||||
|
WIFI_CHANNEL = 6
|
||||||
|
|
||||||
|
sta = network.WLAN(network.STA_IF)
|
||||||
|
sta.active(True)
|
||||||
|
sta.config(pm=network.WLAN.PM_NONE, channel=WIFI_CHANNEL)
|
||||||
|
print("WiFi STA channel:", sta.config("channel"), "(WIFI_CHANNEL=%s)" % WIFI_CHANNEL)
|
||||||
|
|
||||||
network.WLAN(network.STA_IF).active(True)
|
|
||||||
esp = espnow.ESPNow()
|
esp = espnow.ESPNow()
|
||||||
esp.active(True)
|
esp.active(True)
|
||||||
esp.add_peer(BROADCAST)
|
esp.add_peer(BROADCAST)
|
||||||
|
|||||||
Submodule led-driver updated: fb53f900fb...c42dff8975
@@ -55,15 +55,28 @@ async def configure_ap(request):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return json.dumps({"error": str(e)}), 500
|
return json.dumps({"error": str(e)}), 500
|
||||||
|
|
||||||
|
def _validate_wifi_channel(value):
|
||||||
|
"""Return int 1–11 or raise ValueError."""
|
||||||
|
ch = int(value)
|
||||||
|
if ch < 1 or ch > 11:
|
||||||
|
raise ValueError("wifi_channel must be between 1 and 11")
|
||||||
|
return ch
|
||||||
|
|
||||||
|
|
||||||
@controller.put('/settings')
|
@controller.put('/settings')
|
||||||
async def update_settings(request):
|
async def update_settings(request):
|
||||||
"""Update general settings."""
|
"""Update general settings."""
|
||||||
try:
|
try:
|
||||||
data = request.json
|
data = request.json
|
||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
settings[key] = value
|
if key == 'wifi_channel' and value is not None:
|
||||||
|
settings[key] = _validate_wifi_channel(value)
|
||||||
|
else:
|
||||||
|
settings[key] = value
|
||||||
settings.save()
|
settings.save()
|
||||||
return json.dumps({"message": "Settings updated successfully"}), 200, {'Content-Type': 'application/json'}
|
return json.dumps({"message": "Settings updated successfully"}), 200, {'Content-Type': 'application/json'}
|
||||||
|
except ValueError as e:
|
||||||
|
return json.dumps({"error": str(e)}), 400
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return json.dumps({"error": str(e)}), 500
|
return json.dumps({"error": str(e)}), 500
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ class Settings(dict):
|
|||||||
self['session_secret_key'] = self.generate_secret_key()
|
self['session_secret_key'] = self.generate_secret_key()
|
||||||
# Save immediately when generating a new key
|
# Save immediately when generating a new key
|
||||||
self.save()
|
self.save()
|
||||||
|
# ESP-NOW STA channel (2.4 GHz) for LED drivers / bridge alignment; 1–11
|
||||||
|
if 'wifi_channel' not in self:
|
||||||
|
self['wifi_channel'] = 6
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user