@@ -127,46 +127,60 @@ async def presets(ctx, dev):
127
127
def presets_list (dev : Device ):
128
128
"""List presets."""
129
129
if not (light_preset := dev .modules .get (Module .LightPreset )):
130
- error ("Presets not supported o
8000
n device " )
130
+ error ("Device does not support light presets " )
131
131
return
132
132
133
133
for idx , preset in enumerate (light_preset .preset_states_list ):
134
134
echo (
135
- f"[{ idx } ] Hue: { preset .hue :3} Saturation: { preset .saturation :3} "
136
- f"Brightness/Value: { preset .brightness :3} Temp: { preset .color_temp :4} "
135
+ f"[{ idx } ] Hue: { preset .hue or '' :3} "
136
+ f"Saturation: { preset .saturation or '' :3} "
137
+ f"Brightness/Value: { preset .brightness or '' :3} "
138
+ f"Temp: { preset .color_temp or '' :4} "
137
139
)
138
140
139
141
return light_preset .preset_states_list
140
142
141
143
142
144
@presets .command (name = "modify" )
143
145
@click .argument ("index" , type = int )
144
- @click .option ("--brightness" , type = int )
145
- @click .option ("--hue" , type = int )
146
- @click .option ("--saturation" , type = int )
147
- @click .option ("--temperature" , type = int )
146
+ @click .option ("--brightness" , type = int , required = False , default = None )
147
+ @click .option ("--hue" , type = int , required = False , default = None )
148
+ @click .option ("--saturation" , type = int , required = False , default = None )
149
+ @click .option ("--temperature" , type = int , required = False , default = None )
148
150
@pass_dev_or_child
149
151
async def presets_modify (dev : Device , index , brightness , hue , saturation , temperature ):
150
152
"""Modify a preset."""
151
- for preset in dev .presets :
152
- if preset .index == index :
153
- break
154
- else :
155
- error (f"No preset found for index { index } " )
153
+ if not (light_preset := dev .modules .get (Module .LightPreset )):
154
+ error ("Device does not support light presets" )
155
+ return
156
+
157
+ max_index = len (light_preset .preset_states_list ) - 1
158
+ if index > len (light_preset .preset_states_list ) - 1 :
159
+ error (f"Invalid index, must be between 0 and { max_index } " )
156
160
return
157
161
158
- if brightness is not None :
162
+ if all ([val is None for val in {brightness , hue , saturation , temperature }]):
163
+ error ("Need to supply at least one option to modify." )
164
+ return
165
+
166
+ # Preset names have `Not set`` as the first value
167
+ preset_name = light_preset .preset_list [index + 1 ]
168
+ preset = light_preset .preset_states_list [index ]
169
+
170
+ echo (f"Preset { preset_name } currently: { preset } " )
171
+
172
+ if brightness is not None and preset .brightness is not None :
159
173
preset .brightness = brightness
160
- if hue is not None :
174
+ if hue is not None and preset . hue is not None :
161
175
preset .hue = hue
162
- if saturation is not None :
176
+ if saturation is not None and preset . saturation is not None :
163
177
preset .saturation = saturation
164
- if temperature is not None :
178
+ if temperature is not None and preset . temperature is not None :
165
179
preset .color_temp = temperature
166
180
167
- echo (f"Going to save preset : { preset } " )
181
+ echo (f"Updating preset { preset_name } to : { preset } " )
168
182
169
- return await dev .save_preset (preset )
183
+ return await light_preset .save_preset (preset_name , preset )
170
184
171
185
172
186
@light .command ()
0 commit comments