本帖最后由 孤胆枪手_A 于 2018-12-17 02:37 编辑
从https://github.com/TiJOSApp/tijos-mqtt-onenet-iot下载下来参看我上一篇帖子修改一下错误,然后去onenet平台创建一个设备
在代码中修改设备id、产品id、APIKey
然后再创建两个数据流模板
注意数据流的名称需要与后面json数据的名相同,因为上传上去的json数据是对应数据流的
- JSONObject json = new JSONObject();
复制代码 注意,重点来了,
修改topic 为 $dp
然后参看OneNET的平台的MQTT文档,我这里使用type3的数据上报格式,如下
设备使用publish报文来上传数据点, 报文格式如下:
VariableHeader:
Payload: Payload包含真正的数据点内容,支持的格式如下:
数据类型3(type == 3)格式说明: Byte 1 | 数据点类型指示:type=3 // JSON格式2字符串 | | | | | | | | | | //指示后面字符串长度 固定两字节长度高位字节,值为0x00 | | | | | | | | | | | | | | | | | | | | 通用格式: { “datastream_id1”:”value1”, “datastream_id2”:”value2”, … } 示例: {“temperature”:22.5,”humidity”:”95.2%”} | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 看到Payload不仅仅是json字符串的byte数组,还有3byte的固定指定内容,为了方便,我写了一个简单的方法来封装这一段数据
- /**
- * 构建数据上报类型3的byte数组
- * @param jsonString json字符串
- * @return 构建成功的byte数组
- */
- public static byte[] type3Bytes(String jsonString) {
- int length = jsonString.length();
- byte[] payload3 = new byte[length + 3];
- payload3[0] = 0x03;
- payload3[1] = (byte) (length >> 8);
- payload3[2] = (byte) (length);
- byte[] jsonBytes = jsonString.getBytes();
- for (int i = 0; i < length; i++) {
- payload3[3 + i] = jsonBytes[i];
- }
- return payload3;
- }
复制代码 只需要传入json字符串即可输出符合OneNET规定的byte数据。publish的时候只需要这样就可以了。
- mqttClient.publish(topic, OneNETUtil.type3Bytes(json.toString()), 0, true);
复制代码 按照https://open.iot.10086.cn/app_editor/docs/ 文档创建一个应用,就能看到自己上传的代码。
附上完整代码
demo4.zip
(1.95 KB, 下载次数: 7)
|