当前位置:   article > 正文

人工智能应用实操:手把手教你使用Python控制IoT智能硬件_iotcs python

iotcs python

人工智能和机器学习的火热,将Python语言的热度带到了一个新高度,朋友圈经常刷到的Python小课,甚至让很多非技术的同学一度怀疑,不会点Python都不好意思说自己是现代人。关于Python的基础知识,网上内容很多,感兴趣的都可以找到大量资料学习。本篇文章,我主要从一些读者关注的问题出发,比如在各种IoT智能设备普及的今天,如何利用Python去控制智能硬件,实现一些功能演示呢?比如我们可以利用Python控制灯泡的开关、亮度调节、颜色变化等等。

实际上,这些控制硬件设备的能力,并不需要你完全自己去开发程序实现,通过现成的平台,通过简单的Python代码编程,就可以实现智能设备的控制和交互,真正让你掌握软件和硬件能力的打通。

下面,我会利用涂鸦云开发平台手把手教你如何使用该平台并通过 Python 调用相关 API 控制一款智能设备。利用涂鸦云开发平台,您可以获取涂鸦 IoT 平台 OpenAPI 的调用权限。通过简单的代码编程就可以轻易控制 Powered By Tuya 智能设备。
 

物料清单

硬件:一款智能硬件设备,任何 Powered By Tuya 设备皆可,您也可以前往涂鸦智选平台采购样品。

软件:一款 Python IDE,例如 PyCharm、VS Code、IDLE 等

步骤

第 1 步:创建云开发项目

想要使用涂鸦API,您需要先在 涂鸦云开发平台 创建一个项目。

image.png

创建成功后,在项目详情页面,您可以获得授权密钥(Access ID 和 Access Secret 的组合)。请复制出来妥善保管,调用 API 时您需要用到授权密钥。

image.png

第 2 步:关联设备到项目

使用涂鸦 OpenAPI 主要是为了控制智能设备,所以我们需要先将设备关联到云开发项目中。

设备关联方式

涂鸦提供了4种关联设备的维度:

由于前 3 种需要您开发智能硬件产品或移动应用,为了快速体验 IoT 应用构建流程,本文使用第 4 种方式关联设备关联。

  • 推荐方式一:使用涂鸦智能 App 添加智能设备
  • 推荐方式二:添加虚拟设备

如果您没有可用的 Powered By Tuya 设备,您还可以通过添加虚拟设备来完成调试。

  • 关联产品下的设备:通过产品 PID 关联您开发的智能设备。
  • 关联微信小程序配网添加的设备:通过 App schema 关联您开发的小程序下的设备。
  • 关联 App 配网添加的设备:通过 App schema 关联您开发的 App 下的设备。
  • 关联 App 账号下的设备:通过使用涂鸦智能 App 关联您的 IoT 账号里配网的设备。
  1. 在手机里安装涂鸦智能 App 或智能生活 App。

  2. 将智能设备配网到 App。

  3. 打开云开发 关联设备 页面。

  4. 选择 关联 App 账号下的设备 页签。
    image.png

  5. 使用涂鸦智能 App 进行扫码即可将账号下的所有设备授权给云开发项目使用。
    image.png

  6. 智能设备关联到云开发项目后,您可以在 设备管理 > 设备列表 查看到通过各种方式关联的设备。

    image.png

  7. 添加完成后,可以先将设备 ID 复制出来备用,假设您获取的设备 ID 为6c7asa9b55fs632c12zcwy。

  8. 打开云开发 虚拟设备 页面。

  9. 选择 添加虚拟设备

  10. 选择一款产品,然后选择 添加虚拟设备 > 关联到涂鸦 App 账号

  11. 使用涂鸦智能 App 进行扫码即可将账号下的虚拟设备授权给云开发项目使用。

    虚拟设备都被独立放置在 设备管理 > 虚拟设备 页面。

  12. 添加完成后,可以先将设备 ID 复制出来备用,假设您获取的虚拟设备 ID 为 vdevo160544422718591。

第 3 步:申请 API 调用权限

涂鸦 IoT 平台 OpenAPI 默认是非开通状态,您需要以分组为单位发起 API 开通申请方可使用。如果您调用未开通的 API,将产生权限不足的调用错误。

本文操作中,您需要在 云开发 API 分组页面 申请的 API 分别为 授权管理设备管理设备控制

申请API权限.png

至此,在涂鸦云开发平台上的准备工作已经完成,接下来请选择任意一个Python IDE 进行接下来的编程实践。

 

第 4 步:调用 API 控制设备

本步骤中所有涉及的 Python 代码已经打包生成为 python_iot_code_sample.py,您可以提前下载使用。

4.1 获取 access_token

涂鸦 IoT 采用 HMAC-SHA256 创建摘要,根据不同应用场景,云开发平台提供两套签名算法。其中,令牌管理接口(获取令牌、刷新令牌)算法如下:

sign = HMAC-SHA256(client_id + t, secret).toUpperCase()

