mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-04-26 16:46:23 +00:00
dump_devinfo improvements (#657)
* dump_devinfo improvements * Scrub only the last three bytes for mac addresses * Add --target to allow creating fixtures based on discovery * Save fixtures directly to correct location, add --basedir to allow defining the location of repository root * Add --autosave to disable prompting for saving * Update fixtures for devices I have * Add fixture for HS110 hw 4.0 fw 1.0.4 * Improve help strings * Fix tests * Update devtools README * Default to discovery if no host/target given
This commit is contained in:
parent
49cfef087c
commit
f77e87dc5d
@ -3,18 +3,24 @@
|
|||||||
This directory contains some simple scripts that can be useful for developers.
|
This directory contains some simple scripts that can be useful for developers.
|
||||||
|
|
||||||
## dump_devinfo
|
## dump_devinfo
|
||||||
* Queries the device and returns a fixture that can be added to the test suite
|
* Queries the device (if --host is given) or discover devices and creates fixture files that can be added to the test suite.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
Usage: dump_devinfo.py [OPTIONS] HOST
|
Usage: python -m devtools.dump_devinfo [OPTIONS]
|
||||||
|
|
||||||
Generate devinfo file for given device.
|
Generate devinfo files for devices.
|
||||||
|
|
||||||
|
Use --host (for a single device) or --target (for a complete network).
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
--host TEXT Target host.
|
||||||
|
--target TEXT Target network for discovery.
|
||||||
|
--username TEXT Username/email address to authenticate to device.
|
||||||
|
--password TEXT Password to use to authenticate to device.
|
||||||
|
--basedir TEXT Base directory for the git repository
|
||||||
|
--autosave Save without prompting
|
||||||
-d, --debug
|
-d, --debug
|
||||||
--help Show this message and exit.
|
--help Show this message and exit.
|
||||||
--username For authenticating devices.
|
|
||||||
--password
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## create_module_fixtures
|
## create_module_fixtures
|
||||||
|
@ -13,6 +13,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
from collections import defaultdict, namedtuple
|
from collections import defaultdict, namedtuple
|
||||||
|
from pathlib import Path
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
|
||||||
@ -65,7 +66,17 @@ def scrub(res):
|
|||||||
res[k] = [scrub(vi) for vi in v]
|
res[k] = [scrub(vi) for vi in v]
|
||||||
else:
|
else:
|
||||||
if k in keys_to_scrub:
|
if k in keys_to_scrub:
|
||||||
if k in ["latitude", "latitude_i", "longitude", "longitude_i"]:
|
if k in ["mac", "mic_mac"]:
|
||||||
|
# Some macs have : or - as a separator and others do not
|
||||||
|
if len(v) == 12:
|
||||||
|
v = f"{v[:6]}000000"
|
||||||
|
else:
|
||||||
|
delim = ":" if ":" in v else "-"
|
||||||
|
rest = delim.join(
|
||||||
|
format(s, "02x") for s in bytes.fromhex("000000")
|
||||||
|
)
|
||||||
|
v = f"{v[:8]}{delim}{rest}"
|
||||||
|
elif k in ["latitude", "latitude_i", "longitude", "longitude_i"]:
|
||||||
v = 0
|
v = 0
|
||||||
elif k in ["ip"]:
|
elif k in ["ip"]:
|
||||||
v = "127.0.0.123"
|
v = "127.0.0.123"
|
||||||
@ -95,8 +106,40 @@ def default_to_regular(d):
|
|||||||
return d
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
async def handle_device(basedir, autosave, device: SmartDevice):
|
||||||
|
"""Create a fixture for a single device instance."""
|
||||||
|
if isinstance(device, TapoDevice):
|
||||||
|
filename, copy_folder, final = await get_smart_fixture(device)
|
||||||
|
else:
|
||||||
|
filename, copy_folder, final = await get_legacy_fixture(device)
|
||||||
|
|
||||||
|
save_filename = Path(basedir) / copy_folder / filename
|
||||||
|
|
||||||
|
pprint(scrub(final))
|
||||||
|
if autosave:
|
||||||
|
save = "y"
|
||||||
|
else:
|
||||||
|
save = click.prompt(
|
||||||
|
f"Do you want to save the above content to {save_filename} (y/n)"
|
||||||
|
)
|
||||||
|
if save == "y":
|
||||||
|
click.echo(f"Saving info to {save_filename}")
|
||||||
|
|
||||||
|
with open(save_filename, "w") as f:
|
||||||
|
json.dump(final, f, sort_keys=True, indent=4)
|
||||||
|
f.write("\n")
|
||||||
|
else:
|
||||||
|
click.echo("Not saving.")
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@click.argument("host")
|
@click.option("--host", required=False, help="Target host.")
|
||||||
|
@click.option(
|
||||||
|
"--target",
|
||||||
|
required=False,
|
||||||
|
default="255.255.255.255",
|
||||||
|
help="Target network for discovery.",
|
||||||
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"--username",
|
"--username",
|
||||||
default="",
|
default="",
|
||||||
@ -111,37 +154,31 @@ def default_to_regular(d):
|
|||||||
envvar="KASA_PASSWORD",
|
envvar="KASA_PASSWORD",
|
||||||
help="Password to use to authenticate to device.",
|
help="Password to use to authenticate to device.",
|
||||||
)
|
)
|
||||||
|
@click.option("--basedir", help="Base directory for the git repository", default=".")
|
||||||
|
@click.option("--autosave", is_flag=True, default=False, help="Save without prompting")
|
||||||
@click.option("-d", "--debug", is_flag=True)
|
@click.option("-d", "--debug", is_flag=True)
|
||||||
async def cli(host, debug, username, password):
|
async def cli(host, target, basedir, autosave, debug, username, password):
|
||||||
"""Generate devinfo file for given device."""
|
"""Generate devinfo files for devices.
|
||||||
|
|
||||||
|
Use --host (for a single device) or --target (for a complete network).
|
||||||
|
"""
|
||||||
if debug:
|
if debug:
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
credentials = Credentials(username=username, password=password)
|
credentials = Credentials(username=username, password=password)
|
||||||
device = await Discover.discover_single(host, credentials=credentials)
|
if host is not None:
|
||||||
|
click.echo("Host given, performing discovery on %s." % host)
|
||||||
if isinstance(device, TapoDevice):
|
device = await Discover.discover_single(host, credentials=credentials)
|
||||||
save_filename, copy_folder, final = await get_smart_fixture(device)
|
await handle_device(basedir, autosave, device)
|
||||||
else:
|
else:
|
||||||
save_filename, copy_folder, final = await get_legacy_fixture(device)
|
|
||||||
|
|
||||||
pprint(scrub(final))
|
|
||||||
save = click.prompt(
|
|
||||||
f"Do you want to save the above content to {save_filename} (y/n)"
|
|
||||||
)
|
|
||||||
if save == "y":
|
|
||||||
click.echo(f"Saving info to {save_filename}")
|
|
||||||
|
|
||||||
with open(save_filename, "w") as f:
|
|
||||||
json.dump(final, f, sort_keys=True, indent=4)
|
|
||||||
f.write("\n")
|
|
||||||
|
|
||||||
click.echo(
|
click.echo(
|
||||||
f"Saved. Copy/Move {save_filename} to "
|
"No --host given, performing discovery on %s. Use --target to override."
|
||||||
+ f"{copy_folder} to add it to the test suite"
|
% target
|
||||||
)
|
)
|
||||||
else:
|
devices = await Discover.discover(target=target, credentials=credentials)
|
||||||
click.echo("Not saving.")
|
click.echo("Detected %s devices" % len(devices))
|
||||||
|
for dev in devices.values():
|
||||||
|
await handle_device(basedir, autosave, dev)
|
||||||
|
|
||||||
|
|
||||||
async def get_legacy_fixture(device):
|
async def get_legacy_fixture(device):
|
||||||
|
@ -125,7 +125,7 @@ class SmartDevice:
|
|||||||
>>> dev.rssi
|
>>> dev.rssi
|
||||||
-71
|
-71
|
||||||
>>> dev.mac
|
>>> dev.mac
|
||||||
50:C7:BF:01:F8:CD
|
50:C7:BF:00:00:00
|
||||||
|
|
||||||
Some information can also be changed programmatically:
|
Some information can also be changed programmatically:
|
||||||
|
|
||||||
@ -155,9 +155,9 @@ class SmartDevice:
|
|||||||
'hw_ver': '1.0',
|
'hw_ver': '1.0',
|
||||||
'mac': '01:23:45:67:89:ab',
|
'mac': '01:23:45:67:89:ab',
|
||||||
'type': 'IOT.SMARTPLUGSWITCH',
|
'type': 'IOT.SMARTPLUGSWITCH',
|
||||||
'hwId': '45E29DA8382494D2E82688B52A0B2EB5',
|
'hwId': '00000000000000000000000000000000',
|
||||||
'fwId': '00000000000000000000000000000000',
|
'fwId': '00000000000000000000000000000000',
|
||||||
'oemId': '3D341ECE302C0642C99E31CE2430544B',
|
'oemId': '00000000000000000000000000000000',
|
||||||
'dev_name': 'Wi-Fi Smart Plug With Energy Monitoring'}
|
'dev_name': 'Wi-Fi Smart Plug With Energy Monitoring'}
|
||||||
>>> dev.sys_info
|
>>> dev.sys_info
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ class SmartDevice:
|
|||||||
>>> dev.has_emeter
|
>>> dev.has_emeter
|
||||||
True
|
True
|
||||||
>>> dev.emeter_realtime
|
>>> dev.emeter_realtime
|
||||||
<EmeterStatus power=0.983971 voltage=235.595234 current=0.015342 total=32.448>
|
<EmeterStatus power=0.928511 voltage=231.067823 current=0.014937 total=55.139>
|
||||||
>>> dev.emeter_today
|
>>> dev.emeter_today
|
||||||
>>> dev.emeter_this_month
|
>>> dev.emeter_this_month
|
||||||
|
|
||||||
|
34
kasa/tests/fixtures/HS110(EU)_1.0_1.2.5.json
vendored
34
kasa/tests/fixtures/HS110(EU)_1.0_1.2.5.json
vendored
@ -1,44 +1,32 @@
|
|||||||
{
|
{
|
||||||
"emeter": {
|
"emeter": {
|
||||||
"get_realtime": {
|
"get_realtime": {
|
||||||
"current": 0.015342,
|
"current": 0.014937,
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"power": 0.983971,
|
"power": 0.928511,
|
||||||
"total": 32.448,
|
"total": 55.139,
|
||||||
"voltage": 235.595234
|
"voltage": 231.067823
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"smartlife.iot.common.emeter": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"smartlife.iot.dimmer": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"smartlife.iot.smartbulb.lightingservice": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"system": {
|
"system": {
|
||||||
"get_sysinfo": {
|
"get_sysinfo": {
|
||||||
"active_mode": "schedule",
|
"active_mode": "schedule",
|
||||||
"alias": "Kitchen",
|
"alias": "Kitchen",
|
||||||
"dev_name": "Wi-Fi Smart Plug With Energy Monitoring",
|
"dev_name": "Wi-Fi Smart Plug With Energy Monitoring",
|
||||||
"deviceId": "8006588E50AD389303FF31AB6302907A17442F16",
|
"deviceId": "0000000000000000000000000000000000000000",
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"feature": "TIM:ENE",
|
"feature": "TIM:ENE",
|
||||||
"fwId": "00000000000000000000000000000000",
|
"fwId": "00000000000000000000000000000000",
|
||||||
"hwId": "45E29DA8382494D2E82688B52A0B2EB5",
|
"hwId": "00000000000000000000000000000000",
|
||||||
"hw_ver": "1.0",
|
"hw_ver": "1.0",
|
||||||
"icon_hash": "",
|
"icon_hash": "",
|
||||||
"latitude": 51.476938,
|
"latitude": 0,
|
||||||
"led_off": 1,
|
"led_off": 1,
|
||||||
"longitude": 7.216849,
|
"longitude": 0,
|
||||||
"mac": "50:C7:BF:01:F8:CD",
|
"mac": "50:C7:BF:00:00:00",
|
||||||
"model": "HS110(EU)",
|
"model": "HS110(EU)",
|
||||||
"oemId": "3D341ECE302C0642C99E31CE2430544B",
|
"oemId": "00000000000000000000000000000000",
|
||||||
"on_time": 512874,
|
"on_time": 6023162,
|
||||||
"relay_state": 1,
|
"relay_state": 1,
|
||||||
"rssi": -71,
|
"rssi": -71,
|
||||||
"sw_ver": "1.2.5 Build 171213 Rel.101523",
|
"sw_ver": "1.2.5 Build 171213 Rel.101523",
|
||||||
|
40
kasa/tests/fixtures/HS110(EU)_4.0_1.0.4.json
vendored
Normal file
40
kasa/tests/fixtures/HS110(EU)_4.0_1.0.4.json
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"emeter": {
|
||||||
|
"get_realtime": {
|
||||||
|
"current_ma": 451,
|
||||||
|
"err_code": 0,
|
||||||
|
"power_mw": 61753,
|
||||||
|
"total_wh": 16323,
|
||||||
|
"voltage_mv": 230837
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"get_sysinfo": {
|
||||||
|
"active_mode": "none",
|
||||||
|
"alias": "#MASKED_NAME#",
|
||||||
|
"dev_name": "Smart Wi-Fi Plug With Energy Monitoring",
|
||||||
|
"deviceId": "0000000000000000000000000000000000000000",
|
||||||
|
"err_code": 0,
|
||||||
|
"feature": "TIM:ENE",
|
||||||
|
"hwId": "00000000000000000000000000000000",
|
||||||
|
"hw_ver": "4.0",
|
||||||
|
"icon_hash": "",
|
||||||
|
"latitude_i": 0,
|
||||||
|
"led_off": 1,
|
||||||
|
"longitude_i": 0,
|
||||||
|
"mac": "B0:95:75:00:00:00",
|
||||||
|
"mic_type": "IOT.SMARTPLUGSWITCH",
|
||||||
|
"model": "HS110(EU)",
|
||||||
|
"next_action": {
|
||||||
|
"type": -1
|
||||||
|
},
|
||||||
|
"oemId": "00000000000000000000000000000000",
|
||||||
|
"on_time": 1484778,
|
||||||
|
"relay_state": 1,
|
||||||
|
"rssi": -60,
|
||||||
|
"status": "new",
|
||||||
|
"sw_ver": "1.0.4 Build 191111 Rel.143500",
|
||||||
|
"updating": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
30
kasa/tests/fixtures/KL130(EU)_1.0_1.8.8.json
vendored
30
kasa/tests/fixtures/KL130(EU)_1.0_1.8.8.json
vendored
@ -2,24 +2,24 @@
|
|||||||
"smartlife.iot.common.emeter": {
|
"smartlife.iot.common.emeter": {
|
||||||
"get_realtime": {
|
"get_realtime": {
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"power_mw": 1300
|
"power_mw": 2500
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"smartlife.iot.smartbulb.lightingservice": {
|
"smartlife.iot.smartbulb.lightingservice": {
|
||||||
"get_light_state": {
|
"get_light_state": {
|
||||||
"brightness": 5,
|
"brightness": 17,
|
||||||
"color_temp": 2700,
|
"color_temp": 2500,
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"hue": 1,
|
"hue": 0,
|
||||||
"mode": "normal",
|
"mode": "normal",
|
||||||
"on_off": 1,
|
"on_off": 1,
|
||||||
"saturation": 1
|
"saturation": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"get_sysinfo": {
|
"get_sysinfo": {
|
||||||
"active_mode": "schedule",
|
"active_mode": "none",
|
||||||
"alias": "bedroom",
|
"alias": "#MASKED_NAME#",
|
||||||
"ctrl_protocols": {
|
"ctrl_protocols": {
|
||||||
"name": "Linkie",
|
"name": "Linkie",
|
||||||
"version": "1.0"
|
"version": "1.0"
|
||||||
@ -29,7 +29,7 @@
|
|||||||
"deviceId": "0000000000000000000000000000000000000000",
|
"deviceId": "0000000000000000000000000000000000000000",
|
||||||
"disco_ver": "1.0",
|
"disco_ver": "1.0",
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"heapsize": 332316,
|
"heapsize": 334708,
|
||||||
"hwId": "00000000000000000000000000000000",
|
"hwId": "00000000000000000000000000000000",
|
||||||
"hw_ver": "1.0",
|
"hw_ver": "1.0",
|
||||||
"is_color": 1,
|
"is_color": 1,
|
||||||
@ -37,20 +37,20 @@
|
|||||||
"is_factory": false,
|
"is_factory": false,
|
||||||
"is_variable_color_temp": 1,
|
"is_variable_color_temp": 1,
|
||||||
"light_state": {
|
"light_state": {
|
||||||
"brightness": 5,
|
"brightness": 17,
|
||||||
"color_temp": 2700,
|
"color_temp": 2500,
|
||||||
"hue": 1,
|
"hue": 0,
|
||||||
"mode": "normal",
|
"mode": "normal",
|
||||||
"on_off": 1,
|
"on_off": 1,
|
||||||
"saturation": 1
|
"saturation": 0
|
||||||
},
|
},
|
||||||
"mic_mac": "000000000000",
|
"mic_mac": "1C3BF3000000",
|
||||||
"mic_type": "IOT.SMARTBULB",
|
"mic_type": "IOT.SMARTBULB",
|
||||||
"model": "KL130(EU)",
|
"model": "KL130(EU)",
|
||||||
"oemId": "00000000000000000000000000000000",
|
"oemId": "00000000000000000000000000000000",
|
||||||
"preferred_state": [
|
"preferred_state": [
|
||||||
{
|
{
|
||||||
"brightness": 10,
|
"brightness": 50,
|
||||||
"color_temp": 2500,
|
"color_temp": 2500,
|
||||||
"hue": 0,
|
"hue": 0,
|
||||||
"index": 0,
|
"index": 0,
|
||||||
@ -78,7 +78,7 @@
|
|||||||
"saturation": 75
|
"saturation": 75
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rssi": -62,
|
"rssi": -60,
|
||||||
"sw_ver": "1.8.8 Build 190613 Rel.123436"
|
"sw_ver": "1.8.8 Build 190613 Rel.123436"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
18
kasa/tests/fixtures/KP115(EU)_1.0_1.0.16.json
vendored
18
kasa/tests/fixtures/KP115(EU)_1.0_1.0.16.json
vendored
@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"emeter": {
|
"emeter": {
|
||||||
"get_realtime": {
|
"get_realtime": {
|
||||||
"current_ma": 0,
|
"current_ma": 296,
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
"power_mw": 0,
|
"power_mw": 63499,
|
||||||
"total_wh": 0,
|
"total_wh": 12068,
|
||||||
"voltage_mv": 231561
|
"voltage_mv": 230577
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"get_sysinfo": {
|
"get_sysinfo": {
|
||||||
"active_mode": "none",
|
"active_mode": "none",
|
||||||
"alias": "TP-LINK_Smart Plug_330B",
|
"alias": "#MASKED_NAME#",
|
||||||
"dev_name": "Smart Wi-Fi Plug Mini",
|
"dev_name": "Smart Wi-Fi Plug Mini",
|
||||||
"deviceId": "0000000000000000000000000000000000000000",
|
"deviceId": "0000000000000000000000000000000000000000",
|
||||||
"err_code": 0,
|
"err_code": 0,
|
||||||
@ -20,9 +20,9 @@
|
|||||||
"hw_ver": "1.0",
|
"hw_ver": "1.0",
|
||||||
"icon_hash": "",
|
"icon_hash": "",
|
||||||
"latitude_i": 0,
|
"latitude_i": 0,
|
||||||
"led_off": 0,
|
"led_off": 1,
|
||||||
"longitude_i": 0,
|
"longitude_i": 0,
|
||||||
"mac": "00:00:00:00:00:00",
|
"mac": "C0:06:C3:00:00:00",
|
||||||
"mic_type": "IOT.SMARTPLUGSWITCH",
|
"mic_type": "IOT.SMARTPLUGSWITCH",
|
||||||
"model": "KP115(EU)",
|
"model": "KP115(EU)",
|
||||||
"next_action": {
|
"next_action": {
|
||||||
@ -31,9 +31,9 @@
|
|||||||
"ntc_state": 0,
|
"ntc_state": 0,
|
||||||
"obd_src": "tplink",
|
"obd_src": "tplink",
|
||||||
"oemId": "00000000000000000000000000000000",
|
"oemId": "00000000000000000000000000000000",
|
||||||
"on_time": 197,
|
"on_time": 2078998,
|
||||||
"relay_state": 1,
|
"relay_state": 1,
|
||||||
"rssi": -70,
|
"rssi": -49,
|
||||||
"status": "new",
|
"status": "new",
|
||||||
"sw_ver": "1.0.16 Build 210205 Rel.163735",
|
"sw_ver": "1.0.16 Build 210205 Rel.163735",
|
||||||
"updating": 0
|
"updating": 0
|
||||||
|
34
kasa/tests/fixtures/KP303(UK)_1.0_1.0.3.json
vendored
34
kasa/tests/fixtures/KP303(UK)_1.0_1.0.3.json
vendored
@ -1,20 +1,4 @@
|
|||||||
{
|
{
|
||||||
"emeter": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"smartlife.iot.common.emeter": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"smartlife.iot.dimmer": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"smartlife.iot.smartbulb.lightingservice": {
|
|
||||||
"err_code": -1,
|
|
||||||
"err_msg": "module not support"
|
|
||||||
},
|
|
||||||
"system": {
|
"system": {
|
||||||
"get_sysinfo": {
|
"get_sysinfo": {
|
||||||
"alias": "TP-LINK_Power Strip_CF69",
|
"alias": "TP-LINK_Power Strip_CF69",
|
||||||
@ -22,29 +6,29 @@
|
|||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"alias": "Plug 1",
|
"alias": "Plug 1",
|
||||||
"id": "00",
|
"id": "8006E9854025B67C3F9D99BA1E66223D1C9A8A7700",
|
||||||
"next_action": {
|
"next_action": {
|
||||||
"type": -1
|
"type": -1
|
||||||
},
|
},
|
||||||
"on_time": 302,
|
"on_time": 79701,
|
||||||
"state": 1
|
"state": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alias": "Plug 2",
|
"alias": "Plug 2",
|
||||||
"id": "01",
|
"id": "8006E9854025B67C3F9D99BA1E66223D1C9A8A7701",
|
||||||
"next_action": {
|
"next_action": {
|
||||||
"type": -1
|
"type": -1
|
||||||
},
|
},
|
||||||
"on_time": 0,
|
"on_time": 79700,
|
||||||
"state": 0
|
"state": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alias": "Plug 3",
|
"alias": "Plug 3",
|
||||||
"id": "02",
|
"id": "8006E9854025B67C3F9D99BA1E66223D1C9A8A7702",
|
||||||
"next_action": {
|
"next_action": {
|
||||||
"type": -1
|
"type": -1
|
||||||
},
|
},
|
||||||
"on_time": 0,
|
"on_time": 1484408,
|
||||||
"state": 0
|
"state": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -54,14 +38,14 @@
|
|||||||
"hwId": "00000000000000000000000000000000",
|
"hwId": "00000000000000000000000000000000",
|
||||||
"hw_ver": "1.0",
|
"hw_ver": "1.0",
|
||||||
"latitude_i": 0,
|
"latitude_i": 0,
|
||||||
"led_off": 0,
|
"led_off": 1,
|
||||||
"longitude_i": 0,
|
"longitude_i": 0,
|
||||||
"mac": "00:00:00:00:00:00",
|
"mac": "1C:3B:F3:00:00:00",
|
||||||
"mic_type": "IOT.SMARTPLUGSWITCH",
|
"mic_type": "IOT.SMARTPLUGSWITCH",
|
||||||
"model": "KP303(UK)",
|
"model": "KP303(UK)",
|
||||||
"ntc_state": 0,
|
"ntc_state": 0,
|
||||||
"oemId": "00000000000000000000000000000000",
|
"oemId": "00000000000000000000000000000000",
|
||||||
"rssi": -63,
|
"rssi": -68,
|
||||||
"status": "new",
|
"status": "new",
|
||||||
"sw_ver": "1.0.3 Build 191105 Rel.113122",
|
"sw_ver": "1.0.3 Build 191105 Rel.113122",
|
||||||
"updating": 0
|
"updating": 0
|
||||||
|
@ -106,7 +106,7 @@
|
|||||||
"factory_default": false,
|
"factory_default": false,
|
||||||
"ip": "127.0.0.123",
|
"ip": "127.0.0.123",
|
||||||
"is_support_iot_cloud": true,
|
"is_support_iot_cloud": true,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "5C-E9-31-00-00-00",
|
||||||
"mgt_encrypt_schm": {
|
"mgt_encrypt_schm": {
|
||||||
"encrypt_type": "AES",
|
"encrypt_type": "AES",
|
||||||
"http_port": 80,
|
"http_port": 80,
|
||||||
@ -141,7 +141,7 @@
|
|||||||
"get_device_info": {
|
"get_device_info": {
|
||||||
"avatar": "bulb",
|
"avatar": "bulb",
|
||||||
"brightness": 100,
|
"brightness": 100,
|
||||||
"color_temp": 2500,
|
"color_temp": 6500,
|
||||||
"color_temp_range": [
|
"color_temp_range": [
|
||||||
2500,
|
2500,
|
||||||
6500
|
6500
|
||||||
@ -150,33 +150,33 @@
|
|||||||
"re_power_type": "always_on",
|
"re_power_type": "always_on",
|
||||||
"state": {
|
"state": {
|
||||||
"brightness": 100,
|
"brightness": 100,
|
||||||
"color_temp": 2500,
|
"color_temp": 6500,
|
||||||
"hue": 31,
|
"hue": 9,
|
||||||
"saturation": 88
|
"saturation": 67
|
||||||
},
|
},
|
||||||
"type": "last_states"
|
"type": "last_states"
|
||||||
},
|
},
|
||||||
"device_id": "0000000000000000000000000000000000000000",
|
"device_id": "0000000000000000000000000000000000000000",
|
||||||
"device_on": false,
|
"device_on": true,
|
||||||
"dynamic_light_effect_enable": false,
|
"dynamic_light_effect_enable": false,
|
||||||
"fw_id": "00000000000000000000000000000000",
|
"fw_id": "00000000000000000000000000000000",
|
||||||
"fw_ver": "1.0.6 Build 230509 Rel.195312",
|
"fw_ver": "1.0.6 Build 230509 Rel.195312",
|
||||||
"has_set_location_info": true,
|
"has_set_location_info": true,
|
||||||
"hue": 31,
|
"hue": 9,
|
||||||
"hw_id": "00000000000000000000000000000000",
|
"hw_id": "00000000000000000000000000000000",
|
||||||
"hw_ver": "3.0",
|
"hw_ver": "3.0",
|
||||||
"ip": "127.0.0.123",
|
"ip": "127.0.0.123",
|
||||||
"lang": "en_US",
|
"lang": "en_US",
|
||||||
"latitude": 0,
|
"latitude": 0,
|
||||||
"longitude": 0,
|
"longitude": 0,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "5C-E9-31-00-00-00",
|
||||||
"model": "L530",
|
"model": "L530",
|
||||||
"nickname": "I01BU0tFRF9OQU1FIw==",
|
"nickname": "I01BU0tFRF9OQU1FIw==",
|
||||||
"oem_id": "00000000000000000000000000000000",
|
"oem_id": "00000000000000000000000000000000",
|
||||||
"overheated": false,
|
"overheated": false,
|
||||||
"region": "Europe/Berlin",
|
"region": "Europe/Berlin",
|
||||||
"rssi": -48,
|
"rssi": -48,
|
||||||
"saturation": 88,
|
"saturation": 67,
|
||||||
"signal_level": 3,
|
"signal_level": 3,
|
||||||
"specs": "",
|
"specs": "",
|
||||||
"ssid": "I01BU0tFRF9TU0lEIw==",
|
"ssid": "I01BU0tFRF9TU0lEIw==",
|
||||||
@ -186,23 +186,23 @@
|
|||||||
"get_device_time": {
|
"get_device_time": {
|
||||||
"region": "Europe/Berlin",
|
"region": "Europe/Berlin",
|
||||||
"time_diff": 60,
|
"time_diff": 60,
|
||||||
"timestamp": 1704212283
|
"timestamp": 1705700000
|
||||||
},
|
},
|
||||||
"get_device_usage": {
|
"get_device_usage": {
|
||||||
"power_usage": {
|
"power_usage": {
|
||||||
"past30": 53,
|
"past30": 19,
|
||||||
"past7": 12,
|
"past7": 3,
|
||||||
"today": 0
|
"today": 3
|
||||||
},
|
},
|
||||||
"saved_power": {
|
"saved_power": {
|
||||||
"past30": 494,
|
"past30": 179,
|
||||||
"past7": 112,
|
"past7": 20,
|
||||||
"today": 0
|
"today": 20
|
||||||
},
|
},
|
||||||
"time_usage": {
|
"time_usage": {
|
||||||
"past30": 547,
|
"past30": 198,
|
||||||
"past7": 124,
|
"past7": 23,
|
||||||
"today": 0
|
"today": 23
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"get_dynamic_light_effect_rules": {
|
"get_dynamic_light_effect_rules": {
|
||||||
|
118
kasa/tests/fixtures/smart/L900-5(EU)_1.0_1.0.17.json
vendored
118
kasa/tests/fixtures/smart/L900-5(EU)_1.0_1.0.17.json
vendored
@ -110,7 +110,7 @@
|
|||||||
"factory_default": false,
|
"factory_default": false,
|
||||||
"ip": "127.0.0.123",
|
"ip": "127.0.0.123",
|
||||||
"is_support_iot_cloud": true,
|
"is_support_iot_cloud": true,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "A8-42-A1-00-00-00",
|
||||||
"mgt_encrypt_schm": {
|
"mgt_encrypt_schm": {
|
||||||
"encrypt_type": "AES",
|
"encrypt_type": "AES",
|
||||||
"http_port": 80,
|
"http_port": 80,
|
||||||
@ -141,7 +141,7 @@
|
|||||||
"get_device_info": {
|
"get_device_info": {
|
||||||
"avatar": "",
|
"avatar": "",
|
||||||
"brightness": 100,
|
"brightness": 100,
|
||||||
"color_temp": 9000,
|
"color_temp": 0,
|
||||||
"color_temp_range": [
|
"color_temp_range": [
|
||||||
9000,
|
9000,
|
||||||
9000
|
9000
|
||||||
@ -149,18 +149,18 @@
|
|||||||
"default_states": {
|
"default_states": {
|
||||||
"state": {
|
"state": {
|
||||||
"brightness": 100,
|
"brightness": 100,
|
||||||
"color_temp": 9000,
|
"color_temp": 0,
|
||||||
"hue": 0,
|
"hue": 354,
|
||||||
"saturation": 100
|
"saturation": 93
|
||||||
},
|
},
|
||||||
"type": "last_states"
|
"type": "last_states"
|
||||||
},
|
},
|
||||||
"device_id": "0000000000000000000000000000000000000000",
|
"device_id": "0000000000000000000000000000000000000000",
|
||||||
"device_on": true,
|
"device_on": false,
|
||||||
"fw_id": "00000000000000000000000000000000",
|
"fw_id": "00000000000000000000000000000000",
|
||||||
"fw_ver": "1.0.17 Build 230426 Rel.153230",
|
"fw_ver": "1.0.17 Build 230426 Rel.153230",
|
||||||
"has_set_location_info": false,
|
"has_set_location_info": false,
|
||||||
"hue": 0,
|
"hue": 354,
|
||||||
"hw_id": "00000000000000000000000000000000",
|
"hw_id": "00000000000000000000000000000000",
|
||||||
"hw_ver": "1.0",
|
"hw_ver": "1.0",
|
||||||
"ip": "127.0.0.123",
|
"ip": "127.0.0.123",
|
||||||
@ -175,7 +175,7 @@
|
|||||||
"name": "station"
|
"name": "station"
|
||||||
},
|
},
|
||||||
"longitude": 0,
|
"longitude": 0,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "A8-42-A1-00-00-00",
|
||||||
"model": "L900",
|
"model": "L900",
|
||||||
"music_rhythm_enable": false,
|
"music_rhythm_enable": false,
|
||||||
"music_rhythm_mode": "single_lamp",
|
"music_rhythm_mode": "single_lamp",
|
||||||
@ -183,8 +183,8 @@
|
|||||||
"oem_id": "00000000000000000000000000000000",
|
"oem_id": "00000000000000000000000000000000",
|
||||||
"overheated": false,
|
"overheated": false,
|
||||||
"region": "Europe/Berlin",
|
"region": "Europe/Berlin",
|
||||||
"rssi": -50,
|
"rssi": -55,
|
||||||
"saturation": 100,
|
"saturation": 93,
|
||||||
"signal_level": 2,
|
"signal_level": 2,
|
||||||
"specs": "",
|
"specs": "",
|
||||||
"ssid": "I01BU0tFRF9TU0lEIw==",
|
"ssid": "I01BU0tFRF9TU0lEIw==",
|
||||||
@ -194,23 +194,23 @@
|
|||||||
"get_device_time": {
|
"get_device_time": {
|
||||||
"region": "Europe/Berlin",
|
"region": "Europe/Berlin",
|
||||||
"time_diff": 0,
|
"time_diff": 0,
|
||||||
"timestamp": 1704389578
|
"timestamp": 1705699997
|
||||||
},
|
},
|
||||||
"get_device_usage": {
|
"get_device_usage": {
|
||||||
"power_usage": {
|
"power_usage": {
|
||||||
"past30": 5,
|
"past30": 15,
|
||||||
"past7": 5,
|
"past7": 0,
|
||||||
"today": 5
|
"today": 0
|
||||||
},
|
},
|
||||||
"saved_power": {
|
"saved_power": {
|
||||||
"past30": 17,
|
"past30": 81,
|
||||||
"past7": 17,
|
"past7": 1,
|
||||||
"today": 17
|
"today": 0
|
||||||
},
|
},
|
||||||
"time_usage": {
|
"time_usage": {
|
||||||
"past30": 22,
|
"past30": 96,
|
||||||
"past7": 22,
|
"past7": 1,
|
||||||
"today": 22
|
"today": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"get_fw_download_state": {
|
"get_fw_download_state": {
|
||||||
@ -221,6 +221,84 @@
|
|||||||
"upgrade_time": 5
|
"upgrade_time": 5
|
||||||
},
|
},
|
||||||
"get_inherit_info": null,
|
"get_inherit_info": null,
|
||||||
|
"get_lighting_effect": {
|
||||||
|
"brightness": 50,
|
||||||
|
"custom": 0,
|
||||||
|
"direction": 1,
|
||||||
|
"display_colors": [],
|
||||||
|
"duration": 0,
|
||||||
|
"enable": 0,
|
||||||
|
"expansion_strategy": 2,
|
||||||
|
"id": "",
|
||||||
|
"name": "station",
|
||||||
|
"repeat_times": 1,
|
||||||
|
"segment_length": 1,
|
||||||
|
"sequence": [
|
||||||
|
[
|
||||||
|
300,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
240,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
180,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
120,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
60,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
100,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"spread": 16,
|
||||||
|
"transition": 400,
|
||||||
|
"type": "sequence"
|
||||||
|
},
|
||||||
"get_next_event": {},
|
"get_next_event": {},
|
||||||
"get_on_off_gradually_info": {
|
"get_on_off_gradually_info": {
|
||||||
"enable": false
|
"enable": false
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
"factory_default": false,
|
"factory_default": false,
|
||||||
"ip": "127.0.0.123",
|
"ip": "127.0.0.123",
|
||||||
"is_support_iot_cloud": true,
|
"is_support_iot_cloud": true,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "48-22-54-00-00-00",
|
||||||
"mgt_encrypt_schm": {
|
"mgt_encrypt_schm": {
|
||||||
"encrypt_type": "AES",
|
"encrypt_type": "AES",
|
||||||
"http_port": 80,
|
"http_port": 80,
|
||||||
@ -140,7 +140,7 @@
|
|||||||
"lang": "en_US",
|
"lang": "en_US",
|
||||||
"latitude": 0,
|
"latitude": 0,
|
||||||
"longitude": 0,
|
"longitude": 0,
|
||||||
"mac": "00-00-00-00-00-00",
|
"mac": "48-22-54-00-00-00",
|
||||||
"model": "P110",
|
"model": "P110",
|
||||||
"nickname": "I01BU0tFRF9OQU1FIw==",
|
"nickname": "I01BU0tFRF9OQU1FIw==",
|
||||||
"oem_id": "00000000000000000000000000000000",
|
"oem_id": "00000000000000000000000000000000",
|
||||||
@ -158,23 +158,23 @@
|
|||||||
"get_device_time": {
|
"get_device_time": {
|
||||||
"region": "Europe/Berlin",
|
"region": "Europe/Berlin",
|
||||||
"time_diff": 60,
|
"time_diff": 60,
|
||||||
"timestamp": 1704212614
|
"timestamp": 1705699998
|
||||||
},
|
},
|
||||||
"get_device_usage": {
|
"get_device_usage": {
|
||||||
"power_usage": {
|
"power_usage": {
|
||||||
"past30": 896,
|
"past30": 1010,
|
||||||
"past7": 259,
|
"past7": 368,
|
||||||
"today": 0
|
"today": 46
|
||||||
},
|
},
|
||||||
"saved_power": {
|
"saved_power": {
|
||||||
"past30": 23138,
|
"past30": 26144,
|
||||||
"past7": 6684,
|
"past7": 9536,
|
||||||
"today": 0
|
"today": 1218
|
||||||
},
|
},
|
||||||
"time_usage": {
|
"time_usage": {
|
||||||
"past30": 24034,
|
"past30": 27154,
|
||||||
"past7": 6943,
|
"past7": 9904,
|
||||||
"today": 0
|
"today": 1264
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"get_electricity_price_config": {
|
"get_electricity_price_config": {
|
||||||
@ -316,11 +316,11 @@
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"local_time": "2024-01-02 17:23:34",
|
"local_time": "2024-01-19 22:33:18",
|
||||||
"month_energy": 0,
|
"month_energy": 430,
|
||||||
"month_runtime": 0,
|
"month_runtime": 11571,
|
||||||
"today_energy": 0,
|
"today_energy": 46,
|
||||||
"today_runtime": 0
|
"today_runtime": 1264
|
||||||
},
|
},
|
||||||
"get_fw_download_state": {
|
"get_fw_download_state": {
|
||||||
"auto_upgrade": false,
|
"auto_upgrade": false,
|
||||||
@ -341,7 +341,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"get_max_power": {
|
"get_max_power": {
|
||||||
"max_power": 3847
|
"max_power": 3904
|
||||||
},
|
},
|
||||||
"get_next_event": {},
|
"get_next_event": {},
|
||||||
"get_protection_power": {
|
"get_protection_power": {
|
||||||
@ -356,7 +356,16 @@
|
|||||||
"sum": 0
|
"sum": 0
|
||||||
},
|
},
|
||||||
"get_wireless_scan_info": {
|
"get_wireless_scan_info": {
|
||||||
"ap_list": [],
|
"ap_list": [
|
||||||
|
{
|
||||||
|
"bssid": "000000000000",
|
||||||
|
"channel": 0,
|
||||||
|
"cipher_type": 2,
|
||||||
|
"key_type": "wpa_psk",
|
||||||
|
"signal_level": 3,
|
||||||
|
"ssid": "I01BU0tFRF9TU0lEIw=="
|
||||||
|
}
|
||||||
|
],
|
||||||
"wep_supported": false
|
"wep_supported": false
|
||||||
},
|
},
|
||||||
"qs_component_nego": {
|
"qs_component_nego": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user