开发者学堂课程【基于STM32的端到端物联网全栈开发:后端服务开发(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/574/detail/7948
后端服务开发(2)
目录:
一、后端项目例程
二、数据库的设计
三、使用 Navicat 建表
四、后端项目例程、结构
五、创建 Java 类
六、服务器可订阅的消息
七、后端服务器应用开发
一、后端项目例程
目标如下:
(通过 Navicat 建立数据库表)
[1]接收来自阿里云 loT 平台推送的节点设备上报消息
[2]写入数据库(更新数据记录)
[3]接收前端服务器的数据库查询操作,并返回对应信息
[4]接收前端服务器命令,转发给阿里云 loT 平台
完成如下图:
二、数据库的设计
和前端服务器的交互 API 定义
GET/api/v1/device/clearAlarm(设备报警状态取消)
GET/apiv1/device/listDeviceName(查询所有设备名)
GET/api/v1/device/queryAlarmHistoryLogs(查询一段报警数据)
GET/api/v1/device/queryDeviceProp(获取设备属性)
GET/api/v1/device/queryDevicePropHistoryLogs(查询一段时间温湿度数据)
GET/apilv1/device/setDeviceProperty(修改设备报警阀值)
三个表格:
device_infoid
id
device_name
current_temperature
current_humidity
temp_threshold
alarm_status
last_alarm_date
last_online_date
connect_status
gmt_update
alarm_history_log
id
device_name
alarm_temperatur
etemp_threshold
gmt_create
device_prop_history_log
id
device_name
current_temperature
current_humidity
gmt_creat
三、使用 Navicat 建表
1、使用 Navicat 建立 MySQL 数据库,复制建表语句到 Navicat,并执行
2、分别建立三个表
表device_prop_history_log记录设备温湿度值历史数据
四、后端项目例程、结构
项目结构:Java 文件
common:主要存放应用中常量,异常,工具类等基础类
dao:数据操作层,主要存放 Dao类
service:主要存放业务处理类(service)
web:提供 HTTP 接口供前端调用,同时也是工程启动入口 DeviceAdminApplication.java
其他辅助文件
1、配置文件 @application.properties
2、Mapper 文件
3、Maven 工程配置文件 @pom.xml
4、数据库测试文件 @device-admin.sql
Maven 工程配置
打包方式:jar父工程:spring-boot-starter-parent是 Spring boot 的父依赖,当前项目就是 Spring boots 项目
依赖关系:
aliyun-java-sdk-core:阿里云 java 底层 SDK
aliyun-java-sdk-iot:用户服务器调用云端 openAPI,以实现产品管理、设备管理、Topic 管理等功能(主要是下行操作)
iot-client-message;用户服务器通过 HTTP/2通道,接收物联网平台推送过来的设备消息(主要是上行操作)
路径:src/main/resource/application.properties
对阿里云 IoT 平台访问的配置阿里云 loT 平台的账号信息
阿里云 IoT 平台访问区域信息
阿里云 loT 平台上要访问的产品信息
五、创建 Java 类
创建 Java 类和所建数据表结构一一对应
三个类 Vs.三个表
AlarmHistoryLog 类
Devicelnfo 类 DevicePropHistoryLog 类
抽象出表结构和可操作的方法 Mapper 文件的使用:Mapper
接口 Vs.Mapper.xml 映射
1、使用默认已经封装好的方法
2、手动映射:把 mapper.xml 中 SQL 语句和 mappr.java 中的方法对应起来
六、服务器端订阅消息
服务端可直接订阅产品消息
登录阿里云 loT 平台/控制台设置
阿里云 loT 平台通过 HTTP/2通道进行消息流转
选择推送的消息类型
设备上报消息:所有具有发布权限的 topic
设备状态变化通知:上线、下线
设备生命周期变更:设备创建、删除等
HTTP/2 SDK
1、提供身份验证、topic 订阅、消息发送、消息接收等能力
2、适用于平台和服务器间大量数据流转
登录阿里云 IoT 平台1控制台设置
选择推送的消息类型
1、设备上报消息:所有具有发布权限的 topic
2、设备状态变化通知:上线、下线
3、设备生命周期变更:设备创建、删除等
七、后端服务器应用开发
创建 DeviceMessageRegister 类,实现 InitializingBean 接口;在 spring 初始化 bean 的时候,会自动调用afterPropertiesSet 方法
建立和阿里云 loT 平台的连接
基于用户的阿里云 AccessKey 进行身份认证
订阅主题
监听,通过 SDK 消息回调获得数据 messageID、topic、payoad、generateTime、qos
根据不同主题,操作数据库
连接前的身份认证
accessKey 即账号的 AccessKey ID
accessSecret 即 AccessKey ID 对应的 AccessKey Secret选择安全设置查看账号 ID
regionld 为所在物联网平台服务地域
服务器关心的 topic
设备状态上报
getDeviceStatusTopic()
/as/mqt/status/{pk}#
(高级)设备属性上报
getDevicePropertyPostTopic()
/sys/{pk}/{dn}/thing/event/propety/post
(高级)设备事件上报getDeviceEventPostTopic()
/sys/{k}{n)}thing/eventS(Is event. denifr)/post
设备生命周期上报
监听,设置消息接收接口
建立连接时, 需要提供消息接收接口,用于处理未设置回调的消息
根据不同主题,通过 service 层,
操作数据库
client.setMessageListener(topic.xxxxx(),new MessageCallback()
Web 层(接口→子类,实现抽象方法)→service 层(mapper 下面的方法)→dao 层
SQL 语句如下:afterPropertiesSet()
>deviceInforService.xx
>devicePropHistoryLogService.xxx
>alarmHistoryLogService.xxx
DeviceInforServielmpl.java
>devicelnforMapper.xxx
DevicePropHistoryLogServicelmpl.java
>devicePropHistoryLogMapper.xxx
AlarmHistoryLogServicelmpl.java
>alarmHistoryLogMapper.xxx
调用云端 openAPI,可进行产品管理、设备管理、topic 管理、数据流转规则设置、消息通信等
通过向服务端地址发送 HTTP(S)GET/POST 请求,按照 API 接口说明封装,进行 API 调用
API 功能列表,及调用方式 SDK 下载:aliyun-java-sdk-iot/
在项目中由 maven 负责依赖 jar 包的自动下载 SDK 的使用
初始化 SDK 客户端
封装 request
调用 getAcsResponse 发出 request 并收取 response
响应前端请求,查询数据库:web 层->service 层->dao 层