教程四:使用物联网平台控制硬件端

2023-11-05

物美智能》系列文章目录

前言

上一章已经简单介绍了Arduino和Esp8266开发板的基本使用方法,本篇将由浅入深,为大家介绍如何使用物美智能平台去控制硬件端

注:官方代码文档与平台可查看下面gitee链接
https://gitee.com/kerwincui/wumei-smart.git

硬件端代码地址

https://gitee.com/kerwincui/wumei-smart/tree/master/sdk/arduino/Arduino-ESP8266

一、设备接入分两个步骤,设备认证和设备交互

1.设备认证

  • 加密认证(推荐)
  • 简单认证
  • EMQX支持的其他认证方式

2.设备交互

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

在这里插入图片描述

二、代码烧录

1.将第一步拉取的sdk代码从Arduino中打开
在这里插入图片描述
2.修改Helper.cpp文件配置自己的wifi密码,在服务端新建产品后,产品详情中获取产品编号、Mqtt账号、Mqtt密码和产品秘钥,配置到下面的代码中去。在这里插入图片描述
3.编译、烧录。成功后查看wifi是否正常连接。打开串口调试信息,查看开发板是否正常相应
4.补充代码
在我们连接好开发板,并且串口信息正常打印数据时,我们会发现虽然我们点击了服务端按钮,但是开发板并没有做出相应动作,这是因为sdk代码中,获取到相应操作后,只打印了信息,并没有做出相应动作,如下:
在这里插入图片描述
如果想要开发板做出相应响应信息,可在每个条件下补充相应的代码。

三、设备认证

1. 加密认证

系统推荐使用的认证方式,支持设备禁用功能。产品详情中获取产品编号、Mqtt账号、Mqtt密码和产品秘钥,密码通过产品秘钥进行AES加密,传递到后端。后端通过产品秘钥解密进行认证。连接Mqtt消息服务器需要提供唯一的客户端ID、用户名和密码,具体格式如下:

# 客户端ID
clientId = deviceNumber & productId 

# 用户名
userName = wumei-smart

# 密码
password = mqtt密码 & userId & 过期时间

  • 客户端ID等于设备编号 + 产品编号,用 & 符号连接,中间无空格;
  • 用户名直接输入Mqtt账号
  • 密码等于Mqtt密码 + 用户ID + 密码过期时间,然后进行AES加密。用户ID就是登陆用户的ID,Admin账号是1。为了安全,密码过期时间应该在24小时以内,采用时间戳格式,精确到毫秒。

账号配置信息示例:

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

2、获取当前时间

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

# deviceSendTime值为设备当前运行的毫秒数
http://localhost:8080/iot/tool/ntp?deviceSendTime=35768

# 计算时间
设备当前时间 = (服务端接收时间 + 服务端发送时间 + 设备接收时间 - 设备发送时间) / 2

3、 AES加密说明

采用AES的CBC加密模式,偏移量固定为 wumei-smart-open 16位,输出为Base64。

加密模式:  CBC
填    充:  pkcs5padding
数 据 块:  128位
偏 移 量:  wumei-smart-open
输    出:  base64

密    码:  对应系统的产品秘钥
加密内容:  mqtt密码 & userId & expireTime

四、设备交互

{productId} 代表产品ID, {deviceNum} 代表设备编号。通过web端获取产品ID和设备编号,如果使用自动添加设备,设备编号可以自定义或者使用设备MAC地址,设备认证成功后会在后端自动添加一个对应的设备实体。
1.订阅主题
在这里插入图片描述
2.发布主题
在这里插入图片描述
3.数据格式(设备和系统交互使用JSON格式)

  • 发布设备信息,对应主题:/info/post
# 描述:设备上电后发布设备信息
# rssi             设备强度(信号极好[-55— 0],信号好[-70— -55],信号一般[-85— -70],信号差[-100— -85])
# status           设备状态,固定为3,表示在线
# userId           用户的ID
# firmwareVersion  固件版本
{
     "rssi": -20,
     "firmwareVersion": 1.10,
     "status": 3,
     "userId": 1
}
  • 订阅OTA升级,对应主题:/ota/get
# 描述:订阅到设备升级消息后,根据版本号,Http请求下载固件并升级

