tradetuya

Python interface to Tuya WiFi smart devices.


Keywords
home automation, tuya, client, python, tuyamqtt
License
MIT
Install
pip install tradetuya==1.0.2

Documentation

TuyaFace

Tuya client that allows you to locally communicate with tuya devices without the tuya-cloud.

Installation

pip install tuyaface

Public Interface

Request current device status

status(device: dict)
Returns dict

Update device dps state

set_state(device: dict, value: bool, idx: int = 1)
Returns dict

Update device status

set_status(device: dict, dps: dict)
Returns dict

TuyaClient

Initialize client

TuyaClient(device: dict, on_status: callable=None, on_connection: callable=None)

Request current device status

status()
Returns dict

Update device dps state

set_state(value: bool, idx: int = 1)
Returns dict

Close the connection and stop the worker thread

stop_client()

example

from tuyaface.tuyaclient import TuyaClient

def on_status(data:dict):
    print(data)

def on_connection(value: bool):
    print(value)

device = {
    'protocol': '3.3', # 3.1 | 3.3
    'deviceid': '34280100600194d17c96',
    'localkey': 'e7e9339aa82abe61',
    'ip': '192.168.1.101',            
}

client = TuyaClient(device, on_status, on_connection)
client.start()

data = client.status()
client.set_state(!data['dps']['1'], 1) #toggle
client.stop_client()

Data structure

Device dict

device = {
    'protocol': '3.3', # 3.1 | 3.3
    'deviceid': '34280100600194d17c96',
    'localkey': 'e7e9339aa82abe61',
    'ip': '192.168.1.101',            
}

DPS dict

dps = {
    '1': True,
    '2': False,
    '101': 255,
    '102': 128,
    ...etc...
}

Todo v1.3.0

  • validate/sanitize request
  • throttle reconnect requests #48
  • Pre-commit triggers (black, mypy, flake, etc) #54

Changelog

v1.2.0

  • WIP #44 sequence_nr
  • WIP #44 connection
  • Store preferred status command in device dict #43
  • Nest tuyaface values in device: dict #44
  • Improve message parsing #47

Earlier changes https://github.com/TradeFace/tuya/wiki

Implementations

Acknowledgements