属性、服务、事件
设备可以使用物模型功能,实现属性上报(如上报设备状态)、事件上报(上报设备异常或错误)和服务调用(通过云端调用设备提供的服务)。
一.设备属性
- 设备属性上报
/**
* 发布属性消息到服务端,用于更新设备属性。
* 该函数为非阻塞式调用,因此一旦在消息队列中会理解返回。
* 因此该操作结果会通过{@link XIotMessage#onSuccess},
* {@link XIotMessage#onFailure}以及{@link XIotMessage#onTimeout}等回调接口进行回馈。
*
* @param attributeMsg 要发布的消息载体
* @param params 设备属性组装而成的HashParam结构参数
* @throws XIotException 操作失败抛出异常
*/
public String XIotMqttClient.getInstance().publishProperty(XIotMessage attributeMsg, HashParam params)
HashParam param = new HashParam();
param.putParam("Brightness",(int)(Math.random()*100));
XIotMqttClient.getInstance().publishProperty(new XIotMessage(),param);
二.设备事件
- 设备事件上报
/**
* 发布事件消息到服务端,用于设置事件操作。
* 该函数为非阻塞式调用,因此一旦在消息队列中会理解返回。
* 因此该操作结果会通过{@link XIotMessage#onSuccess},{@link XIotMessage#onFailure}以及
* {@link XIotMessage#onTimeout}等回调接口进行回馈。
*
* @param eventMsg 要发布的消息体
* @param params 事件消息附带参数
* @param eventName 定义的事件名称
* @throws XIotException 操作失败抛出异常
*/
public String XIotMqttClient.getInstance().publishEvent(XIotMessage eventMsg, HashParam params, String eventName) throws XIotException, JSONException
HashParam param = new HashParam();
param.putParam("Brightness",(int)(Math.random()*100));
XIotMqttClient.getInstance().publishEvent(new XIotMessage(), param, "testEvent");
三.客户端反馈属性消息
- 设备属性获取
/**
* 发布属性回馈消息到服务端,该接口在收到{@XIotTopicCallback#onPropertyRequest}
* 时,进行调用,根据该下行消息中带入的message中payload信息,针对指定属性值进行反馈。
* @param message 要发布的消息体
* 服务端向客户端请求获取设备属性状态信息时,客户端向服务端汇报的属性数据
* 以Demo为例,灯的属性有灯的开关状态(Property.PowerSwitch)、灯光颜色(Property.LightColorSwitch)、灯的亮度(Property.LightIntensitySeek)
* @param params 属性参数
* @throws XIotException 操作失败抛出异常
*/
@Override
public void XIotMqttClient.getInstance().publishProReqReply(XIotMessage message, HashParam params )
四.属性设置回应消息
/**
* 服务端设置属性后,发送属性设置消息,客户端接收后,立即发送回应消息。
* 该接口在收到{@XIotTopicCallback#onPropertySet}时,进行调用。
* @param message 要发布的消息体
* @throws XIotException 操作失败抛出异常
*/
@Override
public void XIotMqttClient.getInstance().publishProSetReply(XIotMessage message)
五.服务消息响应
/**
* 接收到服务端设置的服务消息后,客户端立即响应。
* 该接口在收到{@XIotTopicCallback#onServiceSet}时,进行调用。
*
* @param message 要发布的消息体
* @param params 服务消息参数
* @param identifer 服务名称,从{@XIotTopicCallback#onServiceSet}接口消息体中获取
* @throws XIotException 操作失败抛出异常
*/
@Override
public void XIotMqttClient.getInstance().publishServiceReply(XIotMessage message, HashParam params,String identifer)
代码示例
XiotPayload payload = new XiotPayload();
//解析message带入的payload信息中data中数据,获取需要上传的属性值
payload.comparseFormJson(new JSONObject(message.getStringPayload()));
String identifer = payload.getData().getIdentifer();
XIotMessage uploadMsg = new XIotMessage();
uploadMsg.setStringPayload(message.getStringPayload());
XIotMqttClient.getInstance().publishServiceReply(uploadMsg, null, identifer);
//如果需要回传参数
HashParam param = new HashParam();
param.putParam("key1", "value1");
param.putParam("key2", "value2");
XIotMqttClient.getInstance().publishServiceReply(uploadMsg, param, identifer);