mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-12-24 21:50:21 +00:00
Add module support & query their information during update cycle (#243)
* Add module support & modularize existing query This creates a base to expose more features on the supported devices. At the moment, the most visible change is that each update cycle gets information from all available modules: * Basic system info * Cloud (new) * Countdown (new) * Antitheft (new) * Schedule (new) * Time (existing, implements the time/timezone handling) * Emeter (existing, partially separated from smartdevice) * Fix imports * Fix linting * Use device host instead of alias in module repr * Add property to list available modules, print them in cli state report * usage: fix the get_realtime query * separate usage from schedule to avoid multi-inheritance * Fix module querying * Add is_supported property to modules
This commit is contained in:
29
kasa/cli.py
29
kasa/cli.py
@@ -221,7 +221,7 @@ async def state(ctx, dev: SmartDevice):
|
||||
click.echo()
|
||||
|
||||
click.echo(click.style("\t== Generic information ==", bold=True))
|
||||
click.echo(f"\tTime: {await dev.get_time()}")
|
||||
click.echo(f"\tTime: {dev.time} (tz: {dev.timezone}")
|
||||
click.echo(f"\tHardware: {dev.hw_info['hw_ver']}")
|
||||
click.echo(f"\tSoftware: {dev.hw_info['sw_ver']}")
|
||||
click.echo(f"\tMAC (rssi): {dev.mac} ({dev.rssi})")
|
||||
@@ -236,6 +236,13 @@ async def state(ctx, dev: SmartDevice):
|
||||
emeter_status = dev.emeter_realtime
|
||||
click.echo(f"\t{emeter_status}")
|
||||
|
||||
click.echo(click.style("\n\t== Modules ==", bold=True))
|
||||
for module in dev.modules.values():
|
||||
if module.is_supported:
|
||||
click.echo(click.style(f"\t+ {module}", fg="green"))
|
||||
else:
|
||||
click.echo(click.style(f"\t- {module}", fg="red"))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@pass_dev
|
||||
@@ -430,7 +437,7 @@ async def led(dev, state):
|
||||
@pass_dev
|
||||
async def time(dev):
|
||||
"""Get the device time."""
|
||||
res = await dev.get_time()
|
||||
res = dev.time
|
||||
click.echo(f"Current time: {res}")
|
||||
return res
|
||||
|
||||
@@ -488,5 +495,23 @@ async def reboot(plug, delay):
|
||||
return await plug.reboot(delay)
|
||||
|
||||
|
||||
@cli.group()
|
||||
@pass_dev
|
||||
async def schedule(dev):
|
||||
"""Scheduling commands."""
|
||||
|
||||
|
||||
@schedule.command(name="list")
|
||||
@pass_dev
|
||||
@click.argument("type", default="schedule")
|
||||
def _schedule_list(dev, type):
|
||||
"""Return the list of schedule actions for the given type."""
|
||||
sched = dev.modules[type]
|
||||
for rule in sched.rules:
|
||||
print(rule)
|
||||
else:
|
||||
click.echo(f"No rules of type {type}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
cli()
|
||||
|
||||
Reference in New Issue
Block a user