当前位置: 首页 > news >正文

【开源物联网平台】FastBee认证方式和MQTT主题设计

🌈 个人主页:帐篷Li
🔥 系列专栏:FastBee物联网开源项目
💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案

目录

一、接入步骤

1.1 设备认证

1.2 设备交互

二、设备认证

2.1 加密认证

2.2 简单认证

2.3 设备获取当前时间

2.4 AES加密说明

三、设备交互

3.1 订阅主题

3.2 发布主题

3.3 数据格式

3.4 相关物模型说明


一、接入步骤

1.1 设备认证

    • 加密认证(推荐)
    • 简单认证

1.2 设备交互

    • 发布物模型、设备信息、时钟同步相关Mqtt主题
    • 订阅物模型、设备升级、时钟同步相关Mqtt主题

二、设备认证

提示

  • 认证类型:S=简单认证,E=加密认证
  • 产品启用设备授权码后,授权码不能为空
  • 用户ID就是登陆用户的ID,使用不同用户ID,设备归属于不同用户。可以统一使用admin账号1,后面通过配网或者扫码关联设备分配给不同用户。
  • 设备编号有两种方式获取:1.使用系统新建设备时,生成的设备编号;2.系统未新建设备,硬件端生成一个唯一编号作为设备编号,认证后系统会自动注册一个设备实体(设备比较多时,推荐这种方式)

2.1 加密认证

产品详情中获取产品编号、Mqtt账号、Mqtt密码和产品秘钥,密码通过产品秘钥进行AES加密,传递到后端;后端通过产品秘钥解密进行认证;连接Mqtt消息服务器需要提供唯一的客户端ID、用户名和密码,具体格式如下:

# 客户端Id等于 认证类型 + 设备编号 + 产品编号 + 用户ID
clientId =E& deviceNumber & productId & userId# 用户名
userName = wumei-smart# 密码
password = mqtt密码 & 过期时间
password = mqtt密码 & 过期时间 &设备授权码(产品启用设备授权时格式)
  • 客户端ID等于 认证类型 + 设备编号 + 产品编号 + 用户ID,用 & 符号连接,中间无空格;
  • 用户名直接输入Mqtt账号
  • 密码等于 Mqtt密码 + 密码过期时间 + 设备授权码(可选),然后进行AES加密。为了安全,密码过期时间应该在24小时以内,采用时间戳格式,精确到毫秒。

账号配置信息示例:

clientId ="E&D68329VL588&2&1"
userName ="wumei-smart"
password ="/W2A/4MK+9cEGBhyBDgr2K5c62DAjAK4m0b5pvwxX6FFMzI3h1pUmaDY3BH1P2mI"

2.2 简单认证

产品详情中获取Mqtt账号和Mqtt密码,建议测试环境使用。Mqtt客户端ID格式类似加密认证,其中E改为S。

# 客户端Id等于 认证类型 + 设备编号 + 产品编号 + 用户ID
clientId =S& deviceNumber & productId & userId# 用户名
userName = wumei-smart# 密码
password = mqtt密码
password = mqtt密码 &设备授权码(产品启用设备授权时格式)

账号配置信息示例:

# 客户端Id等于 认证类型 + 设备编号 + 产品编号 + 用户ID
clientId ="S&D68329VL588&2&1"
userName ="wumei-smart"
password ="PHYFED93WSFF1DAS"
password ="PHYFED93WSFF1DAS&ADBFCC8934864B26B55658C66F562AC5"(产品启用设备授权时格式)

2.3 设备获取当前时间

获取当前时间,可以调用系统的NTP时间接口,接口请求时发送设备当前运行毫秒数,返回设备发送时间、服务端接收时间、服务端发送时间。然后获取设备当前运行毫秒数,作为设备接收间。最后用公式计算出设备当前的时间,时间必须以毫秒为单位。在线时间戳工具

# deviceSendTime值为设备当前运行的毫秒数
http://localhost:8080/iot/tool/ntp?deviceSendTime=35768# 计算时间
设备当前时间 =(服务端接收时间 + 服务端发送时间 + 设备接收时间 - 设备发送时间)/2

