阿里云物联网平台独享实例使用Quick Start

简介: 目前物联网平台有两类实例:公共实例和用户购买的实例。相较共享实例,独享实例提供时序数据存储,用于根据设备数据进行业务分析和监控,购买的实例与其他实例之间相隔离,具有更高的数据可靠性和安全性。本文主要介绍独享实例的快速使用Quick Start。

Step By Step

1、创建实例
图片.png

注意:整个实例的完整初始化大概需要10分钟左右。

2、切换实例(从共享实例切花到独享实例)
图片.png

3、独享实例下面创建产品和设备(与共享实例操作方法一致)
图片.png

4、获取连接参数
图片.png

图片.png

图片.png

5、基于开源Java SDK上行数据

参考链接:基于开源JAVA MQTT Client连接阿里云IoT

import com.alibaba.taro.AliyunIoTSignUtil;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class IoTDemo1 {

    public static String productKey = "g0fzs******";
    public static String deviceName = "******";
    public static String deviceSecret = "d2d447494a340499****************";
    public static String regionId = "cn-shanghai";
    public static String instanceId = "****************";

    //物模型-属性上报topic
    private static String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
    private static String subTopic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply";
    private static MqttClient mqttClient;

    public static void main(String [] args) throws MqttException {

        initAliyunIoTClient();

        ScheduledExecutorService scheduledThreadPool = new ScheduledThreadPoolExecutor(1,
                new ThreadFactoryBuilder().setNameFormat("thread-runner-%d").build());
        scheduledThreadPool.scheduleAtFixedRate(()->postDeviceProperties(), 10,10, TimeUnit.SECONDS);

        mqttClient.subscribe(subTopic);
        mqttClient.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable throwable) {

            }

            @Override
            public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
                System.out.println("Topic : " + s);
                System.out.println("message ;" + mqttMessage.getPayload());
                System.out.println(new String(mqttMessage.getPayload())); //打印输出消息payLoad

            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

            }
        });

    }

    private static void initAliyunIoTClient() {

        try {
            String clientId = "java" + System.currentTimeMillis();

            Map<String, String> params = new HashMap<>(16);
            params.put("productKey", productKey);
//            params.put("IotInstanceId", instanceId);
            params.put("deviceName", deviceName);
            params.put("clientId", clientId);
            String timestamp = String.valueOf(System.currentTimeMillis());
            params.put("timestamp", timestamp);

            String targetServer = "tcp://" + instanceId + ".mqtt.iothub.aliyuncs.com:1883";

            String mqttclientId = clientId + "|securemode=3,signmethod=hmacsha1,timestamp=" + timestamp + "|";
            String mqttUsername = deviceName + "&" + productKey;
            String mqttPassword = AliyunIoTSignUtil.sign(params, deviceSecret, "hmacsha1");
            connectMqtt(targetServer, mqttclientId, mqttUsername, mqttPassword);

        } catch (Exception e) {
            System.out.println("initAliyunIoTClient error " + e.getMessage());
        }
    }

    public static void connectMqtt(String url, String clientId, String mqttUsername, String mqttPassword) throws Exception {

        MemoryPersistence persistence = new MemoryPersistence();
        mqttClient = new MqttClient(url, clientId, persistence);
        MqttConnectOptions connOpts = new MqttConnectOptions();
        // MQTT 3.1.1
        connOpts.setMqttVersion(4);
        connOpts.setAutomaticReconnect(false);
        connOpts.setCleanSession(true);

        connOpts.setUserName(mqttUsername);
        connOpts.setPassword(mqttPassword.toCharArray());
        connOpts.setKeepAliveInterval(60);
        mqttClient.connect(connOpts);
    }

    private static void postDeviceProperties() {

        try {
            //上报数据
            //高级版 物模型-属性上报payload
            String payloadJson = "{\"params\":{\"DetectDistance\":13}}";
            MqttMessage message = new MqttMessage(payloadJson.getBytes("utf-8"));
            message.setQos(1);

            mqttClient.publish(pubTopic, message);

            System.out.println("upload message demo");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

6、数据转发到实例内的时序数据存储
图片.png

7、设备上行消息,查询运行日志

可以基于日志,快速进行常见问题的排查定位。

图片.png

8、使用SDK查看流转到TDSB的数据

  • 8.1 pom.xml
<dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>hitsdb-client</artifactId>
            <version>0.2.7</version>
        </dependency>
    </dependencies>
  • 8.2 code sample
import com.aliyun.hitsdb.client.TSDB;
import com.aliyun.hitsdb.client.TSDBClientFactory;
import com.aliyun.hitsdb.client.TSDBConfig;
import com.aliyun.hitsdb.client.value.request.LastPointQuery;
import com.aliyun.hitsdb.client.value.request.LastPointSubQuery;
import com.aliyun.hitsdb.client.value.response.LastDataValue;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class demo1 {

    public static void main(String[] args) {

        //实例详情页面中的连接地址、端口
        String connectString = "************.hitsdb.rds.aliyuncs.com";
        int port = 3242;
        //实例详情页面中的时序数据存储用户名、密码
        String username = "iot*****";
        String password = "********";
        TSDBConfig config = TSDBConfig.address(connectString, port)
                .basicAuth(username, password)
                // 网络连接池大小,默认为64。
                .httpConnectionPool(64)
                // HTTP 等待时间,单位为秒,默认为90秒。
                .httpConnectTimeout(90)
                // IO 线程数,默认为1。
                .ioThreadCount(1)
                .config();

        TSDB tsdbClient = TSDBClientFactory.connect(config);
        //按标签筛选数据
        Map<String, String> tags = new HashMap<>();
        tags.put("deviceName","device1");
        String metric = "detectDistance";
        long now = System.currentTimeMillis();
        LastPointQuery query = LastPointQuery.builder()
                .timestamp(now)
                .backScan(-1)
                .msResolution(true)
                .sub(LastPointSubQuery.builder(metric, tags).build()).build();
        List<LastDataValue> lastDataValues = tsdbClient.queryLast(query);

        System.out.println(lastDataValues);
    }
}
  • 8.3 result
[LastDPValue [metric=detectDistance, timestamp=1594622426000, value=13.0, tags={deviceName=device1}, tsuid=0C000000000002000003000000000098]]

更多参考

实例管理
基于开源JAVA MQTT Client连接阿里云IoT
阿里云物联网平台博客综述

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
14天前
|
弹性计算 大数据 数据处理
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
阿里云服务器的实例规格从级别上来说分为入门级和企业级,从实例规格种类上来说,又分为突发性能型、共享型、计算型、通用型、内存型、大数据型等,2024年截止目前在阿里云的活动中,可选的云服务器实例规格有轻量应用服务器、经济型e、通用算力型u1、计算型c7、计算型c7a、计算型c8a、计算型c8y、通用型g7、通用型g7a、通用型g8a、通用型g8i、通用型g8y、内存型r7、内存型r8y等,有的新手用户不是很清楚2024年阿里云活动中的云服务器实例哪些属于入门级,哪些是企业级?有何区别?下面根据官方的各种资料介绍为大家解答下这些疑问,帮助您能更清楚地了解阿里云服务器,快速找到自己对云服务器产品的需
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
|
1天前
|
运维 云计算
阿里云实例体验分享
分享下这一周使用以来的亲身感受吧!
|
3天前
|
编解码 缓存 安全
阿里云目前活动内各云服务器实例规格适用场景与价格参考
目前阿里云的活动中,云服务器有多种不同实例规格可选,实例规格定义了实例的基本属性:CPU和内存(包括CPU型号、主频等),但是不同实例规格所适用的场景是不一样的,价格也有很大差别,有的用户初次选购阿里云服务器可能并不知道这些实例规格的具体适用场景,下面是小编整理汇总的2024年截止目前阿里云的活动中云服务器实例规格适用场景与活动价格,以供参考。
阿里云目前活动内各云服务器实例规格适用场景与价格参考
|
11天前
|
存储 弹性计算 运维
深度解读:阿里云服务器ECS经济型e实例配置整理和性能参数表
阿里云推出经济型ECS e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,2核2G3M配置只需99元/年,新老用户不限量购买且续费不涨价。提供相同可用性SLA和安全标准,具备ESSD Entry云盘等企业级特性。适合中小型网站、开发测试和轻量级应用
|
12天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例特点、适用场景和使用常见问题解答
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列基于Intel Xeon Platinum处理器,提供1:1、1:2、1:4内存比选项,性价比高,不限购,续费不涨价。2核2G3M配置只需99元/年,企业用户2核4G5M服务器199元/年。具备价格优惠、品质保障、充足供应和多样化配置等特点。支持IPv4/IPv6,仅限专有网络VPC。实例规格和性能指标详表见原文,适合中小型网站、开发测试和轻量级应用。更多信息访问阿里云ECS页面。
|
12天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
40 4
|
12天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,不限购,续费不涨价。2核2G3M配置仅需99元/年,企业用户2核4G5M服务器199元/年。具备价格优势、品质保障和充足供应,但性能可能不及企业级实例。支持IPv4/IPv6,仅限专有网络VPC。更多规格和性能指标可见官方文档。
阿里云服务器ECS经济型e实例详细介绍
|
12天前
|
消息中间件 运维 Serverless
Serverless 应用引擎产品使用之在阿里云函数计算FC中,函数的执行时间是根据实例的存活时间进行计算如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
30 0
|
12天前
|
关系型数据库 Serverless 异构计算
Serverless 应用引擎产品使用之在阿里云函数计算中使用包含GPU的实例并且镜像超过10GB了如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
32 0
|
14天前
|
运维 云计算 开发者
阿里云实例体验分享
阿里云开发者计划中使用高校身份申请了阿里云服务器,目前已经使用超过一周了。分享下这一周使用以来的亲身感受吧!

相关产品

  • 物联网平台