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["ap_ip"] = "192.168.4.1" self["ws_port"] = 80 self["debug"] = True 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