2.4 AES加密说明

采用AES的CBC加密模式,偏移量固定为 wumei-smart-open 16位,输出为Base64,加密使用的密码为产品密钥。测试可以使用:在线加解密工具

加密模式:  CBC
填    充:  pkcs5padding
数 据 块:  128位
偏 移 量:  wumei-smart-open
输    出:  base64密    码:  对应系统的产品秘钥
加密内容:  mqtt密码 & expireTime &授权码(可选)

三、设备交互

{productId} 代表产品ID, {deviceNum} 代表设备编号。通过web端获取产品ID和设备编号,如果使用自动添加设备,设备编号可以使用唯一编码或者使用设备MAC地址,设备认证成功后会在后端自动添加一个对应的设备实体。

3.1 订阅主题

主题

描述

/{productId}/{deviceNum}/function/get

订阅平台指令

/{productId}/{deviceNum}/info/get

订阅设备信息(订阅到该主题就发布设备信息)

/{productId}/{deviceNum}/ota/get

订阅设备升级(旧)

/{productId}/{deviceNum}/upgrade/get

订阅OTA升级(新)

/{productId}/{deviceNum}/monitor/get

订阅实时监测信号(根据监测次数和间隔,然后发布监测数据)

/{productId}/{deviceNum}/ntp/get

订阅时钟同步(可选,用于同步设备的当前时间)

3.2 发布主题

主题

描述

/{productId}/{deviceNum}/property/post

发布数据 (实时显示,属性/功能和监测数据,可定时上报监测数据)

/{productId}/{deviceNum}/info/post

发布设备信息

/{productId}/{deviceNum}/event/post

发布事件

/{productId}/{deviceNum}/monitor/post

发布实时监测数据(仅用于实时监测图表显示,不会存储)

/{productId}/{deviceNum}/ntp/post

发布时钟同步(可选)

/{productId}/{deviceNum}/upgrade/reply

回复OTA升级(新)

3.3 数据格式

设备和系统交互使用JSON格式

  • 订阅设备信息,对应主题:/info/get
# 描述:订阅到设备信息后,发布设备信息,解决设备状态同步问题
# 设备消息内容为空
  • 发布设备信息,对应主题:/info/post
# 描述:1.设备上电后发布设备信息; 2.设备接收到设备信息指令后发布设备信息
# rssi             设备信号(信号极好[-55— 0],信号好[-70— -55],信号一般[-85— -70],信号差[-100— -85])
# status           设备状态,固定为3,表示在线
# firmwareVersion  固件版本
# userId           用户的ID,可设置为用户ID为1(管理员),配网时会分配设备给具体的用户。
# longitude        可选,经度,使用设备定位时需要上传
# latitude         可选,纬度,使用设备定位时需要上传
# summary          可选,摘要,设备的配置信息等,json格式,对象可自定义{"rssi":-43,"firmwareVersion":1.2,"status":3,"userId":1,"longitude":0,"latitude":0,"summary":{"name":"FastBee","chip":"ESP8266","author":"kerwincui","deliveryTime":"2023-06-06","activeTime":"2022-10-01"}}

  • 订阅实时监测,对应主题:/monitor/get
# 描述:订阅到实时监测消息,根据数量和间隔发布实时监测数据
# count      数量
# interval   间隔,毫秒为单位{"count":60,"interval":1000}
  • 发布实时监测,对应主题:/monitor/post
# 描述:根据订阅到的实时监测消息,发布指定数量和间隔的监测数据
# id       标识符,实时监测是物模型中的属性,产品详情中查看标识符,对应id值
# value    设备采集的值,只能是整数或者小数,以字符串类型传递
# remark   可为空或者使用设备当前时间[{"id":"temperature","value":"27.43","remark":""},{"id":"humidity","value":"32.18","remark":""}]

  • 订阅平台指令,对应主题:/function/get
