阿里云物联网平台设备日志上报示例Demo

简介: 物联网平台支持设备将本地日志上报到云端,在控制台进行查询和故障分析。在设备详情页,开启设备本地日志上报开关后,设备才能将本地日志上报到云端。

概述

物联网平台支持设备将本地日志上报到云端,在控制台进行查询和故障分析。在设备详情页,开启设备本地日志上报开关后,设备才能将本地日志上报到云端。

Step By Step


一、设备获取日志配置(通过该功能,设备端可以主动获取:设备本地日志上报开关的开启情况)

_

数据上行
- 请求Topic:/sys/${productKey}/${deviceName}/thing/config/log/get
- 响应Topic:/sys/${productKey}/${deviceName}/thing/config/log/get_reply

1、设备端订阅:响应Topic
2、设备端publish如下格式消息到服务端:

{
    "id" : 123,
    "version":"1.0",
    "params" : {
        "configScope":"device",  
        "getType":"content"
     },
    "method":"thing.config.log.get"
}

3、设备端即可获取设备本地日志上报开关的开启情况(mode为0表示未开启,mode为1表示开启)

4、Code Sample,参考链接:基于开源JAVA MQTT Client连接阿里云IoT

import com.alibaba.taro.AliyunIoTSignUtil;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.HashMap;
import java.util.Map;

public class IoTDemoPubSubDemoSLSGetPro {

    // 设备三元组信息
    public static String productKey = "a1qLU******";
    public static String deviceName = "device1";
    public static String deviceSecret = "cA9wzIM6bL2QI6Dg****************";
    public static String regionId = "cn-shanghai";

    // 物模型-属性上报topic
    private static String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/config/log/get";
    // 自定义topic,在产品Topic列表位置定义
    private static String subTopic = "/sys/" + productKey + "/" + deviceName + "/thing/config/log/get_reply";

    private static MqttClient mqttClient;

