@@ -310,6 +310,85 @@ async def command_reset(
310310 console .print ("[green]WLED device has been rebooted!" )
311311
312312
313+ @cli .command ("state" )
314+ async def command_state (
315+ host : Annotated [
316+ str ,
317+ typer .Option (
318+ help = "WLED device IP address or hostname" ,
319+ prompt = "Host address" ,
320+ show_default = False ,
321+ ),
322+ ],
323+ ) -> None :
324+ """Show the current state of the WLED device."""
325+ with console .status ("[cyan]Fetching WLED device state..." , spinner = "toggle12" ):
326+ async with WLED (host ) as led :
327+ device = await led .update ()
328+
329+ state = device .state
330+
331+ state_table = Table (title = "\n WLED device state" , show_header = False )
332+ state_table .add_column ("Property" , style = "cyan bold" )
333+ state_table .add_column ("Value" , style = "green" )
334+
335+ state_table .add_row ("Power" , "On" if state .on else "Off" )
336+ state_table .add_row ("Brightness" , str (state .brightness ))
337+ state_table .add_row ("Transition" , str (state .transition ))
338+
339+ if state .preset_id is not None and device .presets :
340+ preset = device .presets .get (state .preset_id )
341+ state_table .add_row (
342+ "Preset" , f"{ preset .name } (#{ state .preset_id } )" if preset else "Unknown"
343+ )
344+
345+ if state .playlist_id is not None and device .playlists :
346+ playlist = device .playlists .get (state .playlist_id )
347+ state_table .add_row (
348+ "Playlist" ,
349+ f"{ playlist .name } (#{ state .playlist_id } )" if playlist else "Unknown" ,
350+ )
351+
352+ state_table .add_row ("Nightlight" , "On" if state .nightlight .on else "Off" )
353+ state_table .add_row (
354+ "Live override" , state .live_data_override .name .replace ("_" , " " ).title ()
355+ )
356+
357+ console .print (state_table )
358+
359+ seg_table = Table (title = "\n Segments" , show_lines = True )
360+ seg_table .add_column ("ID" , style = "cyan bold" )
361+ seg_table .add_column ("Name" )
362+ seg_table .add_column ("Power" )
363+ seg_table .add_column ("Brightness" )
364+ seg_table .add_column ("Effect" )
365+ seg_table .add_column ("Palette" )
366+ seg_table .add_column ("Range" )
367+
368+ for seg in state .segments .values ():
369+ effect = (
370+ device .effects .get (seg .effect_id )
371+ if isinstance (seg .effect_id , int )
372+ else None
373+ )
374+ palette = (
375+ device .palettes .get (seg .palette_id )
376+ if isinstance (seg .palette_id , int )
377+ else None
378+ )
379+ seg_table .add_row (
380+ str (seg .segment_id ),
381+ seg .name or "" ,
382+ "On" if seg .on else "Off" ,
383+ str (seg .brightness ),
384+ effect .name if effect else str (seg .effect_id ),
385+ palette .name if palette else str (seg .palette_id ),
386+ f"{ seg .start } -{ seg .stop } " ,
387+ )
388+
389+ console .print (seg_table )
390+
391+
313392@cli .command ("upgrade" )
314393async def command_upgrade (
315394 host : Annotated [
0 commit comments