{
    "version": 1.1
}
  • 订阅实时监测,对应主题:/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": ""
}]
  • 发布时钟同步,对应主题:/ntp/post
# 描述:可选,发布时钟同步消息,服务端订阅到后下发时钟同步消息
# deviceSendTime 设备发送时间

{
    "deviceSendTime": "1592361428000"
}

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

{
    "deviceSendTime": "1592361428000",
    "serverSendTime": "1592366463548",
    "serverRecvTime": "1592366463548"
}

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

[{
    "id": "gear",
    "value": "1",
    "remark": "备注信息"
} {
    "id": "switch",
    "value": "0",
    "remark": "备注信息"
}]

  • 订阅属性/功能,对应主题:/property/get 、 /function/get 、property-online/get 、 /function-online/get
# 描述:属性、功能、事件都属于物模型,Json定义是一样的,订阅的消息没有 `remark` 备注信息。属性和功能的在线模式和普通模式,用于区分不同种类消息,但是设备的处理都是一样的。例如都订阅到消息打开开关,设备的处理都是把开关打开。   
# id     标识符,产品详情中查看物模型,对应物模型的标识符
# value  对应值,查看物模型中定义,同上

[{
    "id": "gear",
    "value": "1"
} {
    "id": "switch",
    "value": "0"
}]

