AWS iot core 架构物联网项目

本文介绍海外智能机器人物联网APP项目架构思路,使用亚马逊iot core实现数据交互。通过Cognito身份池获取身份信息,用策略控制权限。利用物品影子存储数据、推送变更,解耦服务端与设备数据,减轻服务端压力。还给出相关服务端代码及查找SDK地址。

最近架构了一个海外的智能机器人物联网APP项目,使用的是亚马逊的iot core实现数据交互。这里给大家写一些使用的思路,因为中间细节很多,文章写起来很费劲。给大家一些比较有用的链接。
AWS Iot官方中文文档
AWS Cognito身份池中文文档
亚马逊AWS官方博客智能家居物联网平台之-设备状态管理

架构思路

参考上面写的官方博客做数据权限控制和交互。具体实现大概如下:首先APP用户登录同时,APP服务端向亚马逊Cognito身份池获取对应身份信息返回给APP端,参数如下:
在这里插入图片描述
APP端使用对应的安卓和IOS的sdk使用参数链接到亚马逊IOT。每一个identityId对应一个APP账户,每个identityId都可以绑定一个iot core的策略,使用该策略进行权限控制,可以控制到该用户下的所有设备,不允许跨账号设备进行对应的topic数据交互。

iot core我们使用的物品的影子,来完成对应的数据存储及变更数据推送,影子的具体功能是在,设备的影子里面存储一份物品的所有属性,如下图:在这里插入图片描述
其中state属性内的参数是,我们服务端或者APP端发送的指令或者期望值。metadata属性是,设备端上报的设备上的所有属性,设备端某个属性变更的时候推送改属性数据。设备影子的出现,解耦了服务端与设备的数据耦合性,APP和服务端不需要关心设备是否在线,只需要下发指令到影子内,影子会在设备在线时下发最新版本的指令,中间指令丢弃。设备上报的变更数据影子也会推送给服务端/APP端。点击进入物品影子的使用文档

一般都知道,一般服务端的压力相对来说是很大的,整个架构思路,解放了APP服务端压力。APP端也可以实时获取到设备的业务数据。

iot core相关服务端代码

亚马逊的各种sdk写法太多了,就java现在也有两个版本,各位注意一下自己的版本。给大家一个亚马逊maven查找的地址自行查找对应的服务sdk。

		<!-- AWS iot server sdk -->
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>iot</artifactId>
            <version>2.17.230</version>
        </dependency>
        <!-- AWS iot device sdk -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-iot-device-sdk-java</artifactId>
            <version>1.3.10</version>
        </dependency>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>cognitoidentity</artifactId>
            <version>2.17.230</version>
        </dependency>

这里给大家一些现成代码:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;
import software.amazon.awssdk.profiles.ProfileProperty;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.iot.IotClient;
import software.amazon.awssdk.services.iot.model.*;
import software.amazon.awssdk.utils.StringInputStream;
import java.util.ArrayList;
import java.util.Objects;
/**
 * @Description: AWS iot 服务端工具类
 */
@Slf4j
@Component
public class AwsIotServerClientComponent {
   
   
    private AwsIotServerClientComponent(){
   
   
    }
    @Autowired
    private AwsIotAccountConfig iotAccountConfig;
    private IotClient iotClient;
    /**
     * 初始化 iot 客户端
     *
     * @return
     */
    @Bean(value = "iotServerClient")
    public IotClient iotClient() {
   
   
        StringBuilder cfgBuilder = new StringBuilder("[default]\n");
        cfgBuilder.append(ProfileProperty.AWS_ACCESS_KEY_ID).append(" = ").append(iotAccountConfig.getAccessKeyId())
                .append("\n").append(ProfileProperty.AWS_SECRET_ACCESS_KEY).append(" = ").append(iotAccountConfig.getSecretAccessKey()).append("\n");
        ProfileFile profileFile = ProfileFile.builder()
                .content(new StringInputStream(cfgBuilder.toString()))
                .type(ProfileFile.Type.CONFIGURATION).build();
        AwsCredentialsProviderChain awsCredentialsProviderChain = AwsCredentialsProviderChain.of(
                ProfileCredentialsProvider.builder().profileFile(profileFile).build()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值