1
1
import json
2
2
import math
3
+ import sys
3
4
from datetime import datetime
4
5
from enum import Enum
5
6
@@ -25,11 +26,24 @@ class NightlightMode(Enum):
25
26
26
27
27
28
class WLedController :
29
+ _api_url : str
30
+ _json_url : str
31
+ _log : bool
32
+ _MIN_BYTE : int
33
+ _MAX_BYTE : int
34
+ _MAX_TWO_BYTE : int
35
+ _MAX_FX : int
36
+
28
37
def __init__ (self , wled_socket : str , log : bool = True ) -> None :
29
- self .api_url = f"http://{ wled_socket } /"
30
- self .json_url = self .api_url + "json/"
38
+ self ._api_url = f"http://{ wled_socket } /"
39
+ self ._json_url = self ._api_url + "json/"
31
40
self ._log = log
32
41
42
+ self ._MIN_BYTE = 0
43
+ self ._MAX_BYTE = 255
44
+ self ._MAX_TWO_BYTE = 65535
45
+ self ._MAX_FX = 117
46
+
33
47
try :
34
48
self .get_status ()
35
49
except :
@@ -64,19 +78,19 @@ def deactivate_log(self) -> None:
64
78
65
79
# get requests
66
80
def get_version (self ) -> int :
67
- return int (self ._get_request (self .api_url + "version" ).text )
81
+ return int (self ._get_request (self ._api_url + "version" ).text )
68
82
69
83
def get_free_heap (self ) -> int :
70
- return int (self ._get_request (self .api_url + "freeheap" ).text )
84
+ return int (self ._get_request (self ._api_url + "freeheap" ).text )
71
85
72
86
def get_uptime (self ) -> int :
73
- return int (self ._get_request (self .api_url + "uptime" ).text )
87
+ return int (self ._get_request (self ._api_url + "uptime" ).text )
74
88
75
89
def get_timer (self ) -> int :
76
90
return self .get_status (Specifier .state , "nl" )["rem" ]
77
91
78
92
def get_status (self , specification : Specifier = Specifier .none , main_key : str = None ) -> dict [str : dict [str : any ]]:
79
- response = self ._get_request (self .json_url + specification .value ).json ()
93
+ response = self ._get_request (self ._json_url + specification .value ).json ()
80
94
if main_key :
81
95
try :
82
96
return response [main_key ]
@@ -87,7 +101,7 @@ def get_status(self, specification: Specifier = Specifier.none, main_key: str =
87
101
88
102
# nonparametric functions
89
103
def reboot (self ) -> int :
90
- return self ._get_request (self .api_url + "reset" ).status_code
104
+ return self ._get_request (self ._api_url + "reset" ).status_code
91
105
92
106
def activate (self ) -> None :
93
107
self .set_arguments (self ._build_data (("on" , "true" )))
@@ -113,7 +127,7 @@ def deactivate_live(self) -> None:
113
127
# parametric functions
114
128
def set_arguments (self , arguments : str ) -> None :
115
129
try :
116
- status = list (json .loads (self ._post_request (self .json_url , arguments ).text ))[0 ]
130
+ status = list (json .loads (self ._post_request (self ._json_url , arguments ).text ))[0 ]
117
131
118
132
if self ._log :
119
133
self ._logging (f"{ arguments } --> { status } " )
@@ -128,16 +142,16 @@ def set_arguments(self, arguments: str) -> None:
128
142
raise Exception (f"'{ arguments } ' resulted in an Error." )
129
143
130
144
def set_brightness (self , brightness : int ) -> None :
131
- if brightness < 0 or brightness > 255 :
145
+ if brightness < self . _MIN_BYTE or brightness > self . _MAX_BYTE :
132
146
raise exceptions .ValueOutOfBoundsException (brightness )
133
147
134
148
self .set_arguments (self ._build_data (("bri" , brightness )))
135
149
136
150
def set_transition (self , milliseconds : int ) -> None :
137
151
milliseconds = milliseconds / 100
138
152
139
- if milliseconds < 0 or milliseconds > 65535 :
140
- raise exceptions .ValueOutOfBoundsException (milliseconds , stop = 65535 )
153
+ if milliseconds < self . _MIN_BYTE or milliseconds > self . _MAX_TWO_BYTE :
154
+ raise exceptions .ValueOutOfBoundsException (milliseconds , stop = self . _MAX_TWO_BYTE )
141
155
142
156
self .set_arguments (self ._build_data (("transition" , math .floor (milliseconds ))))
143
157
@@ -148,7 +162,7 @@ def set_preset(self, preset: int) -> None:
148
162
self .set_arguments (self ._build_data (("ps" , preset )))
149
163
150
164
def set_timer (self , minutes : int ) -> None :
151
- if minutes < 0 or minutes > 255 :
165
+ if minutes < self . _MIN_BYTE or minutes > self . _MAX_BYTE :
152
166
raise exceptions .ValueOutOfBoundsException (minutes )
153
167
154
168
self .set_arguments (self ._build_data (("nl.dur" , minutes )))
@@ -157,32 +171,36 @@ def set_timer_mode(self, mode: NightlightMode) -> None:
157
171
self .set_arguments (self ._build_data (("nl.mode" , mode .value )))
158
172
159
173
def set_timer_brightness (self , target_brightness : int ) -> None :
160
- if target_brightness < 0 or target_brightness > 255 :
174
+ if target_brightness < self . _MIN_BYTE or target_brightness > self . _MAX_BYTE :
161
175
raise exceptions .ValueOutOfBoundsException (target_brightness )
162
176
163
177
self .set_arguments (self ._build_data (("nl.tbri" , target_brightness )))
164
178
165
179
def set_colors (self , * colors : list [int , int , int ]) -> None :
166
180
for color in colors :
167
- if min (color ) < 0 or max (color ) > 255 :
168
- raise exceptions .ValueOutOfBoundsException (color , (0 , 0 , 0 ), (255 , 255 , 255 ))
181
+ if min (color ) < self ._MIN_BYTE or max (color ) > self ._MAX_BYTE :
182
+ raise exceptions .ValueOutOfBoundsException (color , (self ._MIN_BYTE , self ._MIN_BYTE , self ._MIN_BYTE ),
183
+ (self ._MAX_BYTE , self ._MAX_BYTE , self ._MAX_BYTE ))
169
184
170
185
self .set_arguments (self ._build_data (("seg" , self ._build_data (("col" , str (list (colors )))))))
171
186
172
187
def set_effect (self , effect : int ) -> None :
173
- if effect < 0 or effect > 117 :
174
- raise exceptions .ValueOutOfBoundsException (effect , stop = 101 )
188
+ if effect < self . _MIN_BYTE or effect > self . _MAX_FX :
189
+ raise exceptions .ValueOutOfBoundsException (effect , stop = self . _MAX_FX )
175
190
176
191
self .set_arguments (self ._build_data (("seg" , self ._build_data (("fx" , effect )))))
177
192
178
193
def set_effect_speed (self , speed : int ) -> None :
179
- if speed < 0 or speed > 255 :
194
+ if speed < self . _MIN_BYTE or speed > self . _MAX_BYTE :
180
195
raise exceptions .ValueOutOfBoundsException (speed )
181
196
182
197
self .set_arguments (self ._build_data (("seg" , self ._build_data (("sx" , speed )))))
183
198
184
199
def set_effect_intensity (self , intensity : int ) -> None :
185
- if intensity < 0 or intensity > 255 :
200
+ if intensity < self . _MIN_BYTE or intensity > self . _MAX_BYTE :
186
201
raise exceptions .ValueOutOfBoundsException (intensity )
187
202
188
203
self .set_arguments (self ._build_data (("seg" , self ._build_data (("ix" , intensity )))))
204
+
205
+
206
+ WLedController ("192.168.178.42" ).set_preset (10 )
0 commit comments