(想要了解更多可查看物美智能官网:http://wumei.live/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教程四:使用物联网平台控制硬件端 的相关文章

  • 行为树的原理及实现

    查阅了一些行为树资料 目前最主要是参考了这篇文章 看完后感觉行为树实乃强大 绝对是替代状态机的不二之选 但从理论看起来很简单的行为树 真正着手起来却发现很多细节无从下手 总结起来 就是 1 行为树只是单纯的一棵决策树 还是决策 控制树 为了
  • 如何管理技术团队?我的 6 个建议

    我工作近 10 年 是程序员出身 有大概 5 年的管理经验 最多管理过 40 人的技术团队 本文是个人的一些观点和建议 以及这些年的一点感悟 希望对于管理人员 特别是中层管理者有点用处 管理技术团队 其实也是管理的一种 我个人认为 管理能力
  • ms08-067漏洞复现

    文章目录 ms08 067简介 复现 实验环境 漏洞利用 ms08 067简介 Windows Server服务RPC请求缓冲区溢出漏洞 MS08 067 漏洞类别 远程溢出 CVE ID 2008 4250 漏洞详情 MicrosoftW

随机推荐

  • 更改软件计算机无法启动怎么办,无法开机:windows未能启动,原因可能是最近更改了硬件或软件...

    win7系统 电脑无法启动 屏幕提示 windows未能启动 原因可能是最近更改了硬件或软件 这个问题我电脑出现过一模一样的 不用从装系统 简单一步就能开机 1 开机出现第一个页面 就是这个图片这样按F8 进入安全模式 2 然后就是这个页面
  • QT-------UI基础到进阶,干货满满!!!

    目录 一 UI基础 1 QWidget类 掌握 2 添加子组件 掌握 3 样式表 熟悉 二 UI进阶 1 Designer 设计师 掌握 2 布局 Layout 掌握 3 QWidget属性 掌握 4 UI指针 掌握 5 基础组件 熟悉 5
  • 云服务器配置环境Linux初学常用命令以及操作步骤

    云服务器Linux初学常用命令 ls 查看此目录下所有文件夹的名称 cd 返回上一个文件夹 cd 返归根目录 cd file 查看指定的文件夹 file是你自己指定的文件夹的名称 tar zxvf file 解压你指定的gz包 file是你
  • layui 日期范围选择

    layui时间范围选择 相信很多时候项目中会遇到时间范围选择 废话不多说上图 上代码 div class layui inline div class layui input inline style width 160px div div
  • “数字孪生城市”的概念,你知道多少?

    随着大数据时代的到来以及互联网 云计算 物联网 人工智能技术等新一代先进信息技术的发展 近年来陆续诞生了数字城市 智慧城市以及数字孪生城市等各种 新型城市 概念 数字城市是随着1998年美国前副总统阿尔 戈尔提出 数字地球 之后而产生的概念
  • W25Q256学习

    一 基本特性 容量256Mb 最小的组织单位是页每个页256个字节 可进行页编程 一次写256个字节 16个页组成4KB的扇区 可进行扇区擦除 128个扇区组成32KB块 64KB的组 可以整片擦除 256有8192个扇区和512个块 25
  • 在 Web.config 中,配置允许多个指定的域名进行跨域访问

    一般来说 如果是要允许跨域访问 最简单的设置 就是在 Web config 中 将 Access Control Allow Origin 设置为 即可 如下所示
  • 谈谈初级软件测试工程师具备的知识与技能

    什么是软件测试 软件测试的经典定义是 在规定的条件下对程序进行操作 以发现程序错误 衡量软件品质 并对其是否能满足设计要求进行评估的过程 软件测试的现实定义是 软件测试是贯穿整个软件开发生命周期 对软件产品 包括阶段性产品 进行验证和确认的
  • 【OpenHarmony】L1 烧录的启动参数

    OpenHarmony L1 烧录的启动参数 启动参数 linux liteos a uboot位置 linux liteos a和linux共用 启动参数 linux setenv bootargs mem 128M console tt
  • Portscan一款局域网端口扫描器

    Portscan是一款局域网端口扫描器 可以用于扫描目的主机的开放端口 并猜测目的主机的操作系统 支持Edge Wi Fi和3G网络 打开PortScan软件后默认会帮你填好超始IP及端口号 结束IP可以自已根据需求填写好 然后扫描即可 它
  • 控制台I/O显示格式化的结果

    不经常使用Console WriteLine 所以记录下所有的格式化的写法 以供分享 1 格式字符串 不考虑大小写 除了e E C 货币格式 C2 货币格式 精度为两位小数 eg 73 23 D 十进制格式 E 科学计数法 System C
  • Java入门-向下转型的安全判断

    向下转型的安全判断 向下转型的安全判断使用原因 多态实现了引用类型的向上转型 我们也可以进行向下转型 但是向下转型不一定是安全的 要先进行安全判断 只有父引用原本指向的类型和与向下转型的类型一致 才能转 因此我们需要进行向下转型的安全判断
  • SpringBoot 项目打成 .exe 程序

    https mp weixin qq com s XmNYqyZeY 1gSBxpAX4TRQ
  • 抖音设计系统Semi Design:解构、原理与实现

    摘要 本文将深入探讨抖音设计系统Semi Design 阐述其定义 分析其原理 并通过详细代码展示其实现方法 本文旨在为设计师 开发人员和相关领域的研究者提供有关Semi Design的深入理解和实用指南 引言 抖音 作为一款全球流行的短视
  • Vue+style 动态样式绑定(收藏图标)

    主要代码 0 未收藏 1 已收藏
  • 函数隐藏和函数覆盖

    函数隐藏和函数覆盖 1 函数隐藏 派生类中函数具有与基类同名的函数 参数列表不一定相同 从而派生类中隐藏了基类的同名函数 2 函数覆盖 定义 派生类中函数将基类中的函数覆盖的情况称为函数覆盖 条件 1 基类是虚函数 2 发生覆盖的两个函数分
  • static与const的区别

    一 static主要有三个作用 1 修饰局部变量 成为静态局部变量 2 修饰全局变量 成为静态全局变量 3 修饰函数 成为静态函数 1 修饰局部变量 成为静态局部变量 没有加static的情况 如果加了static会有什么变化呢 栈区 存放
  • iOS完整学习路线图

    今晚特地花时间整理出了iOS的完整学习路线图 希望对大家有帮助 FROM http blog csdn net q199109106q article details 8596506
  • stm32通过I2C接口实现温湿度(AHT20)的采集

    stm32通过I2C接口实现温湿度 AHT20 的采集 一 I2C总线协议详解 一 I2C总线物理拓扑结构 二 I2C总线协议 三 硬件I2C和模拟I2C 1 硬件I2C 2 模拟I2C 3 区别 二 实现AHT20采集程序 一 了解AHT
  • 教程四:使用物联网平台控制硬件端

    物美智能 系列文章目录 一款强大的物联网管理平台介绍 物美智能 教程一 阿里云使用docker快速部署服务端 教程二 本地配置服务端开发环境 教程三 硬件端 Arduino和ESP8266开发板入门 教程四 使用物联网平台控制硬件端 教程五