Tuya MQTT 标准协议是什么?

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.mzph.cn/news/88155.shtml

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

相关文章

SpringBoot 学习(一)自动装配

本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。 1.1 pom.xml (1) 父工程( spring-boot-starter-parent ) 核心依赖,静态资源过滤等配置。编写或导入 springboot 依赖时不需要指定版本号,继承…

android源码编译

整包编译 导入环境变量 source ./build/envsetup.shlunch:选择平台编译选项make:执行编译 编译单个apk 进入到apk mk所在路径 mma

java18-枚举类和注解

枚举类 枚举类的理解 类的对象是有限个的,确定的当需要定义一组常量时,强烈建议枚举类 public class SeasonTest {public static void main(String[] args) {Season spring Season.SPRING;System.out.println(spring);} } class Season{// 声明seaso…

Docker 学习总结(78)—— Docker Rootless 让你的容器更安全

前言 在以 root 用户身份运行 Docker 会带来一些潜在的危害和安全风险,这些风险包括: 容器逃逸:如果一个容器以 root 权限运行,并且它包含了漏洞或者被攻击者滥用,那么攻击者可能会成功逃出容器,并在宿主系统上执行恶意操作。这会导致宿主系统的安全性受到威胁。 特权升…

可以实现2路(4通道)FlexRay总线

可以实现2路(4通道)FlexRay总线的汽车、无人机等高可靠性通讯应用解决方案。 FlexRay总线的出现汽车和无人机通讯领域,为高可靠性通讯应用提供了一种新的解决方案。FlexRay总线具有高速、高可靠性、灵活性等特点,可以满足汽车、无…

解答嵌入式和单片机的关系

嵌入式系统是一种特殊的计算机系统,用于特定任务或功能。而单片机则是嵌入式系统的核心部件之一,是一种在单个芯片上集成了处理器、内存、输入输出接口等功能的微控制器。刚刚好我这里有一套单片机保姆式教学,里面有编程教学、问题讲解、语言…

自学Mysql调优笔记

Mysql性能调优学习 预计十天完成14/day 1. 存储引擎 存储引擎是基于表的,而不是基于库的 SHOW ENGINES --展示所有存储引擎1.1 InnoDB DML操作遵循ACID模型,支持事务。 行鸡锁,提供并发访问性能。 支持外键约束,保证数据完…

大学毕业生应聘求职,应用MBTI职业性格测试

受到大环境的影响,各企业也是变的很不景气,但是这也正是给了求职者一个缓冲期。根据因果论,我始终觉得好事和坏事是交织在一起的,在某种程度上影响了我们的经济,但是过后,必定很迎来新的一波经济发展的狂潮…

Android.bp常用语法和预定义属性

介绍 Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定: 注释: 单行注释使用//符号。 多行注释使用/和/包围。 和go语言相同 // 这是单行注释 /* 这是…

【二叉树】——链式结构(快速掌握递归与刷题技巧)

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

Qt/C++音视频开发55-加密保存到文件并解密播放

一、前言 为了保证视频文件的安全性,有时候需要对保存的视频文件加密,然后播放的时候解密出来再播放,只有加密解密的秘钥一致时才能正常播放,用ffmpeg做视频文件的加密保存和解密播放比较简单,基于ffmpeg强大的字典参数设计,在avformat_write_header写入头部数据的时候,…

蓝桥杯 题库 简单 每日十题 day10

01 最少砝码 最少砝码 问题描述 你有一架天平。现在你要设计一套砝码,使得利用这些砝码 可以出任意小于等于N的正整数重量。那么这套砝码最少需要包含多少个砝码? 注意砝码可以放在天平两边。 输入格式 输入包含一个正整数N。 输出格式 输出一个整数代表…

【漏洞复现】企望制造 ERP命令执行

漏洞描述 由于企望制造 ERP comboxstore.action接口权限设置不当,默认的配置可执行任意SQL语句,利用xp_cmdshell函数可远程执行命令,未经认证的攻击者可通过该漏洞获取服务器权限。 免责声明 技术文章仅供参考,任何个人和组织…

什么是CPC认证,CPC认证怎么办理?CPC美国进口商怎么处理?

1、跨境卖家作为“进口商”,想将人中国工厂生产的的产品卖到美国,需要上向作为零售/商的的亚马逊提供CPC证书。 l366–OOll–lo3 v 2、cpc认证是什么cpsc认证怎么办理。 3、cpc和认证认可原则是。 4、而且cpc认证在我看来基本内容可包括及非地区总之会计…

【C++11】万能引用与完美转发

文章目录 1. 模板中的&&—万能引用2. 完美转发及其应用场景3. 用到的代码3.1 string.h3.2 list.h3.3 test.cpp 1. 模板中的&&—万能引用 首先我们来看这样一段代码: 这里有4个函数,我们很容易能看出来它们是一个重载的关系 然后我们给这…

在master分支进行代码回滚

问题一: 要回滚master代码,要在master分支上进行reset,其他分支进行reset时,会提示git push提交出现Everything up-to-date提示问题;但这样危险,要提前备份下代码 链接: Everything up-to-date 问题二&am…

CSI及CPHY的学习知识点

0.CSI早期只有DPHY可用 CSI-2 v1.3及之后版本提供了更高的接口带宽和更好的通道布局灵活性。从CSI-2 V1.3开始引入了C-PHY 1.0(C-PHY 1.0是MIPI联盟于2014年9月发布的新物理接口),能够兼容之前的D-PHY v1.2版本。 在CSI-2 V1.2及以前都只能用DPHY传输csi…

echarts添加点击事件

实现效果:点击图表,弹出该数据下对应得详情 官方文档: 封装的图表组件中: 点击获取点击得对象,进而将需要的参数传给父组件,在父组件中再去请求接口获取更多信息 this.chart.on(click, (params)> {th…

HTML5福利篇--使用Canvas画图

目录 一.Canvas元素 1.Canvas元素定义 2.使用JavaScript获取页面中的Canvas对象 二.绘制图形 1.绘制直线 2.绘制矩形 (1)rect() (2)strokeRect() (3)fillRect()和clearRect()函数 3.绘制圆弧 4.…

C语言的stdio.h的介绍

C语言的stdio.h的介绍 C语言的stdio.h的介绍 C语言的stdio.h的介绍C语言stdio.h的介绍 C语言stdio.h的介绍 这个含义是导入标准输入输出库 包含头文件.h&#xff0c;std标准库&#xff0c;io是input output输入输出库 <>代表系统库&#xff0c;自定义的话用""…