如何解析LoRaWAN设备数据及开源MQTT SDK设备端模拟
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这期内容当中小编将会给大家带来有关如何解析LoRaWAN设备数据及开源MQTT SDK设备端模拟,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述LoRaWAN设备
千家信息网最后更新 2026年10月31日如何解析LoRaWAN设备数据及开源MQTT SDK设备端模拟
这期内容当中小编将会给大家带来有关如何解析LoRaWAN设备数据及开源MQTT SDK设备端模拟,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
概述
LoRaWAN设备与物联网平台的通信数据格式为透传/自定义,因此需要使用数据解析脚本,解析上下行数据。本文主要以阿里云官方文档LoRaWAN设备数据解析为基础,基于开源MQTT SDK,实现完整的: 设备<->云端消息链路测试。
操作步骤
前期准备
1、创建产品,因为这边没有入网凭证,使用WiFi联网方式,数据格式:透传/自定义:
cdn.com/597e368e382cffc50012a9ecfd3e0a0db2deb00c.png">
2、添加物模型,可以直接参考官方文档说明逐个添加,这里提供对应物模型的完整文本,可以copy内容到本地自己创建的:model.json文件,然后物联网平台管理控制台直接导入:
{ "schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json", "profile":{ "productKey":"********">3、添加脚本并测试,脚本使用官方附录:示例脚本即可,测试正常后注意点击提交。
虚拟设备调试
5、在线发送
7、二进制数据Base64编码(对应截图中使用的AAEC的计算方法)
import sun.misc.BASE64Encoder;import java.io.IOException;public class ByteToBase64 { public static void main(String[] args) throws IOException { String data = "000102"; // 待转换的十六进制数据对应的字符串 byte[] bytes = hexToByteArray(data); String base64Str = getBase64String(bytes); System.out.println("base64Str: ">设备端开源MQTT SDK接入
8、设备端代码
import com.alibaba.taro.AliyunIoTSignUtil;import org.eclipse.paho.client.mqttv3.*;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import sun.misc.BASE64Encoder;import java.io.IOException;import java.util.HashMap;import java.util.Map;// 透传类设备测试public class IoTDemoPubSubDemo { public static String productKey = "********"; public static String deviceName = "device2"; public static String deviceSecret = "*********"; public static String regionId = "cn-shanghai"; // 物模型-属性上报topic private static String pubTopic = "/sys/" + productKey + "/" + deviceName + "/thing/model/up_raw"; // 物模型-订阅属性Topic private static String subTopic = "/sys/" + productKey + "/" + deviceName + "/thing/model/down_raw"; private static MqttClient mqttClient; public static void main(String [] args){ initAliyunIoTClient(); // 初始化Client// ScheduledExecutorService scheduledThreadPool = new ScheduledThreadPoolExecutor(1,// new ThreadFactoryBuilder().setNameFormat("thread-runner-%d").build());//// scheduledThreadPool.scheduleAtFixedRate(()->postDeviceProperties(), 10,10, TimeUnit.SECONDS); // 汇报属性 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("16进制形式输出:"); System.out.println(bytes2hex(mqttMessage.getPayload())); System.out.println("10进制形式输出:"); byte[] bytes = mqttMessage.getPayload(); for (byte t:bytes) { System.out.print(t + " "); } } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { } }); } /** * 初始化 Client 对象 */ private static void initAliyunIoTClient() { try { // 构造连接需要的参数 String clientId = "java" + System.currentTimeMillis(); Map 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.setCleanSession(true); connOpts.setUserName(mqttUsername); connOpts.setPassword(mqttPassword.toCharArray()); connOpts.setKeepAliveInterval(60); mqttClient.connect(connOpts); } /** * 汇报属性 */ private static void postDeviceProperties() { try { //上报数据 //高级版 物模型-属性上报payload System.out.println("上报属性值"); String hexString = "000111"; byte[] payLoad = hexToByteArray(hexString); MqttMessage message = new MqttMessage(payLoad); message.setQos(0); mqttClient.publish(pubTopic, message); } catch (Exception e) { System.out.println(e.getMessage()); } } // 十进制byte[] 转16进制 String public static String bytes2hex(byte[] bytes) { StringBuilder sb = new StringBuilder(); String tmp = null; for (byte b : bytes) { // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制 tmp = Integer.toHexString(0xFF & b); if (tmp.length() == 1) { tmp = "0" + tmp; } sb.append(tmp); } return sb.toString(); } /** * hex字符串转byte数组 * @param inHex 待转换的Hex字符串 * @return 转换后的byte数组结果 */ public static byte[] hexToByteArray(String inHex){ int hexlen = inHex.length(); byte[] result; if (hexlen % 2 == 1){ //奇数 hexlen++; result = new byte[(hexlen/2)]; inHex="0"+inHex; }else { //偶数 result = new byte[(hexlen/2)]; } int j=0; for (int i = 0; i < hexlen; i+=2){ result[j]=hexToByte(inHex.substring(i,i+2)); j++; } return result; } /** * Hex字符串转byte * @param inHex 待转换的Hex字符串 * @return 转换后的byte */ public static byte hexToByte(String inHex) { return (byte) Integer.parseInt(inHex, 16); }} 9、设备运行状态
10、在线调试服务调用
{ "MaxTemp": 50, "MinTemp": 8, "MaxHumi": 90, "MinHumi": 10}11、设备端下行消息监听
上报属性值Sub messageTopic : /sys/********/device2/thing/model/down_raw16进制形式输出:5d0a000332085a0a10进制形式输出:93 10 0 3 50 8 90 10
12、数据脚本解析
上述就是小编为大家分享的如何解析LoRaWAN设备数据及开源MQTT SDK设备端模拟了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
设备
数据
属性
进制
字符
字符串
模型
脚本
形式
测试
输出
内容
官方
订阅
平台
数组
文档
格式
消息
分析
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技名片
重生之互联网科技帝国
互联网科技巨头监管
互联网中国科技
远信互联网科技
奇酷互联网科技公司
易通互联网络科技有限公司
奔汉互联网科技
恒生科技互联网指数分析
华脉科技工业互联网产品
安控科技rtu产品工业互联网
南山科技园互联网公司有哪些
科技大学互联网
为客找房互联网科技公司怎么样
广州千川互联网科技有限公司
珠海东科互联网科技有限公司
全球科技与互联网公司市值变化
国产互联网科技公司
同城互联网络科技
广东猫王互联网科技有限公司电话
互联网科技活动banner
互联网科技公司的优势
互联网科技保险
上海喔噻互联网科技
华脉科技工业互联网产品
宁夏科技产业互联网案例
沐思想互联网科技有限公司
互联网科技手抄报图片
数字互联网科技有限公司
科技互联网专业务虚会材料