目录
华为云IOT平台:
什么是物联网?
物联网(英文:Internet of Things,缩写:IoT)起源于传媒领域,是信息科技产业的第三次革命。物联网是指通过信息传感设备,按约定的协议,将任何物体与网络相连接,物体通过信息传播媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监管等功能。
华为云IoTDA:
设备接入服务(IoTDA)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务。

使用IoTDA:
首先需要注册并登录到华为云官网,然后搜索IoTDA并点击控制台进入:

然后点击开通免费单元:


创建产品:
产品(https://support.huaweicloud.com/usermanual-iothub/iot_01_0015.html):某一类具有相同能力或特征的设备的集合称为一款产品。帮助开发者快速进行产品模型和插件的开发,同时提供端侧集成、在线调试、自定义Topic等多种能力。比如,手表、大门通道门禁、紧急呼叫报警器、滞留报警器、跌倒报警器等

创建产品模型:
产品模型(Product Model),也称物模型,用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息。



效果展示:

创建设备:
设备是归属于某个产品下的设备实体,每个设备具有一个唯一的标识码。设备可以是直连物联网平台的设备,也可以是代理子设备连接物联网平台的网关。

创建成功之后,会分配一个设备的信息,非常重要,需要保存下来,方便后面调试使用

设备接入-数据上报:
属性数据上报是一种需要平台解析、缓存,通过数据流转功能将数据转发到应用侧或华为云其他云服务的一种方式。需要在平台建立产品模型。对于属性上报的数据,平台会记录属性的最新一次上报值,对符合产品模型定义的属性数据进行存储。
将文件中的模拟数据上报的项目在idea当中打开,修改配置以及上报的数据尝试上报数据:
找到iot-device-demo模块中的PropertySample类,如下图

首先我们找到这个位置,再去华为云当中获取自己的接入地址:


设备id和密钥就在之前下载的文件里面有
接下来修改一下数据让数据更合理:找到这个位置,删除掉接收平台下发的属性读写的方法并修改以下内容:

启动项目进行测试:

产品数据准备:
在后面的课程中还会使用到下面两款产品,大家需要抽时间自行创建:
烟雾报警器:



睡眠监测带:


设备管理:

表结构说明:

IOT接口对接:
环境集成:
在zzyl-framework模块导入依赖:
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-core</artifactId>
<version>3.1.76</version>
</dependency>
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-iotda</artifactId>
<version>3.1.76</version>
</dependency>
在zzyl-admin模块中的application-dev.yml文件中添加关于IOT的配置如下:
huaweicloud:
ak: UTVLYVJKFVGYVEFFWG
sk: WkEWqfwZoFlLwbR5Kq5NmWTLmj71WhRXe
#如果是上海一,请填写"cn-east-3";如果是北京四,请填写"cn-north-4";
regionId: cn-east-3
endpoint: 38e7abf.st1.iotda-app.cn-east-3.myhuaweicloud.com
projectId: 57ee9b4c827a44cb94319a077f0fe7cb
#amqp相关配置 下一章课程接收设备数据使用
host: 38e7abedbf.st1.iotda-app.cn-east-3.myhuaweicloud.com
accessKey: S25ZeTC5
accessCode: a4fKpE5zbk0nbGNJU0d1bKkJNRZxQzlp
queueName: DefaultQueue #默认无需改动
-
ak和sk是华为云身份凭证,需要新增一个访问密钥,操作如下:



-
endpoint 请在控制台的"总览"界面的"接入信息"中查看“应用侧”的https接入地址。

-
projectId项目ID,获取项目ID

-
host是AMQP访问的地址,获取方式如下:

-
accessKey和accessCode从预置接入凭证获取

在zzyl-framework中新增HuaWeiIotConfigProperties 来读取配置文件
package com.zzyl.framework.config.properties;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
/**
* @author itheima
*/
@Data
@NoArgsConstructor
@Configuration
@ConfigurationProperties(prefix = "huaweicloud")
public class HuaWeiIotConfigProperties {
/**
* 访问Key
*/
private String ak;
/**
* 访问秘钥
*/
private String sk;
/**
* 区域id
*/
private String regionId;
/**
* 应用侧https接入地址
*/
private String endpoint;
/**
* 项目id
*/
private String projectId;
/**
* 应用侧amqp接入地址
*/
private String host;
/**
* amqp连接端口
*/
private int port = 5671;
/**
* amqp接入凭证键值
*/
private String accessKey;
/**
* amqp接入凭证密钥
*/
private String accessCode;
// 指定单个进程启动的连接数
// 单个连接消费速率有限,请参考使用限制,最大64个连接
// 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接
//可根据实际情况自由调节,目前测试和正式环境资源有限,限制更改为4
private int connectionCount = 4;
/**
* 队列名称
*/
private String queueName;
/**
* 开门命令所属服务id
*/
private String smartDoorServiceId;
/**
* 开门记录属性
*/
private String doorOpenPropertyName;
/**
* 开门命令
*/
private String doorOpenCommandName;
/**
* 设置临时密码命令
*/
private String passwordSetCommandName;
/**
* 仅支持true
*/
private boolean useSsl = true;
/**
* IoTDA仅支持default
*/
private String vhost = "default";
/**
* IoTDA仅支持PLAIN
*/
private String saslMechanisms = "PLAIN";
/**
* true: SDK自动ACK(默认)
* false:收到消息后,需要手动调用message.acknowledge()
*/
private boolean isAutoAcknowledge = true;
/**
* 重连时延(ms)
*/
private long reconnectDelay = 3000L;
/**
* 最大重连时延(ms),随着重连次数增加重连时延逐渐增加
*/
private long maxReconnectDelay = 30 * 1000L;
/**
* 最大重连次数,默认值-1,代表没有限制
*/
private long maxReconnectAttempts = -1;
/**
* 空闲超时,对端在这个时间段内没有发送AMQP帧则会导致连接断开。默认值为30000。单位:毫秒。
*/
private long idleTimeout = 30 * 1000L;
/**
* The values below control how many messages the remote peer can send to the client and be held in a pre-fetch buffer for each consumer instance.
*/
private int queuePrefetch = 1000;
/**
* 扩展参数
*/
private Map<String, String> extendedOptions;
}
在zzyl-framework中添加如下配置:
package com.zzyl.framework.config;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.region.Region;
import com.huaweicloud.sdk.iotda.v5.IoTDAClient;
import com.zzyl.framework.config.properties.HuaWeiIotConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class IotClientConfig {
@Autowired
private HuaWeiIotConfigProperties huaWeiIotConfigProperties;
@Bean
public IoTDAClient huaWeiIotInstance() {
ICredential auth = new BasicCredentials()
.withAk(huaWeiIotConfigProperties.getAk())
.withSk(huaWeiIotConfigProperties.getSk())
// 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate"
.withDerivedPredicate(BasicCredentials.DEFAULT_DERIVED_PREDICATE)
.withProjectId(huaWeiIotConfigProperties.getProjectId());
return IoTDAClient.newBuilder()
.withCredential(auth)
// 标准版/企业版:需自行创建Region对象,基础版:请使用IoTDARegion的region对象,如"withRegion(IoTDARegion.CN_NORTH_4)"
.withRegion(new Region(huaWeiIotConfigProperties.getRegionId(), huaWeiIotConfigProperties.getEndpoint()))
// .withRegion(IoTDARegion.CN_NORTH_4)
.build();
}
}
1281

被折叠的 条评论
为什么被折叠?



