
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
aiotuya ia a Python library for LAN control of Tuya devices. It can detect, provision and control devices that connect to the Tuya Cloud.
To make things easy to the user, aiotuya comes with an application key and secret that were provided by Tuya Cloud. We request that you do not use these key and secret for any other purpose.
All credits for figuring out how those device communicate goes to codetheweb and all the participants to this conversation. All I did is port their work to Python with asyncio and added bugs.
Coming soon... we will upload to Pypi
In the meantime....
python3 setup.py install
The easiest way to start is running the module
python3 -m aiotuya
Which, the first time around, will give you absolutely nothing. You want to start with
python3 -m aiotuya -e me@myself.com -p mypass -s WIFISSID -P WIFISECRET
After you hit the "Enter" you should get
Hit "Enter" to start
Use Ctrl-C to quit
Select Device:
[0] Provision new devices
Ready you devices for configuration and hit 0 followed by enter.
Then wait, hiting the "Enter" key from time to time.
You can also use the '-d' option to get debug messages. These are not suitable for human consumption and are known to cause cancer in rats.
For provisioning to work, you must be able to send broadcast packets over WiFi. In my case, I was only able to use provisioning on a laptop connected to my house WiFi. Trying from a wired computer did not work. Apparently my router (Asus RT-AC5300) did not relay the packets. Your milage may vary.
Provisioning is also working on a RPi3 connected through WiFi (Note that I use a USB WiFi dongle to connect, not the RPi3 WiFi module)
Provisioning is NOT YET working from a RPi2 (wire connected) with a WiFi dongle.
During the provisioning process, the device will register with the Tuya Cloud. Once the registration has succeeded, the provisioning system will receive a key to be used when communicating with the device. By default, aiotuya will save the pairs (device id, key) in a CSV file in your home directory. The default file name is .aiotuya
At this time (Feb '19) aiotuya will handle 3 types of devices
A simple On/Off switch is provided by TuyaSwitch
. It has 2 methods:
And the status will be reported as
{'state': 'on'}
{'state': 'off'}
This is the kind of switch that can be used for curtains, garage doors and so on. It is
provided with TuyaOCSwitch
. It has 3 methods:
And the state value can be one of:
This is a colour LED light. It is provided by TuyaLight
and offers the following methods:
Other devices can be added, but I do not have the information needed to add them.
aiotuya keeps a connection to the device, and send a heartbeat status request every timout secs (10 secs by default). This allows it to receive real time status messages upon changes in the device status (e.g. button pressed on a switch). The downside is that Tuya devices seem to only accept one such a connection, so aiotuya has exclusive control of the device via LAN. Fortunately, the devices stop broacasting their presence when they have a network connection, so other application should not be able to find them. I have not tried to see if the cloud API was still working in that case.
Create a class to manage your devices. The class should have at least 4 methods:
Subclass TuyaManager, if you want to persists the device keys, by overloading 2 methods:
After that
MyDevs= Devices()
loop = aio.get_event_loop()
manager = DevManager(dev_parent=MyDevs)
scanner = tuya.TuyaScanner(parent=manager)
scanner.start(loop)
Tuya devices, when they are not connected, broadcast their presence on the network, TuyaScanner listen for those broadcasts and pass them on to TuyaManager.
If the key is known, TuyaManager will create a TuyaDevice generic instance with raw_dps set, using itself as device manager. Upon receiving the device status data, Tuyamanager will try to figure out the type of device and create the proper instance using the application device manager to control the device.
TuyaManager figures out the type of device it is dealing with by issuing a status request and inspecting the returned value. If an error is returned, ot will try sending a command. The reason for this is that my OC Switch, after powering up, will return a "json struct data unvalid" error to any status request until either, a button is pressed or a valid command is issued. The behaviour of Tuyamanager is meant to circumvent this problem.
0.1.0b1: Initial version. Works for me with a LED lightbulb and a Open/Close switch
FAQs
Pure Python library to control/provision Tuya devices
We found that aiotuya demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.