import json import wifi import ubinascii import machine class Settings(dict): SETTINGS_FILE = "/settings.json" def __init__(self): super().__init__() self.load() # Load settings from file during initialization def set_defaults(self): self["num_leds"] = 50 self["pattern"] = "on" self["color1"] = "#00ff00" self["color2"] = "#ff0000" self["delay"] = 100 self["brightness"] = 10 self["name"] = f"led-{ubinascii.hexlify(wifi.get_mac()).decode()}" self["ap_password"] = "" def save(self): try: j = json.dumps(self) with open(self.SETTINGS_FILE, 'w') as file: file.write(j) print("Settings saved successfully.") except Exception as e: print(f"Error saving settings: {e}") def load(self): try: with open(self.SETTINGS_FILE, 'r') as file: loaded_settings = json.load(file) self.update(loaded_settings) print("Settings loaded successfully.") except Exception as e: print(f"Error loading settings") self.set_defaults() # Example usage def main(): settings = Settings() print(f"Number of LEDs: {settings['num_leds']}") settings['num_leds'] = 100 print(f"Updated number of LEDs: {settings['num_leds']}") settings.save() # Create a new Settings object to test loading new_settings = Settings() print(f"Loaded number of LEDs: {new_settings['num_leds']}") print(settings) def set_settings(raw_json, settings, patterns): try: data = json.loads(raw_json) print(data) for key, value in data.items(): print(key, value) if key == "color1": patterns.set_color1(tuple(int(value[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB elif key == "color2": patterns.set_color2(tuple(int(value[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB elif key == "num_leds": patterns.update_num_leds(4, value) elif key == "pattern": if not patterns.select(value): return "Pattern doesn't exist", 400 elif key == "delay": delay = int(data["delay"]) patterns.set_delay(delay) elif key == "brightness": brightness = int(data["brightness"]) patterns.set_brightness(brightness) elif key == "name": settings[key] = value settings.save() machine.reset() elif key == "sync": patterns.sync() return "OK", 200 else: return "Invalid key", 400 settings[key] = value settings.save() return "OK", 200 except (KeyError, ValueError): return "Bad request", 400 # Run the example if __name__ == "__main__": main()