以下为对应的 Python 应用代码逻辑:

  1. # 从云开发项目获得的授权密钥
  2. client_id = '3meqtq4x9wr22a90lee4'
  3. secret = '7b121dd8196043f3b6944250fa3ad4ab'
  4. # 各接口使用方请根据自身所在区域调用相应接口。
  5. # 中国区 https://openapi.tuyacn.com
  6. # 美洲区 https://openapi.tuyaus.com
  7. # 欧洲区 https://openapi.tuyaeu.com
  8. # 印度区 https://openapi.tuyain.com
  9. base = 'https://openapi.tuyacn.com'
  10. # 签名算法函数
  11. def calc_sign(msg,key):
  12. import hmac
  13. import hashlib
  14. sign = hmac.new(msg=bytes(msg, 'latin-1'),key = bytes(key, 'latin-1'), digestmod = hashlib.sha256).hexdigest().upper()
  15. return sign
  16. import time
  17. import requests
  18. t = str(int(time.time()*1000))
  19. r = requests.get(base+'/v1.0/token?grant_type=1',
  20. headers={
  21. 'client_id':client_id,
  22. 'sign':calc_sign(client_id+t, secret),
  23. 'secret':secret,
  24. 't':t,
  25. 'sign_method':'HMAC-SHA256',
  26. })
  27. res = r.json()['result']
  28. print(res)

4.2 编写通用请求函数

所有业务 API 都需要带公共参数,为了避免重复繁琐的操作,建议您编写 GET 和 POST 请求,方便后续使用。同时,业务接口的签名算法与之前步骤中获取 Token 时使用的不同,算法如下:

sign = HMAC-SHA256(client_id + access_token + t, secret).toUpperCase()

以下为对应的 Python 应用代码逻辑:

  1. import json
  2. # get 请求函数
  3. def GET(url, headers={}):
  4. t = str(int(time.time()*1000))
  5. default_par={
  6. 'client_id':client_id,
  7. 'access_token':res['access_token'],
  8. 'sign':calc_sign(client_id+res['access_token']+t, secret),
  9. 't':t,
  10. 'sign_method':'HMAC-SHA256',
  11. }
  12. r = requests.get(base + url, headers=dict(default_par,**headers))
  13. r = json.dumps(r.json(), indent=2, ensure_ascii=False) # 美化request结果格式,方便打印查看
  14. return r
  15. # post 请求函数
  16. def POST(url, headers={}, body={}):
  17. import json
  18. t = str(int(time.time()*1000))
  19. default_par={
  20. 'client_id':client_id,
  21. 'access_token':res['access_token'],
  22. 'sign':calc_sign(client_id+res['access_token']+t, secret),
  23. 't':t,
  24. 'sign_method':'HMAC-SHA256',
  25. }
  26. r = requests.post(base + url, headers=dict(default_par,**headers), data=json.dumps(body))
  27. r = json.dumps(r.json(), indent=2, ensure_ascii=False) # 美化request结果格式,方便打印查看
  28. return r

4.3 双向控制设备

通过 获取设备最新状态 的 API,您可以获得设备的最新状态,需要使用设备 ID 作为参数调用 API。

以下为对应的 Python 应用代码逻辑:

  1. # 云开发项目里关联设备的ID
  2. device_id = '65057368c44f3380cc4b'
  3. r = GET(url=f'/v1.0/devices/{device_id}/status')
  4. print(r)

返回结果示例如下所示,更多详情,请参考智能设备的 指令集

  1. {
  2. "result": [
  3. {
  4. "code": "switch",
  5. "value": true
  6. },
  7. {
  8. "code": "countdown_1",
  9. "value": 0
  10. },
  11. {
  12. "code": "cur_current",
  13. "value": 68
  14. },
  15. {
  16. "code": "cur_power",
  17. "value": 3
  18. },
  19. {
  20. "code": "cur_voltage",
  21. "value": 2125
  22. }
  23. ],
  24. "success": true,
  25. "t": 1606880360840
  26. }

在控制一个未知的设备之前,有时您并不知道可以下发哪些指令来控制设备。这时就可以先用这个 API 获得这个设备所有可用的控制指令,然后再下发具体指令来控制设备。

  1. r = GET(url=f'/v1.0/devices/{device_id}/functions')
  2. print(r)

以智能插座为例,返回结果示例如下:

  1. {
  2. "result": {
  3. "category": "cz",
  4. "functions": [
  5. {
  6. "code": "switch",
  7. "desc": "[插座]开关",
  8. "name": "开关",
  9. "type": "Boolean",
  10. "values": "{}"
  11. },
  12. {
  13. "code": "countdown_1",
  14. "desc": "开关1倒计时",
  15. "name": "开关1倒计时",
  16. "type": "Integer",
  17. "values": "{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1}"
  18. }
  19. ]
  20. },
  21. "success": true,
  22. "t": 1606880309547
  23. }

获取到设备指令集后,您可以调用 下发设备指令 API 来控制智能设备。

  1. # 根据该设备的控制指令集组装参数
  2. d = {"commands":[{"code":"switch","value":True},]}
  3. r = POST(url=f'/v1.0/devices/{device_id}/commands', body=d)
  4. print(r)

返回结果示例:

  1. {
  2. "result": true,
  3. "success": true,
  4. "t": 1606880463013
  5. }

 

小结

本文介绍了如何使用 Python 基于涂鸦云开发平台,调用基础 API 控制一个智能设备。由于 Powered By Tuya 设备体系严格的统一性,您可以将这个控制方式拓展到所有 Powered By Tuya 设备中。让您无需考虑设备异构性,能够快速构建 IoT 应用和服务。

点击阅读原文,获取更多开发资料。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号