forked from atuline/WLED
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig_tool.py
83 lines (69 loc) · 2.95 KB
/
config_tool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python3
import requests
import argparse
import json
class WLEDClient:
connectionString = None
currentState = {}
currentPresets = [None] * 16
def __init__(self, connectionString):
self.connectionString = connectionString
self.getState()
def getState(self):
wledRequest = requests.get("{0}/json/state".format(self.connectionString))
wledRequest.raise_for_status()
self.currentState = wledRequest.json()
return self.currentState
def postState(self):
wledRequest = requests.post("{0}/json/state".format(self.connectionString), json=self.currentState)
wledRequest.raise_for_status()
def changeState(self, changes):
self.currentState = {**self.currentState, **changes}
return self.currentState
def loadPreset(self, presetID):
wledRequest = requests.post("{0}/json/state".format(self.connectionString), json={"ps": presetID})
wledRequest.raise_for_status()
self.getState()
def getPresets(self):
self.getState()
for i in range(0,16):
self.loadPreset(i + 1)
self.currentPresets[i] = self.getState()
return self.currentPresets
def postPreset(self, presetID, state):
self.loadPreset(presetID)
state["psave"] = presetID
wledRequest = requests.post("{0}/json/state".format(self.connectionString), json=state)
wledRequest.raise_for_status()
print("Saving preset {}".format(presetID))
def main(args):
wledClient = WLEDClient(args.wled_host)
if args.action == "save":
with open(args.file, "w") as configFile:
json.dump(wledClient.currentState, configFile)
print(wledClient.currentState)
elif args.action == "restore":
with open(args.file, "r") as configFile:
newState = json.load(configFile)
wledClient.changeState(newState)
wledClient.postState()
elif args.action == "save_presets":
with open(args.file, "w") as presetsFile:
wledClient.getPresets()
json.dump(wledClient.currentPresets, presetsFile)
print(wledClient.currentPresets)
elif args.action == "restore_presets":
with open(args.file, "r") as presetsFile:
newPresets = json.load(presetsFile)
for i in range(0, len(newPresets)):
print(newPresets[i])
wledClient.postPreset(i + 1, newPresets[i])
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Save and Restore Current State for WLED Devices")
parser.add_argument("action", default="save",
help="Action to take", choices=["save","restore","save_presets","restore_presets"])
parser.add_argument("wled_host",
help="Host and Protocol for JSON API (e.g. `http://172.16.3.42`)")
parser.add_argument("file", help="File to save/restore from")
args = parser.parse_args()
main(args)