Skip to main content

PyRecSwitch

A pure-python interface for controlling Ankuoo RecSwitch MS6126 without the use of mobile app or the cloud platform.

List of similar devices that should work:

  • Ankuoo MS6126
  • Ankuoo REC 4800009
  • Lumitek CSW201 NEO WiFi

Overview

This package provides a high-level interface for controlling the device. This interface has been developed using asyncio, however, if you prefer to use a different stack you can directly invoke the low-level methods to parse and compose the messages needed to communicate with the device.

How it works

RecSwitch use two different protocols to communicate with the world. The first one is used to talk directly with the app mobile when it is in the same network of the device. Instead, the second one is used to talk with its own cloud platform to allow the app to control the device when it is in a foreign network. PyRecSwitch implements the first communication protocol.

Some note about the protocol:

  • The communication transport is UDP and the port is 18530.
  • The device and the host listen and send message each other to that port.
  • The host send a request message to the device, the device receive the request and send back the response to the host.
  • The request and the response could be associated through an index reported in both messages.
  • Some messages are sent from the device to the broadcast address of its subnet always on the same port. For example, the relay status change is notified with a broadcast message.
  • Part of the messages are AES encrypted with a fixed key.

Installation

pip install pyrecswitch

Usage

First, instantiate the RSNetwork.

from pyrecswitch import RSNetwork

net = RSNetwork()

Generate the datagram endpoint and ensure it a future with asyncio.

listener = net.create_datagram_endpoint()

transport, protocol = loop.run_until_complete(listener)

Register any devices in your network using their own mac-address and ip-address.

device = net.register_device('F0:FE:6B:XX:XX:XX', '192.168.X.X')

Now, you can access to the device and communicate with it.

device = net.get_device('F0:FE:6B:XX:XX:XX')

# get device info
ret = await device.query_module_info()

# get relay status
ret = await device.get_gpio_status()

# set relay on
ret = await device.set_gpio_status(True)

That's it!

Examples

I wrote two simple client examples to explain how the library can be used. Both the examples query the module information and toggle the relay status.

  • doc/examples/client.py high-level client interface
  • doc/examples/udp_socket_client.py low-level methods for generating and parsing messages

Contributing

Contributions are welcome. Here some useful features that could be developed:

  • Device discover
  • Device WIFI setup
  • Other device commands

Authors

Contributors

Disclaimer

This project is the result of reverse engineering work, it has been developed without any relation with the device manufacturer. No warranty is provided either by the author or by the manufacturer.

License

This project is licensed under the GNU Affero General Public License v3.0 License - see the LICENSE file for details

Links

Metadata

Release files for pyrecswitch 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyrecswitch 1.0.2
File Size Uploaded Provenance Actions
pyrecswitch-1.0.2.tar.gz 7.2 kB Without provenance Details for pyrecswitch-1.0.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pyrecswitch 1.0.2
File Interpreter ABI Platform Actions
pyrecswitch-1.0.2-py3-none-any.whl Python 3 none any Details for pyrecswitch-1.0.2-py3-none-any.whl

Total release size: 18.4 kB

Release files / pyrecswitch-1.0.2.tar.gz

Download URL pyrecswitch-1.0.2.tar.gz
Size 7.2 kB
Tags Source
SHA-256 checksum
How to use checksums
fb006d98b335ca01b4c91766659f66ff8a2f85a6b885404b6c52e85a61451ea7
BLAKE2b-256 checksum
How to use checksums
3886951d3733cbab92f6a887c662a36e548a2764b0d62136dc839594bd381941
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.1.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

Release files / pyrecswitch-1.0.2-py3-none-any.whl

Download URL pyrecswitch-1.0.2-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ff1e28b20b92e3d7bc0be027740a4fc274899154c22e0606187cb773d57da7e3
BLAKE2b-256 checksum
How to use checksums
2cb5c2c408d5d9aae55cb528d6dfc8f9814050412763b6cb958c3204591daedf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.1.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5

Security for pyrecswitch 1.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page