# 描述:属性、功能、事件都属于物模型,Json定义是一样的。例如都订阅到消息打开开关,设备的处理都是把开关打开。   
# id      标识符,产品详情中查看物模型,对应物模型的标识符
# value   值,对应物模型中定义,以字符串类型传递
# remark  平台中告警、场景联动和定时下发的指令有备注信息[{"id":"gear","value":"1","remark":"设备定时"},{"id":"switch","value":"0","remark":"场景联动触发"}]

  • 发布数据和事件,对应主题:/property/post/event/post
# 描述:属性、功能、事件都属于物模型,Json定义是一样的。`value` 的值如果是布尔类型,值为"0"或者"1",代表打开/关闭;枚举类型对应枚举项的键值(例如 "1",代表中速档位);数组类型是以英文逗号分隔的字符串。
# id      标识符,产品详情中查看物模型,对应物模型的标识符
# value   值,对应物模型中定义,以字符串类型传递
# remark  可以直接使用订阅到的备注信息,设备日志信息中查看到该备注[{"id":"gear","value":"1","remark":"档位设置成功"},{"id":"switch","value":"0","remark":"开关已关闭"}]

3.4 相关物模型说明

  • 所有物模型的Id(标识符)都是唯一的,尽量不要使用特殊字符,以字母和数字为主。
  • 对象类型物模型下面子模型Id(标识符)格式:parentId_childId,对象数组类型同样,子模型Id增加父级的Id以下划线分隔,例如:
# 父级物模型Id:power# 子级物模型Id:power_light
  • 数组类型(包括对象数组类型)的物模型Id(标识符)只有一个,物模型值为数组(以英文逗号分隔的字符串存储),例如 98,100,50 字符串。所以上报数组类型的属性/功能/事件,相对特殊,Id(标识符)必须以 array_索引开头,索引是两位数,例如:
# 普通数组格式 `array_00_RGB`# 对象数组格式 `array_00_power_switch`# 索引00代表数组中第一个元素,02 / 03 ... 98 / 99 以此类推,数组长度不能超过100[{"id":"array_01_power_switch",   // array_01作为前缀,表示数组中的第二个元素"value":"1","remark":""}]

  • 发布时钟同步,对应主题:/ntp/post
# 描述:可选,发布时钟同步消息,服务端订阅到后下发时钟同步消息
# deviceSendTime 设备发送时间{"deviceSendTime":"1592361428000"}
  • 订阅时钟同步,对应主题:/ntp/get
# 描述:可选,订阅到时钟同步消息,计算当前时间 =(服务端接收时间 + 服务端发送时间 + 设备接收时间 - 设备发送时间)/2
# deviceSendTime  设备发送时间
# serverRecvTime  服务端接收时间
# serverSendTime  服务端发送时间{"deviceSendTime":"1592361428000","serverSendTime":"1592366463548","serverRecvTime":"1592366463548"}

  • 订阅OTA升级,对应主题:/ota/get
# 描述:订阅到设备升级消息后,根据固件下载地址,Http请求下载固件并升级
# version       版本号,可用于匹配固件版本
# downloadUrl   固件下载地址{"version":1.1,"downloadUrl":"https://iot.wumei.live/prod-api/profile/iot/6/2022-0616-140539.bin"}

相关文章:

【开源物联网平台】FastBee认证方式和MQTT主题设计

🌈 个人主页:帐篷Li 🔥 系列专栏:FastBee物联网开源项目 💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案 目录 一、接入步骤 1.1 设备认证 1.2 设备交…...

Ubuntu Qt控制终端运行ros

