mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-10-13 02:48:07 +00:00
Optimize I/O access (#59)
* Optimize I/O access A single update() will now fetch information from all interesting modules, including the current device state and the emeter information. In practice, this will allow dropping the number of I/O reqs per homeassistant update cycle to 1, which is paramount at least for bulbs which are very picky about sequential accesses. This can be further extend to other modules/methods, if needed. Currently fetched data: * sysinfo * realtime, today's and this months emeter stats New properties: * emeter_realtime: return the most recent emeter information, update()-version of get_emeter_realtime() * emeter_today: returning today's energy consumption * emeter_this_month: same for this month Other changes: * Accessing @requires_update properties will cause SmartDeviceException if the device has not ever been update()d * Fix __repr__ for devices that haven't been updated * Smartbulb uses now the state data from get_sysinfo instead of separately querying the bulb service * SmartStrip's state_information no longer lists onsince for separate plugs * The above mentioned properties are now printed out by cli * Simplify is_on handling for bulbs * remove implicit updates, return device responses for actions, update README.md instructions. fixes #61
This commit is contained in:
14
kasa/cli.py
14
kasa/cli.py
@@ -292,7 +292,7 @@ async def raw_command(dev: SmartDevice, module, command, parameters):
|
||||
@click.option("--year", type=click.DateTime(["%Y"]), default=None, required=False)
|
||||
@click.option("--month", type=click.DateTime(["%Y-%m"]), default=None, required=False)
|
||||
@click.option("--erase", is_flag=True)
|
||||
async def emeter(dev, year, month, erase):
|
||||
async def emeter(dev: SmartDevice, year, month, erase):
|
||||
"""Query emeter for historical consumption."""
|
||||
click.echo(click.style("== Emeter ==", bold=True))
|
||||
await dev.update()
|
||||
@@ -311,17 +311,21 @@ async def emeter(dev, year, month, erase):
|
||||
elif month:
|
||||
click.echo(f"== For month {month.month} of {month.year} ==")
|
||||
emeter_status = await dev.get_emeter_daily(year=month.year, month=month.month)
|
||||
|
||||
else:
|
||||
emeter_status = await dev.get_emeter_realtime()
|
||||
click.echo("== Current State ==")
|
||||
emeter_status = dev.emeter_realtime
|
||||
|
||||
if isinstance(emeter_status, list):
|
||||
for plug in emeter_status:
|
||||
index = emeter_status.index(plug) + 1
|
||||
click.echo(f"Plug {index}: {plug}")
|
||||
else:
|
||||
click.echo(str(emeter_status))
|
||||
click.echo("Current: %s A" % emeter_status["current"])
|
||||
click.echo("Voltage: %s V" % emeter_status["voltage"])
|
||||
click.echo("Power: %s W" % emeter_status["power"])
|
||||
click.echo("Total consumption: %s kWh" % emeter_status["total"])
|
||||
|
||||
click.echo("Today: %s kWh" % dev.emeter_today)
|
||||
click.echo("This month: %s kWh" % dev.emeter_this_month)
|
||||
|
||||
|
||||
@cli.command()
|
||||
|
Reference in New Issue
Block a user