开发设备控制和消息订阅服务(Python SDK - To C)

更新时间:2023-04-06 07:27:51下载pdf

本文介绍如何基于涂鸦云开发开放的能力和 SDK,开发一个控制 Powered By Tuya 的智能设备的程序。

本文档已停止更新,文中内容仅供您参考。如需查看相关内容,请访问 最佳实践

前提条件

操作步骤

第一步:克隆 Tuya-iot-python-sdk

本步骤基于 Tuya-iot-python-sdkTuya-iot-python-sdk 集成了开发者在涂鸦云云对接(OpenAPI 或者消息订阅)项目过程中的云端连接和处理过程,可以让开发者如同本地开发一样,聚焦于自身的业务逻辑。克隆步骤如下:

  1. Tuya-iot-python-sdk 获取 SDK 地址。

    开发设备控制和消息订阅服务(Python SDK - To C)

  2. Projects > Get from VCS > URL,输入 SDK 地址,单击 Clone
    开发设备控制和消息订阅服务(Python SDK - To C)

第二步:编辑配置文件

开发前您需要在 env.py 文件配置环境变量,各参数说明如下:

开发设备控制和消息订阅服务(Python SDK - To C)

  • ACCESS_IDACCESS_KEY:云应用密钥 Access ID 和 Access Key。获取方法参见 查询项目信息
  • USERNAMEPASSWORD:App 账号和密码。
  • ENDPOINT:云开发项目的接入地址。填写方法参见 接入地址
  • DEVICE_ID:关联设备的 ID。查看方法参见 查看设备
ACCESS_ID = "fsxg5c9jasdrolc****"
ACCESS_KEY = "d064654cd2714286a3823f16a223****"
USERNAME = "*********"
PASSWORD = "*********"
DEVICE_ID = "vdevo16274430851****"
ENDPOINT = "https://openapi.tuyacn.com"

第三步:控制设备

完成环境编辑配置后,您可以开始代码开发。最常见的功能类型为设备控制。以下为在键盘上输入任意 Enter 后切换灯带开关功能的代码示例,供您参考。新建一个 switch.py 代码内容如下。

本程序控制的设备为一个灯带,控制其开关的标准指令集为 switch_led。如果您使用的是其它设备,需要查询标准指令集后修改代码。

开发设备控制和消息订阅服务(Python SDK - To C)

from env import ENDPOINT, ACCESS_ID, ACCESS_KEY, USERNAME, PASSWORD, DEVICE_ID

from tuya_iot import TuyaOpenAPI, TUYA_LOGGER

# Initialization of tuya openapi
openapi = TuyaOpenAPI(ENDPOINT, ACCESS_ID, ACCESS_KEY)
openapi.connect(USERNAME, PASSWORD, "86", 'smartlife')

# # Uncomment the following lines to see logs.
import logging

TUYA_LOGGER.setLevel(logging.DEBUG)

flag = True
while True:
    input('Hit Enter to toggle light switch.')
    flag = not flag
    commands = {'commands': [{'code': 'switch_led', 'value': flag}]}
    openapi.post('/v1.0/devices/{}/commands'.format(DEVICE_ID), commands)
	

返回结果示例:

Hit Enter to toggle light switch.
[2022-10-14 14:30:42,047] [tuya-openapi] Request: method = POST,                 url = https://openapi.tuyacn.com/v1.0/devices/vdevo16657167*********/commands,                params = None,                body = {'commands': [{'code': 'switch_led', 'value': False}]},                t = 1665729042047
[2022-10-14 14:30:42,203] [tuya-openapi] Response: {
  "result": true,
  "success": true,
  "t": 1665729042258,
  "tid": "b9feb6ce4b8911ed97368aeef190c9e7"
}
Hit Enter to toggle light switch.

第四步:监听设备状态

本代码实现了监听一个用户下设备事件的信息,包含了设备在线、离线、状态上报等。设备状态通知服务以 MQTT 消息形式,将设备状态的变更、设备告警消息等内容实时主动通知到终端应用程序,无需终端应用频繁查询设备状态,新建一个 monitor.py 代码内容如下。

该功能需要开通 设备状态通知 云服务。开通方式参见 开通云服务

开发设备控制和消息订阅服务(Python SDK - To C)

import logging
from tuya_iot import TuyaOpenAPI, TuyaOpenMQ, TUYA_LOGGER

from env import ENDPOINT, ACCESS_ID, ACCESS_KEY, USERNAME, PASSWORD

TUYA_LOGGER.setLevel(logging.DEBUG)

# Init
openapi = TuyaOpenAPI(ENDPOINT, ACCESS_ID, ACCESS_KEY)
openapi.connect(USERNAME, PASSWORD, "86", 'tuyaSmart')

# Receive device message
def on_message(msg):
    print("on_message: %s" % msg)

openapi.token_info.expire_time = 0

openmq = TuyaOpenMQ(openapi)
openmq.start()
openmq.add_message_listener(on_message)

返回结果示例:

[2022-10-14 11:38:41,704] [tuya-openmq] payload-> b'{"data":"gIaHR01z+26gUD10tL33xxRJ/ii/cc3Egz/NXII8riWBKrFfzmMtzqX/1kSamNFkt1DwKiY6a91Ru/ChWEjhOadlz0n7A+5oFZlvV9zcWCayf5WaPGMcwpjiifAM+qDowHyHEwFmXBMFPb5449xCNKDmAraFkhaUMEOGKdAgwaCabpBzu6E/aMNc+hOSnyBrIdzAuS6ZiUEjbtVQgBDDzLcCg4+dCZHznETdWJDA3Gu0VjQhObTu4ZLd80M5x3qE","protocol":4,"pv":"2.0","sign":"fc234c7bbd6e6f11ce433676de6335f1","t":1665718721658}'
[2022-10-14 11:38:41,705] [tuya-openmq] on_message: {'data': {'dataId': 'e0d1ca4f-7fd0-4c83-a64a-c8c7113a7153', 'devId': 'vdevo166571674150717', 'productKey': '0v90y5gxz1ae8pcl', 'status': [{'code': 'switch_led', 't': '1665718721658', 'value': True, '20': True}]}, 'protocol': 4, 'pv': '2.0', 'sign': 'fc234c7bbd6e6f11ce433676de6335f1', 't': 1665718721658}

小结

本文介绍了如何使用 Python SDK 基于涂鸦云开发,调用设备相关 API 控制一个智能设备和监听设备信息。基于 Powered by Tuya 设备体系严格的统一性,您可以将这个控制方式拓展到所有 Powered by Tuya 设备中。让您无需担心设备差异性,快速基于智能设备开发 SaaS 应用。