1.资料
基本流程:
1.在云平台创建产品和设备;
2.设备通过MQTT连接,改变数据值,获取应用下发的命令;
3.应用端直接通过API下发命令,获取数据;
API调试:https://open.iot.10086.cn/console/monitor/apiDebug
文档中心:https://iot.10086.cn/doc/aiot/fuse/
2.新建产品

3.新建设备

4.设备端连接
4.1.时间戳转换
1.百度搜索时间戳转换
2.输入到期时间

4.2.token计算
4.2.1.下载官方工具
https://iot.10086.cn/doc/aiot/fuse/detail/1487

4.2.2.计算时间戳

4.2.3.生成token,填入密码

4.3.连接MQTT

4.4.订阅和发布
4.4.1.找到发布订阅格式


4.4.2.替换数据
{device-name}用设备名称替换
{cmdId}是应用端下发时带的,这里订阅的时候写#或者+就行,发布的时候从收到的消息里面获取
4.5.网页查看数据

5.应用端
5.1.id和Accesskey获取
id获取方法:头像 ----> 账号中心 ---> 个人信息 ---> 导出 ---> 查看DMP用户ID的值
Accesskey获取方法:头像 ---> 访问权限 ---> AccessKey ---> 查看
5.2.token计算代码
token计算代码,替换 resourceName 和 accessKey 的值即可
java
package com.chen.onenetapp;
import android.os.Build;
import androidx.annotation.RequiresApi;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class OnenetToken {
@RequiresApi(api = Build.VERSION_CODES.O)
public static String assembleToken(String version, String resourceName, String expirationTime, String signatureMethod, String accessKey)
throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
StringBuilder sb = new StringBuilder();
String res = URLEncoder.encode(resourceName, "UTF-8");
String sig = URLEncoder.encode(generatorSignature(version, resourceName, expirationTime, accessKey, signatureMethod), "UTF-8");
sb.append("version=")
.append(version)
.append("&res=")
.append(res)
.append("&et=")
.append(expirationTime)
.append("&method=")
.append(signatureMethod)
.append("&sign=")
.append(sig);
return sb.toString();
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static String generatorSignature(String version, String resourceName, String expirationTime, String accessKey, String signatureMethod)
throws NoSuchAlgorithmException, InvalidKeyException {
String encryptText = expirationTime + "\n" + signatureMethod + "\n" + resourceName + "\n" + version;
String signature;
byte[] bytes = HmacEncrypt(encryptText, accessKey, signatureMethod);
signature = Base64.getEncoder().encodeToString(bytes);
return signature;
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static byte[] HmacEncrypt(String data, String key, String signatureMethod)
throws NoSuchAlgorithmException, InvalidKeyException {
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKeySpec signinKey = null;
signinKey = new SecretKeySpec(Base64.getDecoder().decode(key),
"Hmac" + signatureMethod.toUpperCase());
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = null;
mac = Mac.getInstance("Hmac" + signatureMethod.toUpperCase());
//用给定密钥初始化 Mac 对象
mac.init(signinKey);
//完成 Mac 操作
return mac.doFinal(data.getBytes());
}
public enum SignatureMethod {
SHA1, MD5, SHA256;
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static String token() throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
String version = "2020-05-29";
String resourceName = "userid/DMP用户ID";//这里写你的用户id
String expirationTime = System.currentTimeMillis() / 1000 + 100 * 24 * 60 * 60 + "";
String signatureMethod = SignatureMethod.SHA1.name().toLowerCase();
//这个也是换成自己的Accesskey
String accessKey = "AccessKey";//这里放你的AccessKey(在Onenet官网的账户信息里面)
String token = assembleToken(version, resourceName, expirationTime, signatureMethod, accessKey);
System.out.println("Authorization:" + token);
return token;
}
}
5.3.查询数据点
API调试:https://open.iot.10086.cn/console/monitor/apiDebug
在api调试中填这3个即可,这里能调通,参照API文档写代码就没问题

5.4.命令下发
在api调试中填这4个即可,这里能调通,参照API文档写代码就没问题
