python-kasa/devtools
Steven B be5202ccb7
Make device initialisation easier by reducing required imports (#936)
Adds username and password arguments to discovery to remove the need to import Credentials.
Creates TypeAliases in Device for connection configuration classes and DeviceType.
Using the API with these changes will only require importing either Discover or Device
depending on whether using Discover.discover() or Device.connect() to 
initialize and interact with the API.
2024-06-03 19:06:54 +01:00
..
bench Update poetry locks and pre-commit hooks (#837) 2024-04-16 20:21:20 +02:00
helpers Enable and convert to future annotations (#838) 2024-04-17 15:39:24 +02:00
__init__.py Add known smart requests to dump_devinfo (#597) 2024-01-02 18:20:53 +01:00
create_module_fixtures.py Create common interfaces for remaining device types (#895) 2024-05-10 19:29:28 +01:00
dump_devinfo.py Make device initialisation easier by reducing required imports (#936) 2024-06-03 19:06:54 +01:00
generate_supported.py Add child devices from hubs to generated list of supported devices (#898) 2024-05-07 07:48:47 +01:00
parse_pcap.py Switch from TPLinkSmartHomeProtocol to IotProtocol/XorTransport (#710) 2024-01-26 09:11:31 +00:00
perftest.py Update poetry locks and pre-commit hooks (#837) 2024-04-16 20:21:20 +02:00
README.md dump_devinfo improvements (#657) 2024-01-20 14:20:08 +01:00

Tools for developers

This directory contains some simple scripts that can be useful for developers.

dump_devinfo

  • Queries the device (if --host is given) or discover devices and creates fixture files that can be added to the test suite.
Usage: python -m devtools.dump_devinfo [OPTIONS]

  Generate devinfo files for devices.

  Use --host (for a single device) or --target (for a complete network).

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
  --help           Show this message and exit.

create_module_fixtures

  • Queries the device for all supported modules and outputs module-based fixture files for each device.
  • This could be used to create fixture files for module-specific tests, but it might also be useful for other use-cases.
Usage: create_module_fixtures.py [OPTIONS] OUTPUTDIR

  Create module fixtures for given host/network.

Arguments:
  OUTPUTDIR  [required]

Options:
  --host TEXT
  --network TEXT
  --install-completion  Install completion for the current shell.
  --show-completion     Show completion for the current shell, to copy it or
                        customize the installation.
  --help                Show this message and exit.

parse_pcap

  • Requires dpkt (pip install dpkt)
  • Reads a pcap file and prints out the device communications
Usage: parse_pcap.py [OPTIONS] FILE

  Parse pcap file and pretty print the communications and some statistics.

Options:
  --help  Show this message and exit.

perftest

  • Runs several rounds of update cycles for the given list of addresses, and prints out statistics about the performance
Usage: perf_test.py [OPTIONS] [ADDRS]...

Options:
  --rounds INTEGER
  --help            Show this message and exit.
$ python perf_test.py 192.168.xx.x 192.168.xx.y 192.168.xx.z 192.168.xx.f
Running 5 rounds on ('192.168.xx.x', '192.168.xx.y', '192.168.xx.z', '192.168.xx.f')
=== Testing using gather on all devices ===
              took
             count      mean       std      min       25%       50%       75%       max
type
concurrently   5.0  0.097161  0.045544  0.05260  0.055332  0.088811  0.143082  0.145981
sequential     5.0  0.150506  0.005798  0.14162  0.149065  0.150499  0.155579  0.155768
=== Testing per-device performance ===
                           took
                          count      mean       std       min       25%       50%       75%       max
id
<id>-HS110(EU)   5.0  0.044917  0.014984  0.035836  0.037728  0.037950  0.041610  0.071458
<id>-KL130(EU)   5.0  0.067626  0.032027  0.046451  0.046797  0.048406  0.076136  0.120342
<id>-HS110(EU)   5.0  0.055700  0.016174  0.042086  0.045578  0.048905  0.059869  0.082064
<id>-KP303(UK)   5.0  0.010298  0.003765  0.007773  0.007968  0.008546  0.010439  0.016763

benchmark

  • Benchmark the protocol
% python3 devtools/bench/benchmark.py
New parser, parsing 100000 messages took 0.6339647499989951 seconds
Old parser, parsing 100000 messages took 9.473990250000497 seconds