63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
import json
|
|
import time
|
|
import ubinascii
|
|
import network
|
|
|
|
WIFI_CHANNEL_DEFAULT = 5
|
|
|
|
|
|
def _sta_mac_hex():
|
|
sta = network.WLAN(network.STA_IF)
|
|
was_on = sta.active()
|
|
if not was_on:
|
|
sta.active(True)
|
|
time.sleep_ms(50)
|
|
try:
|
|
mac = ubinascii.hexlify(sta.config("mac")).decode().lower()
|
|
except Exception:
|
|
mac = "000000000000"
|
|
if not was_on:
|
|
sta.active(False)
|
|
return mac
|
|
|
|
|
|
class Settings(dict):
|
|
SETTINGS_FILE = "/settings.json"
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.load()
|
|
|
|
def set_defaults(self):
|
|
self["name"] = "bridge-" + _sta_mac_hex()
|
|
self["wifi_channel"] = WIFI_CHANNEL_DEFAULT
|
|
self["ap_password"] = ""
|
|
self["serial_baudrate"] = 921600
|
|
self["serial_uart_id"] = 1
|
|
self["serial_tx_pin"] = 2
|
|
self["serial_rx_pin"] = 3
|
|
self["serial_usb"] = False
|
|
|
|
def save(self):
|
|
try:
|
|
with open(self.SETTINGS_FILE, "w") as f:
|
|
f.write(json.dumps(self))
|
|
except Exception as e:
|
|
print("save settings:", e)
|
|
|
|
def load(self):
|
|
try:
|
|
with open(self.SETTINGS_FILE, "r") as f:
|
|
loaded = json.load(f)
|
|
if not isinstance(loaded, dict):
|
|
raise ValueError("not object")
|
|
except Exception:
|
|
self.clear()
|
|
self.set_defaults()
|
|
self.save()
|
|
return
|
|
self.clear()
|
|
self.set_defaults()
|
|
for k, v in loaded.items():
|
|
self[k] = v
|