物模型通信
1. 属性上报
属性上报函数:thingPropertyPost()
,传入参数propData
为要上报的属性内容,propData
为符合key-value
形式的map
类型,其中key
为属性标识符,value
为属性值
属性上报结果类:PostResult
,包含属性:success
,msgId
:
属性名称 | 属性类型 | 是否必填 | 描述 |
---|---|---|---|
success | bool |
是 | 上报结果,true 为成功,false 为失败 |
msgId | string |
是 | 上报消息的msgId ,用于标识上报消息,用于与回调函数传入的上报结果进行匹配,msgId 由SDK生成 |
属性上报回调函数:onThingPropertyPost()
,传入参数msgId
,code
,data
,msg
:
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
msgId | string |
是 | 服务器响应消息的msgId ,用于与SDK上报消息进行匹配 |
code | int |
是 | 服务器响应消息的code ,用于标识上报结果,200 为成功,其他为失败 |
data | object |
否 | 服务器响应的数据 |
message | string |
是 | 服务器响应消息的msg ,用于标识上报结果,success 为成功,其他为失败 |
示例代码:
//属性消息发送到服务端,服务端响应消息处理函数
OnThingPropertyPost onThingPropertyPost = (String msgId, int code, Object data, String msg) ->{
//todo 自定义处理逻辑
if (SUCCESS_CODE.equals(code)) {
log.info("消息发送成功并正常响应");
} else {
log.info("消息发送成功响应错误:{}", msg);
}
};
//绑定到工具
linkKit.setOnThingPropertyPost(onThingPropertyPost);
2. 事件上报
事件上报函数:thingEventPost()
,传入参数identifier
为要上报的事件标识符,outputData
为要上报的事件内容,outputData
为符合key-value
形式的map
类型,其中key
为事件输出参数标识符,value
为事件输出参数值
事件上报结果类:PostResult
,包含属性:success
,msgId
:
属性名称 | 属性类型 | 是否必填 | 描述 |
---|---|---|---|
success | bool |
是 | 上报结果,true 为成功,false 为失败 |
msgId | string |
是 | 上报消息的msgId ,用于标识上报消息,用于与上报结果进行匹配,msgId 由SDK生成 |
事件上报回调函数:onThingEventPost()
,传入参数msgId
,code
,data
,msg
:
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
msgId | string |
是 | 服务器响应消息的msgId ,用于与SDK上报消息进行匹配 |
code | int |
是 | 服务器响应消息的code ,用于标识上报结果,200 为成功,其他为失败 |
data | object |
否 | 服务器响应的数据 |
message | string |
是 | 服务器响应消息的msg ,用于标识上报结果,success 为成功,其他为失败 |
示例代码:
//事件消息发送到服务端响应消息处理函数
OnThingEventPost onThingEventPost = (String msgId, int code, Object data, String msg) -> {
//todo 自定义处理逻辑
if (SUCCESS_CODE.equals(code)) {
log.info("消息发送成功并正常响应");
} else {
log.info("消息发送成功响应错误:{}", msg);
}
};
linkKit.setOnThingEventPost(onThingEventPost);
3. 监听云端属性设置
属性设置监听回调函数:onThingPropertySet
,在监听到属性下发时,会触发该回调函数,传入参数msgId
为本次下发的消息ID,propData
为本次下发的属性内容,propData
为符合key-value
形式的map
类型,其中key
为属性标识符,value
为属性值
属性设置监听回调函数结果类:ThingPropertySetResult
,包含属性:success
,code
,message
:
属性名称 | 属性类型 | 是否必填 | 描述 |
---|---|---|---|
success | bool |
是 | 上报结果,true 为成功,false 为失败 |
code | int |
是 | 响应给服务器的code ,用于标识上报结果,200 为成功,其他为失败 |
message | string |
是 | 响应给服务器的msg ,用于标识上报结果,success 为成功,其他为失败 |
示例代码:
//收到属性设置消息处理函数
OnThingPropertySet onThingPropertySet = (String msgId, Map<String, Object> propData) ->{
//todo 自定义处理逻辑,并返回ThingPropertySetResult对象
return ThingPropertySetResult.successThingPropertySetResult();
};
//成功返回
public static ThingServiceCallResult successThingPropertySetResult(Map<String, Map<String, Object>> outputData) {
ThingServiceCallResult thingPropertySetResult = new ThingServiceCallResult();
thingPropertySetResult.setCode(SUCCESS_CODE);
thingPropertySetResult.setMessage(SUCCESS);
thingPropertySetResult.setData(outputData);
return thingPropertySetResult;
}
linkKit.setOnThingPropertySet(onThingPropertySet);
4. 监听云端服务调用
服务调用监听回调函数:onThingServiceCall
,在监听到服务调用时,会触发该回调函数,传入参数msgId
为本次服务调用的消息ID,identifier
为本次服务调用的标识符,inputData
为本次服务调用的输入参数,inputData
为符合key-value
形式的map
类型,其中key
为输入参数标识符,value
为输入参数值
服务调用监听回调函数结果类:ThingServiceCallResult
,包含属性:success
,code
,message
,outputData
:
属性名称 | 属性类型 | 是否必填 | 描述 |
---|---|---|---|
success | bool |
是 | 上报结果,true 为成功,false 为失败 |
code | int |
是 | 响应给服务器的code ,用于标识上报结果,200 为成功,其他为失败 |
message | string |
是 | 响应给服务器的msg ,用于标识上报结果,success 为成功,其他为失败 |
outputData | object |
否 | 响应给服务器的数据 |
示例代码:
//收到服务下发处理函数
OnThingServiceCall onThingServiceCall =
(String msgId, String identifier, Map<String, Object> inputData) -> {
//todo 自定义处理逻辑,并返回ThingServiceCallResult对象
Map<String, Map<String, Object>> map = new HashMap<>(4);
map.put("params", MapBuilder.builder().put("service_output_test", 2).build());
return ThingServiceCallResult.successThingServiceCallResult(map);
};
//成功返回
public static ThingServiceCallResult successThingServiceCallResult(Map<String, Map<String, Object>> outputData) {
ThingServiceCallResult thingPropertySetResult = new ThingServiceCallResult();
thingPropertySetResult.setCode(SUCCESS_CODE);
thingPropertySetResult.setMessage(SUCCESS);
thingPropertySetResult.setData(outputData);
return thingPropertySetResult;
}
//绑定到工具
linkKit.setOnThingServiceCall(onThingServiceCall);
完整demo:
package io.github.dasrd.iot.link.sdk.demo;
import io.github.dasrd.iot.link.sdk.client.*;
import io.github.dasrd.iot.link.sdk.request.PostResult;
import io.github.dasrd.iot.link.sdk.request.ThingPropertySetResult;
import io.github.dasrd.iot.link.sdk.request.ThingServiceCallResult;
import io.github.dasrd.iot.link.sdk.utils.MapBuilder;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
import static io.github.dasrd.iot.link.sdk.constants.Constants.SUCCESS_CODE;
/**
* LinkKitDemo
* linkKit可以看使用程序模拟设备
*/
@Slf4j
public class LinkKitDemo {
/**
* 设备id
*/
private static final String IOT_DEVICE_ID = "56ghjyj";
/**
* 产品id
*/
private static final String IOT_PRODUCT_ID = "7Xr3CCAN32Ske7Q8ZONfdSprR";
/**
* 设备秘钥
*/
private static final String IOT_DEVICE_SECRET = "R5twi11141661627673604097";
/**
* mqtt host
*/
private static final String MQTT_HOST = "192.168.100.101";
/**
* port
*/
private static final String MQTT_PORT = "30247";
/**
* 客户端id
*/
private static final String CLIENT_ID = "123";
public static void main(String[] args) {
LinkKit linkKit = new LinkKit(new LinkKitInitParams(IOT_PRODUCT_ID, IOT_DEVICE_ID, IOT_DEVICE_SECRET, MQTT_HOST, MQTT_PORT, CLIENT_ID));
//初始化mqtt链接
if (linkKit.init() != 0) {
return;
}
//属性消息发送到服务端,服务端响应消息处理函数
OnThingPropertyPost onThingPropertyPost = (String msgId, int code, Object data, String msg) -> {
//todo 自定义处理逻辑
if (SUCCESS_CODE.equals(code)) {
log.info("消息发送成功并正常响应");
} else {
log.info("消息发送成功响应错误:{}", msg);
}
};
//事件消息发送到服务端响应消息处理函数
OnThingEventPost onThingEventPost = (String msgId, int code, Object data, String msg) -> {
//todo 自定义处理逻辑
if (SUCCESS_CODE.equals(code)) {
log.info("消息发送成功并正常响应");
} else {
log.info("消息发送成功响应错误:{}", msg);
}
};
//收到属性设置消息处理函数
OnThingPropertySet onThingPropertySet = (String msgId, Map<String, Object> propData) -> {
//todo 自定义处理逻辑,并返回ThingPropertySetResult对象
return ThingPropertySetResult.successThingServiceCallResult();
};
//收到服务下发处理函数
OnThingServiceCall onThingServiceCall = (String msgId, String identifier, Map<String, Object> inputData) -> {
//todo 自定义处理逻辑,并返回ThingServiceCallResult对象
Map<String, Map<String, Object>> map = new HashMap<>(4);
map.put("params", MapBuilder.builder().put("service_output_test", 2).build());
return ThingServiceCallResult.successThingServiceCallResult(map);
};
//绑定到工具
linkKit.setOnThingPropertyPost(onThingPropertyPost);
linkKit.setOnThingEventPost(onThingEventPost);
linkKit.setOnThingPropertySet(onThingPropertySet);
linkKit.setOnThingServiceCall(onThingServiceCall);
//上报属性
PostResult postResult = linkKit.thingPropertyPost(MapBuilder.builder().put("power").putS("value", 1).putS("time", System.currentTimeMillis()).build());
//上报事件
linkKit.thingEventPost(MapBuilder.builder().put("value").putS("event_input_1", 1).build(), "event_test");
}
}