Tuya MQTT 标准协议是什么?

news2024/11/19 5:40:09

TuyaLink 协议是涂鸦 IoT 开发平台面向物联网开发领域设计的一种数据交换规范,数据格式为 JSON,主要用于设备端和涂鸦 IoT 开发平台的双向通信,更便捷地实现了设备端和平台之间的业务数据交互。

设备的通信方式也是多种多样的。无线通信方式有蓝牙 LE、Zigbee、蓝牙 Mesh、433 协议,有线通信方式有 RS-485、RS-232、以太网以及各种工业协议等。但通信只是建立一个数据通道,要想真正运作起来,还需要了解数据包格式协议。数据协议包括 OCPP、Modbus、工业标准协议和其他自定义协议等。

本文介绍的 Tuya MQTT 标准协议是其中一种协议,也是涂鸦物联网平台最底层的基础通讯协议。开发者可根据协议完全自主地进行嵌入式开发,该协议可支持所有设备的集成。

了解设备形态

直连设备

对于不需要其他设备中转、能直接通过网络连接到云平台的设备,我们把它们叫做直连设备。任何有能力通过 Wi-Fi、以太网、蜂窝网络等,直接连上云平台的设备都是直连设备。

网关

网关的定义比较宽泛,可以是一种物理设备,也可以理解为一种能力。它也属于直连设备,广义上说,只要具备与其子设备进行通信并中转的能力,就是网关。比如,我们生活中熟知的智能音箱、电视机、插座等等都可以作为网关。

边缘网关

在一般的网关基础上,有一类具备更强的计算能力,能在边缘侧完成一部分计算能力,比如本地数据分析和统计、数据缓存、本地联动等等,业内统称为边缘网关。

网关子设备

有些设备能力受限,不具备连接云端能力,需要通过网关中转才能连接云平台,这类设备统称为子设备。常见的网关子设备有 Zigbee 设备和蓝牙设备等。

Tuya MQTT 标准协议

什么是 MQTT?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的 轻量级 通讯协议。它工作在 TCP/IP 协议族上,由 IBM 在 1999 年发布。

MQTT 是一个基于客户端-服务器的简单的消息传递协议,支持 QoS,设计轻量且省带宽,与数据无关(不关心 Payload 数据格式),支持持续地会话感知能力,设计用于具有低带宽的受限设备。

设备可作为客户端的形式通过 MQTT 协议来发布和订阅消息,从而实现设备的数据上报和实时控制。目前,MQTT 协议已广泛应用于物联网领域,一定程度上成为了物联网通讯协议的代名词。

MQTT 数据交互机制

Tuya MQTT 标准协议

对 MQTT 的支持情况

  • 消息服务质量 QoS(Quality of Service):发布消息的服务质量,即:保证消息传递的次数。支持 QoS 0 和 QoS 1,但是不支持 QoS 2。

    质量等级含义是否支持
    QoS 0消息最多传递 1 次,如果当时客户端不可用,则会丢失该消息。
    QoS 1(推荐)消息传递至少 1 次。
    QoS 2消息仅传送 1 次。
  • MQTT 版本主要有三个,分别是 MQTT 3.1、MQTT 3.1.1 和 MQTT 5。目前,物联网环境中使用最多的是 MQTT 3.1.1 协议。涂鸦平台支持 MQTT 3.1.1,暂不支持 MQTT 5。

MQTT 接入点

涂鸦 IoT 开发平台支持全球多个区域的设备接入,故需要根据设备实际使用的区域,来选择对应的接入点。

全球 6 大区 MQTT 接入点如下:

区域MQTT 接入域名端口号
中国数据中心m1.tuyacn.com8883
中欧数据中心m1.tuyaeu.com8883
美西数据中心m1.tuyaus.com8883
美东数据中心m1-ueaz.tuyaus.com8883
西欧数据中心m1-weaz.tuyaeu.com8883
印度数据中心m1.tuyain.com8883

设备身份认证

我们在快速入门提供了一个简单的设备接入和控制例子。如果您还没阅读,强烈建议您先了解一下。具体详情,请参考 快速入门。

设备身份验证指在设备向云平台发起 MQTT 连接请求时,设备需要携带自身的身份信息,云平台会对这些信息进行验证。如果验证不通过,云平台会拒绝本次连接。这个验证过程就是设备身份认证。

直连设备认证

一机一密认证

一机一密认证是预先为每个设备烧录其唯一的设备证书(即 ProductIDDeviceID 和 DeviceSecret)。当设备与云平台建立连接时,云平台对其携带的设备证书信息进行加密计算,最后使用 username/password 的方式认证。

