阿里云物联网平台设备日志上报示例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、控制台:设备本地日志查看
参考链接
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一大波政策来袭,物联网人你们还在等什么!
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 4月23日,习近平总书记在陕西考察时,着重强调了推进5G、物联网、人工智能、工业互联网等新型基建投资: “我国经济稳中向好、长期向好的基本趋势没有改变。要坚定信心、保持定力,加快转变经济发展方式,把实体经济特别是制造业做实做强做优,推进5G、物联网、人工智能、工业互联网等新型基建投资,加大交通、水利、能源等领域投资力度,补齐农村基础设施和公共服务短板,着力解决发展不平衡不充分问题。要围绕产业链部署创新链、围绕创新链布局产业链,推动经济高质量发展迈出更大步伐。” 新基建的政策一经各省市区推出,热度就在国内迅速飙升。从媒体报道来看,几乎每一天都会有对新基建的解读和深挖。更多的投资人和企业在关心有哪些行业进入新基建的建设范畴,也就在习总书记点名的前不久,国家发改委明确了新基建的三个方面: 新基建的三个方面 信息基础设施:主要是指基于新一代信息技术演化生成的基础设施,比如,以5G、物联网、工业互联网、卫星互联网为代表的通信网络基础设施,以人工智能、云计算、区块链等为代表的新技术基础设施,以数据中...
- 下一篇
【云栖号案例 | 物联网&人工智能】言图科技上云 成功解决提供深度学习API调用问题
云栖号案例库:【点击查看更多上云案例】不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 公司介绍 言图科技总部位于武汉光谷,致力于人工智能领域的自然语言处理、图像处理基础算法、软件、平台与设备研发。目前,公司拥有成熟的自然语言处理基础软件集、语义理解工具集、知识图谱工具集、智能陪练机器人、聊天机器人、情感与专注度分析工具、无人机大数据分析服务器系统等多种产品,并被多家金融集团、大型国企、科研机构与政府机关采用。公司在积极开拓市场的同时,投入大量资金进行基础研究。 公司与华中科技大学计算机学院共同组建“华中科技大学计算机学院人工智能实验室”。 而且,团队成员在自然语言处理、知识图谱、视频分析、图像处理等方面取得了较为丰富的理论成果和技术积累,已在国内外权威杂志及会议上发表论文一百多篇,比如AAAI、SIGKDD、RTSS、CIKM、IEEE TKDE、IEEE TSMC-B、IEEE TC、ACM TWEB等。 业务痛点 线下的GPU服务器,成本特别高,而且非常不灵活。 没有使用过云GPU服务器,对服务器选型比较困惑。 对GPU、Tesla P100与...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6