TinyTuya is a minimal application dedicated to the control of Tuya switches.
Tuya is a Chinese Tuya company that claims to be a leader in IoT (Internet of Things). Actually many Wifi home devices use Tuya protocols. They are sold with different brand names.
Android applications like Smart Life control devices using protocol devised by Tuya.
I have developed this small application because I wanted to be able to control my devices without relying solely on my smartphone (i.e. use my notebook).
TinyTuya achieve this goal in a very simple manner : the application can be installed on a Raspberry PI (any Linux or Windows box will do the job provided it can be kept running).
It is dedicated to home use when security is not a concern (anyone who has access to your network will be able to control the devices).
The control of Tuya devices requires to get the encryption keys that allow communication with the devices. @Codetheweb has developed tools to get these keys. Check @Codetheweb page
Actually, any proxy that has the ability to decipher HTTPS can do the job… (not that simple)
TinyTuya is written in GO, so you need to install GO tools to build the application.
- get communication library:
go get github.com/py60800/tuya
- get TinyTuya
go get github.com/py60800/tinytuya
- Build the application
depending on where the source code is:
go build tinytuya.go
The configuration file is JSON formatted. Use the example configuration and set the parameters according to you environment :
- ids of the tuya devices (collected at the same time as the keys)
- key
- friendly name
Change to the directory that contains additional resources (static, tmpl)
./tinytuya -c config.json
Default port is 8080, another port can be set with ‘-p’ option
From any PC, smartphone or tablet, connect to your device http://:8080
Adapt to your needs : appearance can be changed by adapting the templates files.
Out of the scope of this memo : run it as a service
As of now :
-
It has been tested with switches branded by Neo
-
only version 3.1 of the protocol is supported
@Codetheweb for this tremendous reverse engineering job