在快速入门里,已经介绍了如何在平台上注册一个设备。

Tuya MQTT 标准协议

在 激活验证 页面得到三个重要信息,即设备证书,如下所示:

参数名称参数说明
ProductID产品的信息
DeviceID设备的身份信息,用于连接云端授权和通信使用
DeviceSecret设备的密码信息,用于连接云端授权使用

username 和 password 的计算规则如下:

参数名称参数说明示例
user name${DeviceID}|signMethod=hmacSha256,timestamp=${当前 10 位时间戳},secureMode=1,accessType=1;例如:6c828cba434ff40c074wF2|signMethod=hmacSha256,timestamp=1607837283,secureMode=1,accessType=1
passwordhmacSha256(content, DeviceSecret), content 的格式:deviceId=${DeviceID},timestamp=${当前 10 位时间戳},secureMode=1,accessType=1 需要按照 deviceId,timestamp,secureMode,accessType 这个顺序组装明文内容。 64 位字符的 16 进制数,不足 64位时前面需要补零。content 例如:“deviceId=6c828cba434ff40c074wF2,timestamp=1607635284,secureMode=1,accessType=1”  DeviceSecret 例如:ffad8eb66ae8c717  password 例如:9088f1608df4744e2a933ff905ffdde58dc7213510f25ad786a89896a5ea1104

在使用一机一密普通认证时,建议开启自动重连。网络抖动会导致设备断开连接,当网络恢复时,无需人工干预,设备可自动恢复连接。

X.509 证书认证

功能暂未对外开放,若需要可提交技术工单咨询。

一型一密认证

功能暂未对外开放,若需要可提交技术工单咨询。

网关子设备认证

结合上文介绍,网关子设备主要是依赖于网关的连接机制。网关自身是一个直连设备,其接入方式与普通直连设备没有差别,所以本章节是在网关接入的前提下,介绍子设备的认证方式。

网关可以是一种设备,也可能是一种功能。现实生活中,既有一类网关设备,其除了作为中转没有其他功能,也有网关是智能音箱、电视机,甚至插座都可以具备网关能力。

网关的通信特点是具备两个方向的通信能力:

  • 向上和云平台通信,可以直连云平台。
  • 向下和子设备通信,可以和子设备建立通信链路,理解子设备的协议并转换数据发送到云平台。

为了适配不同的使用场景,我们提供了三套子设备认证流程,详见 拓扑关系管理。

MQTT 保活

MQTT 保活或者 MQTT 心跳是指设备在一个心跳周期内向云端发送保活报文,云端依据此报文判断设备是否在线。

保活时间建议是 60 秒,不建议低于此值。从设备端发起的 CONNECT 报文开始计时,在收到 PING 消息时云端重置计时器。在超过 2.5 个心跳周期,云平台未收到消息,云平台会断开连接,设备此时是离线状态。

例如:设备设置的心跳周期是 60s,当设备断网 150s(60 × 2.5 = 150s)左右时,能观察到设备在云端是离线状态。

安全连接

为保证设备与云平台的通信安全性,需要使用 TLS 1.2 的方式建立连接。如果您使用 SDK 的方式接入,SDK 已经实现了 TLS 连接,您无需自己实现。需要指出的是,有些资源受限的设备,虽然有以太网能力,但是无法运行 TLS 套件,建议以子设备的形态接入。

如果您的设备环境比较复杂,SDK 无法满足,需要自己实现接入协议,您需要下载根证书。关于根证书的使用方法,请参考 C Demo 和 Java Demo。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Redux?它的核心概念有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux?⭐ 它的核心概念有哪些?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发…

【Go】rsrc不是内部或外部命令、无法将“rsrc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方法

前言 想尝试用go创建一个桌面应用程序,然后查了下决定用 walk。 我们要先下载walk,这里 官方链接 按照官方文档,我们先用go get命令下载。 go get github.com/lxn/walk然后分别创建好了 main.go、main.manifest 文件,代码如下…

Web自动化框架中验证码识别处理全攻略,让测试更得心应手!

前言: 随着Web应用程序的不断发展,自动化测试已成为项目开发中必不可少的一环。然而,验证码的出现却经常会使自动化测试变得更具挑战性。为了解决这个问题,我们需要一种方法来自动识别和处理验证码,从而提高自动化测试…

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…

在大厂做外包的软件测试工程师,如今发展怎么样了?

前言 不久前,许久没联系的大学室友出差来了魔都,趁此机会叫上了昔日的两三好友,一起小酌了一杯,觥筹交错中,得知了大学室友今年开始和朋友一同创业,时隔多年终于从外包公司,成为了一名“正式员…

RDMA编程杂记

