Tuya IoTOS SDK Android 版

Tuya IoTOS SDK Andriod 版是基于 Tuya IoTOS 技术体系按照物联网设备应用场景进行裁剪、定制而得,适用于任意一款按照涂鸦平台导入规范进行适配导入的安卓平台(支持符合 API 19 及以上级别的安卓版本)。

版本记录

版本 修订说明 修订日期
1.0.7 发布稳定版 2020.6.19
1.0.4 创建文档 2020.5.19

概述

Tuya IoTOS 是涂鸦独创 IoT OS 操作系统级别的端云 SDK,提供了按照业务需求选择组件,定制 SDK 的能力,是涂鸦赋能开发者的利剑,具备轻量级、互联互通、安全传输、组件丰富、快速开发等关键能力,有效降低开发门槛、缩短开发周期,可广泛应用于智能屏幕设备、可穿戴设备、视频监控、中控网关、智能音箱、智能家电和智能门锁等智能家居设备。

Demo 使用方法

Demo 提供了获取激活码、激活设备、测试 DP点、展示状态日志等功能。 点击下载 Demo 安装包

注意: 配置 Demo 前请先配置 piduuidauthkey 参数 。

配置方式

根据 SDK 的安装方式提供不同的 Demo 配置方法。配置完成的界面如下。
结果.png

接入方法

依赖

添加实现。

implementation 'com.tuya.smart:tuyasmart-iot_sdk:1.0.7'
implementation 'com.tencent.mars:mars-xlog:1.2.3'

在项目根目录 build.gradle 中添加仓库地址。

maven { url 'https://maven-other.tuya.com/repository/maven-releases/'} maven { url 'https://maven-other.tuya.com/repository/maven-snapshots/'}

混淆

如果开启了混淆功能,在 proguard-rules.pro 文件中添加以下代码。

-keep class com.tuya.smartai.iot_sdk.** {*;}
-keep class com.tencent.mars.** {*;}

权限要求

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

初始化

IoTSDKManager ioTSDKManager = new IoTSDKManager(context); /** * 初始化SDK (注意:一个 UUID 不能同时在多个设备上激活) * @param basePath 存储路径 示例:"/sdcard/tuya_iot/" * @param productId 产品 ID * @param uuid 用户 ID * @param authKey 认证 Key * @param version 固件版本号(OTA用) * @param mCallback SDK 回调方法 * @return */ ioTSDKManager.initSDK(String basePath, String productId, String uuid, String authorKey, String version, IoTCallback mCallback); public interface IoTCallback { /** * DP 事件接收 * @param event * * 事件值(event.value) * 事件 ID(event.dpid) * 事件类型(event.type) * DPEvent.Type.PROP_BOOL * DPEvent.Type.PROP_VALUE * DPEvent.Type.PROP_STR * DPEvent.Type.PROP_ENUM * DPEvent.Type.PROP_RAW */ void onDpEvent(DPEvent event); //解绑设备回调 (请在此处重启APP进程,否则会影响二次配网) void onReset(); //收到配网二维码短链(获取失败时为null) void onShorturl(String url); /** * MQTT状态变化 * @param status IoTSDKManager.STATUS_OFFLINE 网络离线; * IoTSDKManager.STATUS_MQTT_OFFLINE 网络在线 MQTT 离线; * IoTSDKManager.STATUS_MQTT_ONLINE 网络在线 MQTT 在线 */ void onMQTTStatusChanged(int status); //设备激活 void onActive(); //设备初次激活 void onFirstActive(); }

销毁

//会进行广播注销等销毁操作 ioTSDKManager.destroy();

测试方法

测试阶段建议开启日志服务,SDK 的日志会自动保存在您传入的路径中。

注意 生产阶段建议去除日志服务。

/** * 开启本地日志服务 * @param logPath 日志文件保存路径 示例:"/sdcard/tuya_log/" * @param cacheDays 日志文件缓存天数 * @return */ Log.init(context, logPath, cacheDays); //刷写日志文件,可以在需要的时候手动触发。isSync : true 为同步 flush,flush 结束后才会返回。 false 为异步 flush,不等待 flush 结束就返回。 Log.flush(isSync) //销毁本地日志服务, 活动结束或应用退出时调用 Log.close();

API

//本地解绑 (异步操作,解绑成功会进入onReset回调) IoTSDKManager.reset(); /** * 发送 DP 事件 * * @param id: DP ID * @param type: 类型 DPEvent.Type * DPEvent.Type.PROP_BOOL boolean * DPEvent.Type.PROP_VALUE int * DPEvent.Type.PROP_STR string * DPEvent.Type.PROP_ENUM int * DPEvent.Type.PROP_RAW byte[] * @param val: 值 * @return */ IoTSDKManager.sendDP(int id, int type, Object val) /** * 发送多个 DP 事件 * * @param events: 多个 DP 类型 * @return */ IoTSDKManager.sendDP(DPEvent... events) /** * 发送 DP 事件带时间戳 * * @param id: DP ID * @param type: 类型 DPEvent.Type * @param val: 值 * @param timestamp: 时间戳,单位为秒 * @return */ IoTSDKManager.sendDPWithTimeStamp(int id, int type, Object val, int timestamp) /** * 发送多个 DP 事件带时间戳(时间戳需要赋值在 DPEvent.timestamp) * * @param events: 多个 DP 类型 * @return */ IoTSDKManager.sendDPWithTimeStamp(DPEvent... events) /** * 发送 http 请求 * @param apiName: 请求 API * @param apiVersion: 版本号 * @param jsonMsg: 参数 JSON * @return */ IoTSDKManager.httpRequest(String apiName, String apiVersion, String jsonMsg) //获取设备 ID IoTSDKManager.getDeviceId() //自定义实现网络状态监测,返回值为网络是否离线。SDK已提供默认实现,如无需要不必扩展此方法。 ioTSDKManager = new IoTSDKManager(this) { @Override protected boolean isOffline() { //实现自己的网络状态监测 return super.isOffline(); } }

OTA

说明:根据 ioTSDKManager.initSDK 传入的 version 对固件版本进行区分。更新固件包时需要修改固件版本号 version, 示例:1.2.3

支持设备端检测升级和 App 触发升级,升级流程如下。

  1. 设置回调。代码示例如下。

    ioTSDKManager.setUpgradeCallback(new UpgradeEventCallback() { @Override public void onUpgradeInfo(String version) { //收到更新信息版本号:version //主动触发升级文件下载(收到更新回调后,可以触发) ioTSDKManager.startUpgradeDownload(); } @Override public void onUpgradeDownloadStart() { //开始升级下载回调 } @Override public void onUpgradeDownloadUpdate(int i) { //下载进度回调 i% } @Override public void upgradeFileDownloadFinished(int result, String file) { //下载完成回调,result == 0 表示成功,file 为升级文件压缩包路径(建议安装完成后清除) } });
  2. 上传新版本固件( ZIP 格式)。

  3. 收到更新信息回调后,即可触发 ioTSDKManager.startUpgradeDownload 开始升级下载。