# LowanMqtt Java SDK使用说明

LowanIot 提供 LowanMqtt Java SDK,可帮助开发人员在使用罗万智联平台时实现设备完整的通信链接。

设备通过罗万智联平台上下行通信说明如下:

通信链路 说明
上行通信 设备通过MQTT协议与罗万智联平台建立长连接,上报数据(通过subscribe订阅Topic)到罗万智联平台。
下行指令 罗万智联平台通过MQTT协议,使用publish发送数据(指定Topic和Payload)到设备端。

# 1.安装SDK

  1. 安装Java开发环境
    访问Java官方网站 (opens new window),按照说明安装Java开发环境。
  2. 安装LowanIot 提供 LowanMqtt Java SDK
    LowanIot提供lowan-lib-mqttjar包,添加到项目本地依赖。

# 2.LowanMqtt 初始化

需要通过MqttConnnOpts类中所提供的静态方法setParams(),入参初始化信息。

// mqtt init
MqttConnOpts.setParams(MQTT_BROKER,MQTT_USER,MQTT_PASSWORD);
参数 说明 示例
MQTT_BROKER mqtt连接地址 tcp://mqtt.lowaniot.com:1883
MQTT_USER mqtt连接用户名 例:testmq(可通过罗万智联平台获取)
MQTT_PASSWORD mqtt连接密码 例:123456(可通过罗万智联平台获取)

提示

LowanMqtt 初始化是必须的,无论你是推送消息还是订阅消息。

# 3.LowanMqtt 推送消息

需要通过MqttPublisherPool类中提供的静态方法publish(),入参推送主题和推送数据。

// 发布示例:
MqttPublisherPool.publish(topic, data);
参数 说明 示例
topic 推送主题([topic]) 格式:罗万智联平台暂不支持接收数据
data 推送数据 推送数据建议使用标准json格式

推送示例:

import com.lowan.lib.mqtt.MqttConnOpts;
import com.lowan.lib.mqtt.MqttPublisherPool;

/**
 * 功能描述:推送Mqtt数据包实例代码
 */
public class PublishExample {
    // broker
    private static final String MQTT_BROKER = "tcp://mqtt.lowaniot.com:1883";
    // username: 可通过罗万智联平台获取
    private static final String MQTT_USER = "${username}";
    // password: 可通过罗万智联平台获取
    private static final String MQTT_PASSWORD = "${password}";
    /** topic: 格式:罗万智联平台暂不支持接收数据 */
    private static final String TOPIC = "topic";
    /** data: 推送数据建议使用标准json格式 */
    private static final String DATA = "{}";

	public static void main(String[] args) {
         // mqtt init
		MqttConnOpts.setParams(MQTT_BROKER,MQTT_USER,MQTT_PASSWORD);
        // mqtt publish
		if (MqttPublisherPool.publish(TOPIC, DATA)) {
			System.out.println("Send data success:" + DATA);
		} else {
			while (!MqttPublisherPool.publish(TOPIC, DATA)) {
				System.out.println("ReSend data faild:" + DATA);
			}
			System.out.println("ReSend data success:" + DATA);
		}
	}

}

# 4.LowanMqtt 订阅消息

需要实现接口LowanMqttCallback中抽象方法onMessageArrived,然后可通过接口LowanMqttCallback的实现类和订阅主题得到LowanMqttClient的实例,以此来进行LowanMqttClient的操作。

// 订阅示例:
new LowanMqttClient(topic, (topic, payload) -> {
	// onMessageArrived的实现
	System.out.println(String.format("Rev Success ->: Topic: %s, Payload: %s", topic, new String(payload)));
}).run();
参数 说明 示例
topic 订阅主题,通过罗万智联平台获取 格式:/lowaniot/租户编码/应用ID/产品编码
/lowaniot/${tenandCode}/${appid}/${productCode}
payload 返回的数据信息,协使用标准的JSON结构,读取时反序列化为结构体即可访问成员 示例: { "deviceId": "tx7o4ls2dc", "timestamp": 1638325609198, "messageType": "PROPERTIES", "devAddr": "","messageId":"62eb2255ef2535635b0882d4", "data": { "temperature": 21.6, "humidity": 62.5, "dataItems": {} }}

注:payload协议数据字段说明

字段名称 字段说明 备注
devAddr 字符串类型 设备地址
deviceId 字符串类型 设备编号
messageId 字符串类型 消息ID
messageType 字符串类型 消息类型
timestamp 整数类型 消息产生的时间,单位毫秒
data 字符串类型 消息体,标准的JSON结构

提示

不同的messageType对应的data是不同的,可参照罗万智联平台物模型;

应用开发->设备管理->查看->物模型

data与messageType对照表

messageType data 含义
SHADOW_BROKER_HEART { "runUpTime": "1638325609198" } 协议解析模块心跳上报
DEV_STATE { "state": "online" } 设备在离线上报
UPGRADE_PROCESS { "progress": 50, "complete": false, "version": "000.9 2021-12-17", "errorReason": "固件损坏", "msg": "" } 升级进度上报
DIRECT { "rawData": "7b226461746574696d65223a307d", "hint": "" } 数据透传
PROPERTIES { "temperature": 21.6, "humidity": 62.5, "dataItems": {} } 属性上报-以温湿度传感器为例
EVENTS { "overtemperature": { "temperature": 65 } } 事件上报-以温湿度传感器为例
FUNCTIONS { "thresholdConfiguration": { "params": { "overtemperature": 48.6, "overhumidity": 23 }, "response": { "success": "true" } } } 功能执行-以温湿度传感器为例

订阅示例:

import com.lowan.lib.mqtt.LowanMqttClient;
import com.lowan.lib.mqtt.MqttConnOpts;
/**
 * 功能描述:接收上行数据包实例代码
 */
public class RevExampleNew {
    // broker
    private static final String MQTT_BROKER = "tcp://mqtt.lowaniot.com:1883";
    // username: 可通过罗万智联平台获取
    private static final String MQTT_USER = "${username}";
    // password: 可通过罗万智联平台获取
    private static final String MQTT_PASSWORD = "${password}";
    /**
     * 订阅罗万智联平台设备信息
     * 格式:/lowaniot/租户编码/应用ID/产品编码
     */
    private static final String TOPIC = "/lowaniot/${tenandCode}/${appid}/${productCode}";

	public  static void main(String[] args) {
        // mqtt init
        MqttConnOpts.setParams(MQTT_BROKER, MQTT_USER, MQTT_PASSWORD);
	    // mqtt subscribe
        new Thread(new Runnable() {
    		@Override
    		public void run() {
		        new LowanMqttClient(TOPIC, (topic, payload) -> {
		        	System.out.println(String.format("Rev Success ->: Topic: %s, Payload: %s", topic, new String(payload)));
		        }).run();
    		}
    	}).start();
	}
}

# Java SDK Demo

Java SDK提供Demo,供您参考使用。单击查看Java SDK Demo (opens new window)