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 if self["color_order"] == "rbg": self.color_order = (1, 5, 3) else: self.color_order = (1, 3, 5) def set_defaults(self): self["led_pin"] = 10 self["num_leds"] = 50 self["pattern"] = "on" self["color1"] = "#00ff00" self["color2"] = "#ff0000" self["delay"] = 100 self["brightness"] = 10 self["color_order"] = "rgb" self["name"] = f"led-{ubinascii.hexlify(wifi.get_mac()).decode()}" self["ap_password"] = "" self["wifi_ssid"] = "" self["wifi_password"] = "" self["wifi_ip"] = "" self["wifi_gateway"] = "" self["id"] = 0 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() self.save() def set_settings(self, data, patterns): try: 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 self.color_order)) # Convert hex to RGB elif key == "color2": patterns.set_color2(tuple(int(value[i:i+2], 16) for i in self.color_order)) # Convert hex to RGB elif key == "num_leds": patterns.update_num_leds(self["led_pin"], 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": self[key] = value self.save() machine.reset() elif key == "color_order": if value == "rbg": self.color_order = (1, 5, 3) else: self.color_order = (1, 3, 5) pass elif key == "id": pass elif key == "led_pin": patterns.update_num_leds(value, self["num_leds"]) else: return "Invalid key", 400 self[key] = value patterns.sync() self.save() return "OK", 200 except (KeyError, ValueError): return "Bad request", 400 # 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) # Run the example if __name__ == "__main__": main()