文章目录 gnome-terminalQt 通过QProcess类Qt 通过system gnome-terminal 在Ubuntu中可以使用man gnome-terminal命令查看gnome-terminal的使用指南,也可在ubuntu manuals查看: NAMEgnome-terminal — 一个终端仿真应用.概要gnome-terminal [-e, --c…...

mysql 性能调优参数配置文件

########################################################################### ## my.cnf for MySQL 8.0.x # ## 本配置参考 https://imysql.com/my-cnf-wizard.html # ## 注意: …...

windows右键新建文件没有txt文本文档怎么办?

我碰到此问题,按照以下方法改了注册表, 重启之后就正常了(没有注销,只是单纯重启)。以下方法来自AI: 如果在注册表的 .txt 路径下没有找到 ShellNew 键,你可以尝试手动创建这个键和所需的值来恢…...

已读不回,我又玻璃心了

最近有点上火,3个询盘给我整我无语了,难道我还没修炼到家?玻璃心又出来作祟了? 客户A急火火的发我一个文件,需求内容ios客户端调整,让我按照需求给找个人处理下,我收到后抓紧时间摇人&#xff0…...

面试经典150题(105-107)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天(第2天)完成了3道(105-107)150 105.(191. 位1的个数)题目描述: 编写一个函数,输入是一个无符号整数(以二进制串的形式&am…...

javaWebssh药品进销存信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh药品进销存信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOM…...

计算机设计大赛 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…...

Linux系统编程(六)高级IO

目录 1. 阻塞和非阻塞 IO 2. IO 多路转接(select、poll、epoll) 3. 存储映射 IO(mmap) 4. 文件锁(fcntl、lockf、flock) 5. 管道实例 - 池类算法 1. 阻塞和非阻塞 IO 阻塞 IO:会等待操作的…...

Python与FPGA——全局二值化

文章目录 前言一、Python全局128二、Python全局均值三、Python全局OTSU四、FPGA全局128总结 前言 为什么要进行图像二值化,rgb图像有三个通道,处理图像的计算量较大,二值化的图像极大的减少了处理图像的计算量。即便从彩色图像转成了二值化图…...

《Docker极简教程》--Docker的高级特性--Docker Compose的使用

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许开发人员通过简单的YAML文件来定义应用程序的服务、网络和卷等资源,并使用单个命令来启动、停止和管理整个应用程序的容器。以下是关于Docker Compose的一些关键信息和优势: 定义…...

tidyverse去除表格中含有NA的行

在tidyverse中,特别是使用dplyr包,去除含有NA的行可以通过filter()函数结合is.na()和any()或all()函数来实现。dplyr是tidyverse的一部分,提供了一系列用于数据操作的函数,使数据处理变得更加简单和直观。 以下是一个简单的例子&…...

开源爬虫技术在金融行业市场分析中的应用与实战解析

一、项目介绍 在当今信息技术飞速发展的时代,数据已成为企业最宝贵的资产之一。特别是在${industry}领域,海量数据的获取和分析对于企业洞察市场趋势、优化产品和服务至关重要。在这样的背景下,爬虫技术应运而生,它能够高效地从互…...

使用SMTP javamail发送邮件

一、SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。使用javamail编写发送…...

Hello C++ (c++是什么/c++怎么学/c++推荐书籍)

引言 其实C基础语法基本上已经学完,早就想开始写C的博客了,却因为其他各种事情一直没开始。原计划是想讲Linux系统虚拟机安装的,后来考虑了一下还是算了,等Linux学到一定程度再开始相关博客的写作和发表吧。今天写博客想给C开个头…...

最新的前端开发技术(2024年)

关于作者: 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#xff0…...

GCN 翻译 - 2

2 FAST APROXIMATE CONVOLUTIONS ON GRAPHS 在这一章节,我们为这种特殊的的图基础的神经网络模型f(X, A)提供理论上的支持。我们考虑一个多层的图卷积网络(GCN),它通过以下方式进行层间的传播: 这里,是无…...

HBase 的安装与部署

目录 1 启动 zookeeper2 启动 Hadoop3 HBase 的安装与部署4 HBase 高可用 1 启动 zookeeper [huweihadoop101 ~]$ bin/zk_cluster.sh start2 启动 Hadoop [huweihadoop101 ~]$ bin/hdp_cluster.sh start3 HBase 的安装与部署 (1)将 hbase-2.0.5-bin.tar.…...

236.二叉搜索树的公共祖先

236.二叉树的公共祖先 思路 看到题想的是找到两个点的各自路径利用stack保存,根据路径长度大小将两个stack的值对齐到同一层,之后同时出栈节点,若相同则找到祖先节点。但是效率不高 看了大佬代码,递归思想很难理解。 根据大佬…...

【论文精读】大语言模型融合知识图谱的问答系统研究

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验

2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...