%global _empty_manifest_terminate_build 0 Name: python-pyrecswitch Version: 1.0.2 Release: 1 Summary: A pure-python interface for controlling Ankuoo RecSwitch MS6126 License: AGPLv3+ URL: https://github.com/marcolertora/pyrecswitch Source0: https://mirrors.nju.edu.cn/pypi/web/packages/38/86/951d3733cbab92f6a887c662a36e548a2764b0d62136dc839594bd381941/pyrecswitch-1.0.2.tar.gz BuildArch: noarch Requires: python3-pycryptodome %description # 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 ```bash 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 * [**Marco Lertora**](https://github.com/marcolertora/) - ## Contributors * [**Gianluigi Tiesi**](https://github.com/sherpya) - The one who can find the needle in the haystack, when the needle is an aes key and the haystack is an apk. ## 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](LICENSE.md) file for details ## Links * Hi Flying Chipset HF-LPB100: http://www.hi-flying.com/index.php?route=product/product/show&product_id=113 * Lumitek CSW201 Ankuoo RecSwitch: http://www.lumitek.cn/en/productsd.php?gid=0&pid=1093 * Lumitek Firmware: https://github.com/mys812/hf * https://github.com/home-assistant/home-assistant/issues/831 * https://github.com/Diagonactic/Ankuoo %package -n python3-pyrecswitch Summary: A pure-python interface for controlling Ankuoo RecSwitch MS6126 Provides: python-pyrecswitch BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-pyrecswitch # 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 ```bash 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 * [**Marco Lertora**](https://github.com/marcolertora/) - ## Contributors * [**Gianluigi Tiesi**](https://github.com/sherpya) - The one who can find the needle in the haystack, when the needle is an aes key and the haystack is an apk. ## 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](LICENSE.md) file for details ## Links * Hi Flying Chipset HF-LPB100: http://www.hi-flying.com/index.php?route=product/product/show&product_id=113 * Lumitek CSW201 Ankuoo RecSwitch: http://www.lumitek.cn/en/productsd.php?gid=0&pid=1093 * Lumitek Firmware: https://github.com/mys812/hf * https://github.com/home-assistant/home-assistant/issues/831 * https://github.com/Diagonactic/Ankuoo %package help Summary: Development documents and examples for pyrecswitch Provides: python3-pyrecswitch-doc %description help # 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 ```bash 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 * [**Marco Lertora**](https://github.com/marcolertora/) - ## Contributors * [**Gianluigi Tiesi**](https://github.com/sherpya) - The one who can find the needle in the haystack, when the needle is an aes key and the haystack is an apk. ## 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](LICENSE.md) file for details ## Links * Hi Flying Chipset HF-LPB100: http://www.hi-flying.com/index.php?route=product/product/show&product_id=113 * Lumitek CSW201 Ankuoo RecSwitch: http://www.lumitek.cn/en/productsd.php?gid=0&pid=1093 * Lumitek Firmware: https://github.com/mys812/hf * https://github.com/home-assistant/home-assistant/issues/831 * https://github.com/Diagonactic/Ankuoo %prep %autosetup -n pyrecswitch-1.0.2 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-pyrecswitch -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue May 30 2023 Python_Bot - 1.0.2-1 - Package Spec generated