    public static void main(String [] args){

        initAliyunIoTClient();

        postDeviceProperties();

        try {
            mqttClient.subscribe(subTopic); // 订阅Topic
        } catch (MqttException e) {
            System.out.println("error:" + e.getMessage());
            e.printStackTrace();
        }

        // 设置订阅监听
        mqttClient.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable throwable) {
                System.out.println("connection Lost");

            }

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

            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

            }
        });

    }

    /**
     * 初始化 Client 对象
     */
    private static void initAliyunIoTClient() {

        try {
            // 构造连接需要的参数
            String clientId = "java" + System.currentTimeMillis();
            Map<String, String> params = new HashMap<>(16);
            params.put("productKey", productKey);
            params.put("deviceName", deviceName);
            params.put("clientId", clientId);
            String timestamp = String.valueOf(System.currentTimeMillis());
            params.put("timestamp", timestamp);
            // cn-shanghai
            String targetServer = "tcp://" + productKey + ".iot-as-mqtt."+regionId+".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.setConnectionTimeout(10);
//        connOpts.setCleanSession(true);
        connOpts.setCleanSession(false);

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

        mqttClient.connect(connOpts);
    }

    /**
     * 汇报属性
     */
    private static void postDeviceProperties() {

        try {
            //上报数据
            //高级版 物模型-属性上报payload
            System.out.println("上报设备日志:");
            String payloadJson = "{\n" +
                    "    \"id\" : 123,\n" +
                    "    \"version\":\"1.0\",\n" +
                    "    \"params\" : {\n" +
                    "        \"configScope\":\"device\",  \n" +
                    "        \"getType\":\"content\"\n" +
                    "     },\n" +
                    "    \"method\":\"thing.config.log.get\"\n" +
                    "}";
            MqttMessage message = new MqttMessage(payloadJson.getBytes("utf-8"));
            message.setQos(1);
            mqttClient.publish(pubTopic, message);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

5、Result:

Sub message
Topic : /sys/a1qLU******/device1/thing/config/log/get_reply
{"code":200,"data":{"content":{"mode":1},"getType":"content"},"id":"123","method":"thing.config.log.get","version":"1.0"}

二、设备接收订阅云端推送日志配置
数据下行
- Topic:/sys/${productKey}/${deviceName}/thing/config/log/push

1、设备端订阅下行Topic;

private static String subTopicSLS = "/sys/" + productKey + "/" + deviceName + "/thing/config/log/push";
mqttClient.subscribe(subTopicSLS);

2、平台修改:设备本地日志上报 开关状态
_

3、设备端监听情况

Sub message
Topic : /sys/a1qLU******/device1/thing/config/log/push
{"method":"thing.config.log.push","id":"1174554406","params":{"getType":"content","content":{"mode":0}},"version":"1.0"}

三、设备上报日志内容(与常规的物模型属性上报类似)
数据上行
- 请求Topic:/sys/${productKey}/${deviceName}/thing/log/post
- 响应Topic:/sys/${productKey}/${deviceName}/thing/log/post_reply

1、向请求Topic上行消息,格式如下

{
    "id" : 123,
    "version":"1.0",
    "params" :[{
          "utcTime":  "2020-04-24T15:15:27.464+0800",  
          "logLevel": "ERROR",          
          "module": "ModuleA",         
          "code" :"",                       
          "traceContext": "123456",    
          "logContent" : "some log content" 
         }], 
    "method" : "thing.log.post"
}

2、Code Sample

    /**
     * 上报设备日志
     */
    private static void postDeviceProperties() {

        try {
            //上报数据
            //高级版 物模型-属性上报payload
            System.out.println("上报设备日志:");
            String payloadJson = "{\n" +
                    "    \"id\" : 123,\n" +
                    "    \"version\":\"1.0\",\n" +
                    "    \"params\" :[{\n" +
                    "          \"utcTime\":  \"2020-04-24T15:15:27.464+0800\",  \n" +
                    "          \"logLevel\": \"ERROR\",          \n" +
                    "          \"module\": \"ModuleA\",         \n" +
                    "          \"code\" :\"\",                       \n" +
                    "          \"traceContext\": \"123456\",    \n" +
                    "          \"logContent\" : \"some log content\" \n" +
                    "         }], \n" +
                    "    \"method\" : \"thing.log.post\"\n" +
                    "}";
            MqttMessage message = new MqttMessage(payloadJson.getBytes("utf-8"));
            message.setQos(1);
            mqttClient.publish(pubTopic, message);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

3、控制台:设备本地日志查看
_

参考链接

设备日志上报
设备本地日志
基于开源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
相关文章
|
21天前
|
存储 数据采集 监控
阿里云DTS踩坑经验分享系列|SLS同步至ClickHouse集群
作为强大的日志服务引擎,SLS 积累了用户海量的数据。为了实现数据的自由流通,DTS 开发了以 SLS 为源的数据同步插件。目前,该插件已经支持将数据从 SLS 同步到 ClickHouse。通过这条高效的同步链路,客户不仅能够利用 SLS 卓越的数据采集和处理能力,还能够充分发挥 ClickHouse 在数据分析和查询性能方面的优势,帮助企业显著提高数据查询速度,同时有效降低存储成本,从而在数据驱动决策和资源优化配置上取得更大成效。
119 9
|
2月前
|
SQL 存储 人工智能
阿里云日志服务的傻瓜式极易预测模型
预测服务有助于提前规划,减少资源消耗和成本。阿里云日志服务的AI预测服务简化了数学建模,仅需SQL操作即可预测未来指标,具备高准确性,并能处理远期预测。此外,通过ScheduledSQL功能,可将预测任务自动化,定时执行并保存结果。
93 3
|
4月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
3月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
254 3
|
1月前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
103 50
|
1月前
|
安全 物联网 物联网安全
制定统一的物联网技术标准和规范的难点有哪些?
制定统一的物联网技术标准和规范的难点有哪些?
59 2
|
1月前
|
供应链 物联网 区块链
探索未来技术潮流:区块链、物联网、虚拟现实的融合与创新
【10月更文挑战第41天】随着科技的不断进步,新技术如区块链、物联网、虚拟现实等正在逐步渗透到我们的日常生活中。本文将深入探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,共同推动社会的进步。我们将通过具体的代码示例,展示这些技术在实际应用中的潜力和价值。无论你是科技爱好者,还是对未来充满好奇的探索者,这篇文章都将为你打开一扇通往未来的窗口。
101 56
|
20天前
|
存储 安全 物联网
未来已来:区块链技术在物联网与虚拟现实中的应用
随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、安全和沉浸式的体验。
|
16天前
|
供应链 监控 数据可视化
物联网技术在物流与供应链管理中的应用与挑战
本文探讨了物联网技术在物流与供应链管理中的应用,通过实时追踪、信息共享、智能化决策等手段,大幅提升了管理效率和智能化水平。特别介绍了板栗看板作为专业可视化工具,在数据监控、分析及协同作业中的重要作用。未来,随着技术的进一步发展,物流与供应链管理将更加智能高效,但也面临数据安全、标准化等挑战。

热门文章

最新文章

相关产品

  • 物联网平台