目录 编程杂记什么是P_Key建链基于Socket API的建链基于CM API的建链 编程杂记 什么是P_Key P_Key(Partition Key)用于提供InfiniBand网络的隔离机制,只有在一个分区内的节点可以互相通信。 P_Key是一个16位的值,有两部分 msb…

第五章React路由

文章目录 一、React的基本使用1-1、react-router-dom1-1-1、react-router-dom基本使用 1-2、一般组件与路由组件1-3、NavLink1-4、封装自己的组件--MyNavLink1-5、Switch的使用1-6、多级地址样式失效问题1-7、模糊匹配1-8、严格匹配1-9、Redirect重定向1-10、嵌套路由1-11、向路…

Spring学习笔记3 Spring对IOC的实现

Spring学习笔记2 Spring的入门程序_biubiubiu0706的博客-CSDN博客 控制反转是一种思想 控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP(开闭原则)原则,达到DIP(依赖倒置原则)原则 控制反转,反转的是什么? 1.将对象的创建权力交出去,交给第三方容器负责 2.对象与对象…

1990-2021年全国31个省人口相关统计面板数据

1990-2021年全国31个省人口相关统计面板数据 1、时间:1990-2021年 2、来源:各省统计年鉴 3、指标:省份代码、年份、省份名称、省份名称、常住人口数、年末常住人口 0-14岁人口数、15-64岁人口数、65岁及以上人口数、6岁及以上人口&#x…

【精品资源】Java毕业设计攻略:从选题到答辩,一站式指南

导读: Java毕业设计是计算机科学与技术专业学生展示其编程能力、问题解决能力和创新思维的重要环节。这篇博客将为您提供一站式的Java毕业设计攻略,帮助您从选题到答辩,顺利完成毕业设计。 一、选题阶段 寻找灵感: 探讨热门技术如…

【Linux】Linux环境基础开发工具使用

Linux安装软件: 源代码安装rpm安装-- Linux安装包yum安装–解决安装源,安装版本,安装依赖 目录 一、Linux 软件包管理器 yum1.查看安装包2.安装软件3.删除软件一些有趣的软件的安装👻1.sl 二、vim编辑器1.使用vim1.模式转换2.命令模式2.底行模…

软件设计模式系列之十三——享元模式

1 模式的定义 享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少内存占用或计算开销,通过共享大量细粒度对象来提高系统的性能。这种模式适用于存在大量相似对象实例,但它们的状态可以外部化(e…

人工神经网络ANN:数学总结

一、内容 径向基函数(Radial basis function,RBF):一个取值仅依赖于到原点距离的实值函数,即。此外,也可以按到某一中心点c的距离来定义,即。 可以用于许多向函基数的和来逼近某一给定的函数&a…

SpringBoot使用@Async异步注解

首先,想一想为什么使用异步线程? 举个例子: 当我们请求这个接口的时候,在接口调用了method这个方法 然而被调用的方法执行了一个线程睡眠三秒 因为method方法睡眠了三秒钟,所以这个接口响应的时间肯定是大于三秒。因为接口是从上往下执行的,首先会在控制台输出一…

微信小程序python+nodejs+php+springboot+vue 讲座预约系统

讲座预约管理系统的用户是系统最根本使用者,按需要分析系统包括用户:学生、管理员。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括学生信息管理和文章公告管理。讲座公告管理,添加讲座公告信息…

Swift SwiftUI 隐藏键盘

如果仅支持 iOS 15 及更高版本,则可以通过聚焦和取消聚焦来激活和关闭文本字段的键盘。 在最简单的形式中,这是使用 FocusState 属性包装器和 focusable() 修饰符完成的-第一个存储一个布尔值,用于跟踪第二个当前是否被聚焦。 Code struct C…

洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题

【题目来源】https://www.luogu.com.cn/problem/P8815https://www.acwing.com/problem/content/4733/【题目描述】 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能&a…

JDBC MySQL任意文件读取分析

JDBC MySQL任意文件读取分析 文章首发于知识星球-赛博回忆录。给主管打个广告,嘿嘿。 在渗透测试中,有些发起mysql测试流程(或者说mysql探针)的地方,可能会存在漏洞。在连接测试的时候通过添加allowLoadLocalInfileInPath,allowLoadLocalInf…

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-GRU-Attention数据分类预测,运行环境Matlab2021b及以上&…

git学习使用

git使用 1、cmd #查看版本 git version2、初识 Git GUI: Git提供的图形界面工具 Git Bash: Git提供的命令行工具 1.打开Git Bash2.设置自己的用户名和邮箱地址git config --global user.name "xxx"git config --global user.email "123456789163.com"查…