新版onenet云平台数据流对接,包括设备端MQTT和应用端API

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计算代码,替换 resourceNameaccessKey 的值即可

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文档写代码就没问题

相关推荐
调试优选官14 小时前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
千里马学框架14 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台14 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone14 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc15 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
华允物联-HUAIOT16 小时前
工业路由器和DTU在联网方式上的区别
物联网
wuyk55516 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
码流子16 小时前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
ttyyttemo17 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770017 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android