天天看點

阿裡雲物聯網平台獨享執行個體使用Quick Start

Step By Step

1、建立執行個體

阿裡雲物聯網平台獨享執行個體使用Quick Start
注意:整個執行個體的完整初始化大概需要10分鐘左右。

2、切換執行個體(從共享執行個體切花到獨享執行個體)

阿裡雲物聯網平台獨享執行個體使用Quick Start

3、獨享執行個體下面建立産品和裝置(與共享執行個體操作方法一緻)

阿裡雲物聯網平台獨享執行個體使用Quick Start

4、擷取連接配接參數

阿裡雲物聯網平台獨享執行個體使用Quick Start
阿裡雲物聯網平台獨享執行個體使用Quick Start
阿裡雲物聯網平台獨享執行個體使用Quick Start

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、

資料轉發到執行個體内的時序資料存儲
阿裡雲物聯網平台獨享執行個體使用Quick Start

7、裝置上行消息,查詢運作日志

可以基于日志,快速進行常見問題的排查定位。
阿裡雲物聯網平台獨享執行個體使用Quick Start

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]]           

更多參考

執行個體管理 阿裡雲物聯網平台部落格綜述