rnSdk基于涂鸦智能sdk做了一层封装.涂鸦全屋智能SDK提供了以家庭为单位,对硬件设备、涂鸦云通讯的接口封装,加速应用开发过程,主要包括了以下功能:
- 硬件设备相关(配网、控制、状态上报、定时任务、群组、固件升级、共享)
- 账户体系(手机号、邮箱的注册、登录、重置密码等通用的账户功能)
- 家庭管理
- ZigBee网关
- 消息中心
- 意见反馈
- 涂鸦云HTTP API接口封装 (参见涂鸦云api调用)
开发平台上,在应用管理
中新建一款应用,输入应用名称、应用包名、应用标示符等信息。创建成功后,即可获得App ID和Secret用于SDK开发。
在Android Studio中建立你的工程。
拷贝demo中的sdk 到你react native工程下
setting.gralde
...
include ':tuya-react-sdk'
project(':tuya-react-sdk').projectDir = new File(rootProject.projectDir, '../sdk/android')
...
build.gradle 文件里添加如下配置
dependencies {
...
implementation project(':tuya-react-sdk')
...
}
创建工程
拷贝demo中的sdk 到你react native工程下,同时进入ios/TuyaRnDemo/ 把TuyaRNSDK 拷贝进去
涂鸦智能sdk默认只支持armeabi-v7a和x86架构的平台,如有其他平台需要可前往GitHub获取
主要用于初始化通信服务等组件。
TuyaCoreApi.initWithOptions({
appKey:Platform.OS=='ios'?iosAppKey:androidAppKey,
appSecret:Platform.OS=='ios'?iosAppSecret:androidAppSecret,
});
在退出应用的时候调用以下接口注销掉。
TuyaCoreApi.onDestroy()
Session由于可能存在一些异常或者在一段时间不操作(45天)会失效掉,这时候需要退出应用,重新登陆获取Session。
TuyaCoreApi.setOnNeedLoginListener(()=>{})
【注意事项】
- 一旦出现此类回调,请跳转到登陆页面,让用户重新登陆。
需要登陆后在升级
//检测是否要升级用户数据
checkVersionUpgrade ();
//升级账号
upgradeVersion ();
//检测是否升级
TuyaHomeSdk.getUserInstance().checkVersionUpgrade()
//升级用户账号
TuyaHomeSdk.getUserInstance().upgradeVersion()
涂鸦智能提供手机验证码登陆体系。
手机验证码登陆,支持国内手机验证码登陆。
//获取手机验证码
* @param countryCode 国家区号
* @param phoneNumber 手机号码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
//手机验证码登陆
* @param countryCode 国家区号
* @param phoneNumber 电话
* @param validateCode 验证码
TuyaUserApi.loginWithPhone({countryCode,phoneNumber,validateCode})
//获取手机验证码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
.then(() => {})
.catch((error) => {});
//手机验证码登陆
TuyaUserApi.loginWithPhone({countryCode,phoneNumber,validateCode,})
.then(() => {})
.catch((error) => {});
涂鸦智能提供手机密码登陆体系。
手机密码注册。支持国内外手机注册。
//获取手机验证码
* @param countryCode 国家区号
* @param phoneNumber 手机号码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
.then(() => {})
.catch((error) => {});
//注册手机密码账户
* @param countryCode 国家区号
* @param phoneNumber 手机密码
* @param password 登陆密码
* @param validateCode 验证码
TuyaUserApi.registerAccountWithPhone({countryCode,phoneNumber,validateCode,password})
//获取手机验证码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
.then(() => {})
.catch((error) => {});
//注册手机密码账户
TuyaUserApi.registerAccountWithPhone({countryCode,phoneNumber,validateCode,password})
.then(() => {})
.catch((error) => {});
手机密码登陆。
//手机密码登陆
* @param countryCode 国家区号
* @param phoneNumber 手机密码
* @param passwd 登陆密码
* @param callback 登陆回调接口
TuyaUserApi.loginWithPhonePassword({countryCode,phoneNumber,password})
//手机密码登陆
TuyaUserApi.loginWithPhonePassword({countryCode,phoneNumber,password})
.then(() => {})
.catch((error) => {});
手机密码登陆 重置密码。
//获取手机验证码
* @param countryCode 国家区号
* @param phoneNumber 手机号码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
//重置密码
* @param countryCode 国家区号
* @param phone 手机号码
* @param code 手机验证码
* @param newPasswd 新密码
TuyaUserApi.resetPhonePassword({phone,code,newPassword,countryCode})
//手机获取验证码
TuyaUserApi.getValidateCode({countryCode,phoneNumber})
.then(() => {})
.catch((error) => {});
//重置手机密码
TuyaUserApi.resetPhonePassword({phone,code,newPassword,countryCode})
.then(() => {})
.catch((error) => {});
涂鸦智能提供邮箱密码登陆体系。
用户邮箱密码注册。支持国内外邮箱注册。
//邮箱注册获取验证码
/**
* 注册获取邮箱验证码
* @param countryCode
* @param email
*/
TuyaUserApi.getRegisterEmailValidateCode({countryCode,email})
//邮箱密码注册
* @param countryCode 国家区号
* @param email 邮箱账户
* @param password 登陆密码
* @param code 验证码
TuyaUserApi.registerAccountWithEmail({countryCode, email,code,password})
//注册获取邮箱验证码
TuyaUserApi.getRegisterEmailValidateCode({phone,code,newPassword,countryCode})
.then(() => {})
.catch((error) => {});
//邮箱密码注册
TuyaUserApi.registerAccountWithEmail({countryCode, email,code,password})
.then(() => {})
.catch((error) => {});
- 账户一旦注册到一个国家,目前数据无法迁移其他国家。
用户邮箱密码登陆
//邮箱密码登陆
* @param email 邮箱账户
* @param passwd 登陆密码
* @param countryCode 国家码
TuyaUserApi.loginWithEmail({email,password,countryCode,})
//邮箱密码登陆
TuyaUserApi.loginWithEmail({email,password,countryCode,})
.then(() => {})
.catch((error) => {});
用户邮箱重置密码
//邮箱找回密码,获取验证码
* @param countryCode 国家区号
* @param email 邮箱账户
TuyaUserApi.getEmailValidateCode({countryCode,email})
//邮箱重置密码
* @param email 用户账户
* @param validateCode 邮箱验证码
* @param newPassword 新密码
* @param countryCode 国家区号
TuyaUserApi.resetEmailPassword({email, validateCode,newPassword,countryCode})
//获取邮箱验证码
TuyaUserApi.getEmailValidateCode({email,password,countryCode,})
.then(() => {})
.catch((error) => {});
//重置密码
TuyaUserApi.resetEmailPassword({email,password,countryCode,})
.then(() => {})
.catch((error) => {});
涂鸦智能提供uid登陆体系。如果客户自有用户体系,那么可以通过uid登陆体系,接入我们的sdk。
用户uid注册
//用户uid注册
* @param countryCode 国家号码
* @param uid 用户uid
* @param password 用户密码
TuyaUserApi.registerAccountWithUid({password,countryCode,uid})
//uid注册
TuyaUserApi.registerAccountWithUid({password,countryCode,uid})
.then(() => {})
.catch((error) => {});
用户uid登陆
//uid 登陆
* @param countryCode 国家号码
* @param uid 用户uid
* @param password 用户密码
TuyaUserApi.loginWithUid({password,countryCode,uid})
//uid登陆
TuyaUserApi.loginWithUid({password,countryCode,uid})
.then(() => {})
.catch((error) => {});
用户uid重置密码,需要通过云云对接的方式进行重置密码。详看云端API文档
用户UID 登陆注册合成一个接口。
//uid 登陆
* @param countryCode 国家号码
* @param uid 用户uid
* @param password 用户密码
TuyaUserApi.loginOrRegisterWithUid({password,countryCode,uid})
//uid登陆
TuyaUserApi.loginOrRegisterWithUid({password,countryCode,uid})
.then(() => {})
.catch((error) => {});
* @param countryCode 国家区号
* @param key twitter授权登录获取的key
* @param secret twitter授权登录获取的secret
TuyaUserApi.loginByTwitter({countryCode,key,secret})
* @param countryCode 国家区号
* @param userId QQ授权登录获取的userId
* @param accessToken QQ授权登录获取的accessToken
TuyaUserApi.loginByQQ({countryCode,userId,accessToken})
* @param countryCode 国家区号
* @param code 微信授权登录获取的code
TuyaUserApi.loginByWechat({countryCode,code})
* @param countryCode 国家区号
* @param token facebook授权登录获取的token
TuyaUserApi.loginByFacebook({countryCode,token})
上传用户的头像。
用于上传�用户自定义的头像。
/**
* 上传用户头像
*
* @param filePath 文件路径
*/
TuyaUserApi.uploadUserAvatar({filePath})
TuyaUserApi.uploadUserAvatar({filePath})
.then(() => {})
.catch((error) => {});
设置温度单位是摄氏度还是华氏度
/**
* TempUnitEnum.Celsius是摄氏度,TempUnitEnum.Fahrenheit是华摄度
*
* @param tempUnitEnum
*/
TuyaUserApi.setTempUnit({ tempUnitEnum})
用户账号切换的时候需要调用退出登录接口
TuyaUserApi.logout()
.then(() => {})
.catch((error) => {});
一周后账号才会永久停用并删除以下你账户中的所有信息,在此之前重新登录,则你的停用请求将被取消
/**
* 注销账户
* Account cancellation
*
* @param callback
*/
TuyaUserApi.cancelAccount()
TuyaUserApi.cancelAccount()
.then(() => {})
.catch((error) => {});
用户相关的数据模型。
- nickName 昵称
- phoneCode 国家区号
- mobile 手机号码
- username 用户名称
- email 邮箱地址
- uid 用户唯一标识符
- sid 用户登录产生唯一标识id.
- headPic 用户头像路径
TuyaHomeApi 提供了家庭相关的操作类,负责处理家庭的数据和信息的更新。
TuyaHomeApi.getHomeDetail({ homeId})
获取家庭下面的本地cache
TuyaHomeApi.getHomeLocalCache({ homeId})
/**
* 更新家庭信息
*
* @param name 家庭名称
* @param lon 当前家庭的经度
* @param lat 当前家庭的纬度
* @param geoName 地理位置的地址
* @param callback
*/
TuyaHomeApi.updateHome({homeId,name,lon,lat,geoName})
/**
* 解散家庭
*
*/
TuyaHomeApi.dismissHome({ homeId})
/**
* 排序
*
* @param idList homeId list
* @param callback
*/
TuyaHomeApi.sortHome({homeId,idList})
/**
* 添加房间
*
* @param name
* @param callback
*/
TuyaHomeApi.addRoom({homeId,name})
/**
* 移除房间
*
* @param roomId
* @param callback
*/
TuyaHomeApi.removeRoom({homeId,roomId})
/**
* 排序房间
*
* @param idList 房间id的list
* @param callback
*/
TuyaHomeApi.sortRoom({homeId,idList})
/**
* 查询房间列表
*/
TuyaHomeApi.queryRoomList({homeId})
/**
* 创建群组
*
* @param productId 产品ID
* @param name 群组名称
* @param devIdList 设备ID List
* @param callback
*/
TuyaHomeApi.createGroup({homeId,productId,name,devIdList,})
/**
* 根据设备查询房间信息
*
* @param devices
* @return
*/
TuyaHomeApi.queryRoomInfoByDevice({homeId,devices});
/**
* 监听家庭下面信息(设备的新增或者删除)变更的监听
*
* @param listener
*/
TuyaHomeApi.registerHomeStatusListener({homeId: this.state.home.homeId},()=>{
console.log("onDeviceAdded")
},()=>{
console.log("onDeviceRemoved")
},()=>{
console.log("onGroupAdded")
},()=>{
console.log("onGroupRemoved")
},()=>{
console.log("onMeshAdded")
})
TuyaHomeApi.unRegisterHomeStatusListener({homeId})
TuyaHomeApi.queryDeviceListToAddGroup({homeId,groupId,productId})
TuyaHomeManagerApi 提供了创建家庭、获取家庭列表以及监听家庭相关的变更
TuyaHomeManagerApi.queryHomeList()
/**
*
* @param name 家庭名称
* @param lon 经度
* @param lat 纬度
* @param geoName 家庭地理位置名称
* @param rooms 房间列表
*/
TuyaHomeManagerApi.createHome({name,lon,lat,geoName,rooms})
/**
* 注册家庭信息的变更
* 有:家庭的增加、删除、信息变更、分享列表的变更和服务器连接成功的监听
*
* @param listener
*/
TuyaHomeManagerApi.registerTuyaHomeChangeListener(() => {
console.log("onHomeAdded")
}, () => {
console.log("onHomeRemoved")
}, () => {
console.log("onHomeInfoChanged")
}, () => {
console.log("onSharedDeviceList")
}, () => {
console.log("onSharedGroupList")
}, () => {
console.log("onServerConnectSuccess")
})
TuyaHomeManagerApi.unregisterTuyaHomeChangeListener()
TuyaHomeMemberApi提供了家庭成员管理接口,包括添加、删除成员,更新成员的控制权限、获取家庭成员列表等
private long homeId; //家庭id
private String nickName;//备注名
private boolean admin;//是否是管理员
private long memberId;//成员id
private String headPic;//头像地址
private String account;//成员账户名称
private String uid;//成员唯一标识id
/**
* 给这个Home下面添加成员
*
* @param countryCode 国家码
* @param userAccount 用户名
* @param name 昵称
* @param admin 是否拥有管理员权限
*/
TuyaHomeMemberApi.addMember({homeId,countryCode,userAccount,name,admin})
/**
* 移除Home下面的成员
*
* @param id
* @param callback
*/
TuyaHomeMemberApi.removeMember({memberId})
/**
* 更新成员备注名和权限
* @param name 备注名 如果不更改备注名,传入从memberBean获取的nickName
* @param admin 是否是管理员
* @param callback
*/
TuyaHomeMemberApi.updateMember({ memberId, name, admin}).then(() => {})
/**
* 查询Home下面的成员列表
*
*/
TuyaHomeMemberApi.queryMemberList({ homeId })
TuyaRoomApi 提供房间的管理类,负责房间的新增、删除设备或群组
/**
* 更新房间名称
*
* @param name 新房间名称
*/
TuyaRoomApi.updateRoom({roomId,name})
/**
* 添加设备
*
* @param devId
*/
TuyaRoomApi.addDevice({roomId,devId})
/**
* 添加群组
*
* @param groupId
*/
TuyaRoomApi.addGroup({roomId,groupId})
/**
* 删除设备
*
* @param devId
*/
TuyaRoomApi.removeDevice({roomId,devId})
/**
* 删除群组
*
* @param groupId
*/
TuyaRoomApi.removeGroup({roomId,groupId})
/**
* 把群组或者设备移除房间
*
* @param list
*/
TuyaRoomApi.moveDevGroupListFromRoom({roomId,list})
/**
* 对房间里的群组或者设备进行排序
* @param list
*/
TuyaRoomApi.sortDevInRoom({roomId,list})
获取此数据前,应该调用家庭的初始化接口 getHomeDetail、或者getHomeLocalCache 之后才会有
TuyaHomeDataManagerApi{
/**
* 家庭下面的设备、群组、房间列表
*/
TuyaHomeDataManagerApi.getHomeRoomList({homeId})
/**
* 获取家庭下面的设备列表
*
* @param homeId 家庭ID
* @return
*/
TuyaHomeDataManagerApi.getHomeDeviceList({homeId})
/**
* 获取家庭下面的群组列表
*
* @param homeId
* @return
*/
TuyaHomeDataManagerApi.getHomeGroupList({homeId});
//获取群组
TuyaHomeDataManagerApi.getGroupBean({groupId})
//获取设备
TuyaHomeDataManagerApi.getDeviceBean({devId})
//根据群组ID获取房间
TuyaHomeDataManagerApi.getGroupRoomBean({groupId})
//获取房间
TuyaHomeDataManagerApi.getRoomBean({roomId,homeId })
//根据设备获取房间信息
TuyaHomeDataManagerApi.getDeviceRoomBean({devId})
//获取群组下面的设备列表
TuyaHomeDataManagerApi.getGroupDeviceList({groupId})
//获取mesh下面的群组列表
TuyaHomeDataManagerApi.getMeshGroupList({groupId})
TuyaHomeDataManagerApi.getMeshDeviceList({meshId})
/**
* 根据房间ID获取房间下面的设备列表
*
* @param roomId
* @return
*/
TuyaHomeDataManagerApi.getRoomDeviceList({roomId})
/**
* 根据房间ID获取房间下面的群组列表
*
* @param roomId
* @return
*/
TuyaHomeDataManagerApi.getRoomGroupList({roomId})
/**
* 获取Home数据
*
* @param homeId
* @return
*/
TuyaHomeDataManagerApi.getHomeBean({homeId})
}
TuyaActivatorApi 集成了WiFi配网、ZigBee配网、蓝牙mesh配网等。
WiFi配网主要有EZ模式和AP模式两种
TuyaActivatorApi.initActivator({homeId,ssid,password,time,type,})
* @param ssid 配网之后,设备工作WiFi的名称。(家庭网络)
* @param password 配网之后,设备工作WiFi的密码。(家庭网络)
* @param type: 现在给设备配网有以下两种方式:
ActivatorModelEnum.TY_EZ: 传入该参数则进行EZ配网
ActivatorModelEnum.TY_AP: 传入该参数则进行AP配网
* @param time 配网的超时时间设置,默认是100s.
ITuyaSmartActivatorListener listener 配网回调接口
* @method onError(String errorCode,String errorMsg);
@param errorCode:
1001 网络错误
1002 配网设备激活接口调用失败,接口调用不成功
1003 配网设备激活失败,设备找不到。
1004 token 获取失败
1005 设备没有上线
1006 配网超时
@param errorMsg:
暂时没有数据,请参考errorCode。
* @method onActiveSuccess(DeviceBean deviceBean); 设备配网成功,且设备上线(手机可以直接控制),可以通过
* @method onStep(String step, Object o);
|@param step |@param o
|device_find |devId (String)
|device_bind_success |dev (DeviceBean)
【备注】
device_find 发现设备
device_bind_success 设备绑定成功,但还未上线,此时设备处于离线状态,无法控制设备。
//getActivator Token
TuyaActivatorApi.initActivator({homeId,ssid,password,time,type,})
//开始配置
TuyaActivatorApi.stop();
-
获取WiFi Ssid 错误,导致配网失败 安卓系统API里面获取到ssid,通常前后会有“”。 建议使用Tuya Sdk里面自带的WiFiUtil.getCurrentSSID()去获取
-
WiFi密码包含空格 用户在输入密码的时候,由于输入法联想的功能很容易在密码中输入空格。建议密码输入的时候直接显示出来,另外在判断密码含有空格的时候,弹窗提醒用户。
-
用户不输入WiFi密码 用户在首次使用智能设备产品的过程中,很容易不输入密码就进行后续操作 建议判断密码输入为空且WiFi加密类型不为NONE时,弹窗提醒用户。
-
用户在AP配网时选择了设备的热点名称,用户首次使用智能产品的过程中,很容易出现此问题。 建议在判别AP配网时用户选择了设备的热点名称,弹窗提醒给用户。
-
获取WiFi的Ssid为"0x","<unknown ssid>" 目前发现在一些国产手机会出现此问题。并不是用户选择的WiFi名称。这是由于定位权限没开启导致的,建议用户可以手动输入WiFi的Ssid,或者给出弹窗提醒,让用户开启相应权限。
- APP没有连接到正常的网络,导致无法获取设备的状态。
ZigBee子设备配网需要ZigBee网关设备云在线的情况下才能发起,且子设备处于配网状态。
TuyaActivatorApi.newGwSubDevActivator({time,devId})
TuyaActivatorApi.newGwSubDevActivator({time,devId})
涂鸦智能提供了丰富的接口供开发者实现设备信息的获取和管理能力(移除等)。设备相关的返回数据都采用异步消息的方式通知接受者.
-
设备控制必须先初始化数据,即先调用TuyaHomeSdk.newHomeInstance(homeId).getHomeDetail(ITuyaHomeResultCallback callback)
-
schema dp数据相关介绍[详见功能点相关概念][3]
TuyaDeviceApi类提供了设备状态通知能力,通过注册回调函数,开发者可以方便的获取设备数据接受、设备移除、设备上下线、手机网络变化的通知。同时也提供了控制指令下发,设备固件升级的接口。
DeviceBean 类 dps 属性定义了设备的状态,称作数据点(DP点)或功能点。dps
字典里的每个key
对应一个功能点的dpId
,dpValue
为该功能点的值。各自产品功能点定义参见涂鸦开发者平台的产品功能。
功能点具体参见快速入门-功能点相关概念
发送控制指令按照以下格式: {"(dpId)":"(dpValue)"}
根据后台该产品的功能点定义,示例代码如下:
//设置dpId为1的布尔型功能点示例 作用:开关打开
dps = {"1": true};
//设置dpId为4的字符串型功能点示例 作用:设置RGB颜色为ff5500
dps = {"4": "ff5500"};
//设置dpId为5的枚举型功能点示例 作用:设置档位为2档
dps = {"5": "2"};
//设置dpId为6的数值型功能点示例 用:设置温度为20°
dps = {"6": 20};
//设置dpId为15的透传型(byte数组)功能点示例 作用:透传红外数据为1122
dps = {"15": "1122"};
//多个功能合并发送
dps = {"1": true, "4": "ff5500"};
TuyaGatewayApi.publishDps({devId,localId,dps:JSON.stringify(dps)})
- 控制命令的发送需要特别注意数据类型。
比如功能点的数据类型是数值型(value),那控制命令发送的应该是{"2": 25}
而不是{"2": "25"}
- 透传类型传输的byte数组是字符串格式并且必须是偶数位。
比如正确的格式是:{"1": "0110"}
而不是{"1": "110"}
TuyaDeviceApi提供设备相关信息(dp数据、设备名称、设备在线状态和设备移除)的监听,会实时同步到这里。
TuyaDeviceApi.registerDevListener(
{ devId: this.state.devId },
() => {
console.log("onDpUpdate")
},
(data) => {
console.warn('onRemoved', data);
},
(data) => {
console.warn('onStatusChanged', data);
},
(data) => {
console.warn('onNetworkStatusChanged', data);
},
(data) => {
console.warn('onDevInfoUpdate', data);
},
);
通过局域网或者云端这两种方式发送控制指令给设备。
5、注销设备监听事件
TuyaDeviceApi.unRegisterDevListener();
6、设备资源销毁
TuyaDeviceApi.onDestroy();
- 指令下发成功并不是指设备真正操作成功,只是意味着指令成功发送出去。操作成功会有dp数据信息上报上来 ,且通过
IDevListener onDpUpdate
接口返回。 - command 命令字符串 是以
Map<String dpId,Object dpValue>
数据格式转成JsonString。 - command 命令可以一次发送多个dp数据。
固件升级主要用于修复设备bug和增加设备新功能。固件升级主要分两种,第一种是设备升级,第二种是MCU升级。升级的接口位于ITuyaOta中。
//获取固件升级信息
TuyaOTAApi.startOta({devId})
UpgradeInfoBean
返回固件升级的信息,提供以下信息
private int upgradeStatus;//升级状态,0:无新版本 1:有新版本 2:在升级中
private String version;//最新版本
private String currentVersion;//当前版本
private int timeout;//超时时间,单位:秒
private int upgradeType;//0:app提醒升级 2-app强制升级 3-检测升级
private int type;//0:wifi设备 1:蓝牙设备 2:GPRS设备 3:zigbee设备(目前只支持zigbee网关)9:MCU
private String typeDesc;//模块描述
private long lastUpgradeTime;//上次升级时间,单位:毫秒
ota之前需要注册监听,以实时获取升级状态
//otaType 升级的设备类型,同`UpgradeInfoBean`的type字段
TuyaOTAApi.getOtaInfo({devId},()=>{
console.log('onSuccess')
},()=>{
console.log('onFailure')
},()=>{
console.log('onProgress')
})
});
调用以开始升级,调用后注册的ota监听会把升级状态返回回来,以便开发者构建UI
TuyaOTAApi.startOta();
离开升级页面后要销毁,回收内存。
TuyaOTAApi.onDestroy();
查询单个dp数据 从设备上查询dp最新数据.
TuyaHomeDataManagerApi.getDp({devId,dpId})
设备重命名,支持多设备同步。
//重命名
TuyaDeviceApi.renameDevice({ devId, name })
调用以下方法获取最新数据,然后刷新设备信息即可。
TuyaHomeDataManagerApi.getDeviceBean({devId})
用于从用户设备列表中移除设备
/**
* 移除设备
*
*/
TuyaDeviceApi.removeDevice({devId})
主要用于扫地机地图数据等大量实时上报的场景
SinglerTransferNativeApi
SinglerTransferNativeApi {
/**
* 开始连接
*/
startConnect();
/**
* 是否在线
*/
isOnline();
/**
* 订阅设备数据,订阅设备之后,设备如果有数据上报上来,便可以通过 registerTransferDataListener 回调上来。需要注意的是,每次通道连接成功都需要重新订阅设备数据
*/
subscribeDevice({devId});
/**
* 取消订阅设备信息,则设备数据不在收到
*
*/
unSubscribeDevice({devId});
/**
* 注册设备数据流,SDK不做数据解析,具体格式需要和硬件上报方协商一致,然后解析。
*/
registerTransferDataListener(()=>{
console.log("success")
},()=>{
console.log("error")
});
/**
* 取消订阅设备数据流
*/
unRegisterTransferDataListener();
/**
* 注册通道状态变化,在网络波动的情况下会导致通道断开重连的情况
*/
registerTransferCallback(()=>{
console.log("success")
},()=>{
console.log("error")
};
/** 取消注册
*/
unRegisterTransferCallback();
/**
断开数据流通道
*/
stopConnect();
}
- iconUrl 设备图标链接地址
- devId 设备唯一标示id
- isOnline 设备是否在线(局域网或者云端在线)
- name 设备名称
- schema 用来描述设备dp点属性
- productId 产品唯一标示id
- pv 网关通信协议版本 用x.x来表示 。
- bv 网关通用固件版本 用x.x来表示。
- time 设备添加时间
- isShare 设备是否被分享
- schemaMap Map类型 key 表示dpId, value 表示Schema 数据。
- dps 设备当前数据信息。key 是 dpId ,value 是值。
- lon、lat用来标示经纬度信息,需要用户使用sdk前,调用TuyaSdk.setLatAndLong 设置经纬度信息。
- isZigBeeWifi 是否是ZigBee网关设备
- hasZigBee 是否包含ZigBee能力(网关设备或者子设备)
涂鸦智能提供了向好友分享控制设备的能力。支持分享者和被分享者对分享的设备进行增加、删除、查询、修改。
分享多个设备给指定用户,会将指定用户的以前所有分享覆盖掉
@param homeId 家庭id
@param countryCode 手机区号码,例如中国是“86”
@param userAccount 账号
@param ShareIdBean 分享内容 目前支持 设备或者mesh
@param autoSharing 是否自动分享新增的设备,如果为true,则分享者以后新增的设备都会自动分享给该指定用户(mesh暂不支持该选项)
TuyaShareApi.addShare({ homeId, countryCode, userAccount, shareBean: {
devIds:[devId],
meshIds:[]
}, autoSharing: false })
分享多个设备给指定用户,会将要分享的设备追加到指定用户的所有分享中
@param homeId 分享者家庭id
@param countryCode 手机区号码,例如中国是“86”
@param phoneNumber 手机号码
@param devIds 分享的设备id列表
TuyaShareApi.addShareWithHomeId({homeId, countryCode,phoneNumber,devIds,})
TuyaShareApi.addShareWithHomeId({homeId, countryCode,phoneNumber,devIds})
.then(() => {})
.catch((err) => {});
/**
* 批量添加设备共享
* @param memberId 分享目标用户id
* @param devIds 设备id列表
* @param callback
*/
TuyaShareApi.addShareWithMemberId({memberId, devIds})
TuyaShareApi.addShareWithMemberId({memberId, devIds: [devId]})
.then(() => {})
.catch((err) => {});
通过用户关系id取消单个设备分享
/**
* 用户下的设备分享关闭
*
* @param devId
* @param memberId
*/
TuyaShareApi.disableDevShare({devId, memberId})
TuyaShareApi.disableDevShare({devId, memberId})
.then(() => {})
.catch((err) => {});
分享者获取主动分享的关系列表(分享给其他用户的用户信息列表)
TuyaShareApi.queryUserShareList({ homeId})
.then(() => {})
被分享者获取收到的分享关系列表
TuyaShareApi.queryShareReceivedUserList()
TuyaShareApi.queryShareReceivedUserList().then((data) => {}).catch((error) => {});
分享者获取某个设备的共享用户列表
@param devId 设备Id
TuyaShareApi.queryDevShareUserList({devId,})
TuyaShareApi.queryDevShareUserList({devId,}).then((data) => {}).catch((error) => {});
被分享者查找指定设备是谁共享过来的
@param devId 设备Id
TuyaShareApi.queryShareDevFromInfo({ devId })
TuyaShareApi.queryShareDevFromInfo({devId,}).then((data) => {}).catch((error) => {});
分享者 通过memberId 获取分享给这个关系用户的所有共享设备信息
@param memberId 用户成员Id 从SharedUserInfoBean中获取
TuyaShareApi.getUserShareInfo({ memberId })
TuyaShareApi.getUserShareInfo({ memberId }).then((data) => {}).catch((error) => {});
被分享者 通过memberId 获取收到这个关系用户的所有共享设备信息
@param memberId 用户成员Id 从SharedUserInfoBean中获取
TuyaShareApi.getReceivedShareInfo({ memberId })
TuyaShareApi.getReceivedShareInfo({ memberId }).then((data) => {}).catch((error) => {});
可分享给未注册用户
@param devId 分享的设备id
@param userAccount 账户
@param countryCode 手机区号码,例如中国是“86”
TuyaShareApi.inviteShare({ devId, userAccount, countryCode })
TuyaShareApi.inviteShare({ devId, userAccount, countryCode }).then((data) => {}).catch((error) => {});
可分享给未注册用户
@param shareId 分享id 从邀请分享接口那里可获取该参数
TuyaShareApi.confirmShareInviteShare({ shareId })
TuyaShareApi.confirmShareInviteShare({ shareId }).then((data) => {}).catch((error) => {});
分享者通过memberId 删除与这个关系用户的所有共享关系(用户维度删除)
@param memberId 用户成员Id 从SharedUserInfoBean中获取
TuyaShareApi.removeUserShare({ memberId })
TuyaShareApi.removeUserShare({ memberId }).then((data) => {}).catch((error) => {});
被分享者通过memberId 删除与这个关系用户的所有共享关系(用户维度删除)
@param memberId 用户成员Id 从SharedUserInfoBean中获取
TuyaShareApi.removeReceivedUserShare({ memberId })
TuyaShareApi.removeReceivedUserShare({ memberId }).then((data) => {}).catch((error) => {});
分享者删除指定关系用户下的某个共享的设备
@param devId 设备Id
@param memberId 用户成员Id 从SharedUserInfoBean中获取
TuyaShareApi.disableDevShare({devId,memberId})
TuyaShareApi.disableDevShare({devId,memberId}).then((data) => {}).catch((error) => {});
被分享者删除某个共享的设备
@param devId 设备Id
TuyaShareApi.removeReceivedDevShare({devId})
TuyaShareApi.removeReceivedDevShare({devId}).then((data) => {}).catch((error) => {});
分享者修改发出的分享人的备注名.即你收到其他用户分享给你的设备,可以修改他们的备注名.(发出的分享)
* @param memberId 用户成员Id 从SharedUserInfoBean中获取
* @param name 要修改的备注名
TuyaShareApi.renameShareNickname({ memberId, name});
TuyaShareApi.renameShareNickname({ memberId, name}).then((data) => {}).catch((error) => {});
分享者修改接收到的分享人的备注名.即你分享设备给其他人,可以修改他们的备注名.(接收到的分享)
* @param memberId 用户成员Id 从SharedUserInfoBean中获取
* @param name 要修改的备注名
TuyaShareApi.renameReceivedShareNickname({ memberId, name})
TuyaShareApi.renameReceivedShareNickname({ memberId, name}).then((data) => {}).catch((error) => {});
涂鸦智能提供了基本的定时能力,支持设备(包括WiFi设备,蓝牙mesh子设备,zigbee子设备)和群组。并封装了针对设备dp点的定时器信息的增删改查接口。APP通过定时接口设置好定时器信息后,硬件模块会自动根据定时要求进行预订的操作。每个定时任务下可以包含多个定时器。如下图所示:
定时相关的所有方法都在TuyaTimerApi
中
以下多个接口用到了taskName这个参数,具体可描述为一个分组,一个分组可以有多个定时器。每个定时属于或不属于一个分组,分组目前仅用于展示
增加一个定时器
* 增加定时器 单dp点 默认置为true 支持子设备
* @param taskName 定时任务名称
* @param loops 循环次数 "0000000", 每一位 0:关闭,1:开启, 从左至右依次表示: 周日 周一 周二 周三 周四 周五 周六
* @param devId 设备Id或群组Id
* @param dps dp点id
* @param time 定时任务下的定时钟
TuyaTimerApi.addTimerWithTask({taskName,loops,devId,dps,time})
TuyaTimerApi.addTimerWithTask({taskName,loops,devId,dps,time}).then((data) => {}).catch((error) => {});
获取某设备下的所有定时任务状态
* 获取某设备下的所有定时任务状态
*
* @param devId 设备Id
TuyaTimerApi.getTimerTaskStatusWithDeviceId({devId})
TuyaTimerApi.getTimerTaskStatusWithDeviceId({devId}).then((data) => {}).catch((error) => {});
控制定时任务中所有定时器的开关状态
* 控制定时任务中所有定时器的开关状态
* @param taskName 定时任务名称
* @param devId 设备Id或群组Id
* @param status 状态值 1表示开关状态开启 0开关状态关闭
TuyaTimerApi.updateTimerTaskStatusWithTask({devId,taskName,status})
TuyaTimerApi.updateTimerTaskStatusWithTask({devId,taskName,status}).then((data) => {}).catch((error) => {});
控制某个定时器的开关状态
* 控制某个定时器的开关状态
* @param taskName 定时任务名称
* @param devId 设备Id或群组Id
* @param timerId 定时钟Id
* @param isOpen 开关
TuyaTimerApi.updateTimerStatusWithTask({taskName,devId,timeId,isOpen})
TuyaTimerApi.updateTimerStatusWithTask({taskName,devId,timeId,isOpen}).then((data) => {}).catch((error) => {});
删除定时器
* 删除定时器
* @param taskName 定时任务名称
* @param devId 设备Id或群组Id
* @param timerId 定时钟Id
TuyaTimerApi.removeTimerWithTask({taskName,devId,timeId})
TuyaTimerApi.removeTimerWithTask({taskName,devId,timeId}).then((data) => {}).catch((error) => {});
更新定时器的状态 该接口可以修改一个定时器的所有属性。
* 更新定时器的状态
* @param taskName 定时任务名称
* @param loops 循环次数 如每周每天传”1111111”
* @param devId 设备Id或群组Id
* @param timerId 定时钟Id
* @param dpId dp点id
* @param time 定时时间
* @param isOpen 是否开启
TuyaTimerApi.updateTimerWithTask({taskName,loops,devId, dpId,isOpen,timeId,time,})
/**
* 更新定时器的状态
* @param taskName 定时任务名称
* @param devId 设备Id或群组id
* @param timerId 定时钟Id
* @param loops 循环次数
* @param instruct 定时dp点数据,只支持单dp点 json格式 如: [{
* "time": "20:00",
* "dps": {
* "1": true
* }]
*/
TuyaTimerApi.updateTimerWithTaskAndInstruct({taskName,loops,devId,timeId,instruct,time,})
获取定时任务下所有定时器
* 获取定时任务下所有定时器
* @param taskName 定时任务名称
* @param devId 设备Id或群组Id
TuyaTimerApi.getTimerWithTask({devId,taskName})
TuyaTimerApi.getTimerWithTask({devId,taskName}).then((data) => {}).catch((error) => {});
获取设备所有定时任务下所有定时器
* 获取设备所有定时任务下所有定时器
* @param devId 设备Id或群组Id
TuyaTimerApi.getAllTimerWithDeviceId({ devId })
TuyaTimerApi.getAllTimerWithDeviceId({ devId }).then((data) => {}).catch((error) => {});
涂鸦云支持群组管理体系:可以创建群组,修改群组名称,管理群组设备,通过群组管理多个设备,解散群组。
涂鸦智能提供一些设备群组控制的接口。这里的群组控制是指WiFi群组,目前只有群控的功能。群组功能默认关闭,如果需要开通群组功能,联系我们业务人员
群组默认不支持创建,如果你的产品需要这个功能,那么请联系我们对产品进行开启这项功能。
此接口主要是从云端拉取最新群组列表。
//云端获取群组列表
TuyaHomeApi.queryDeviceListToAddGroup({homeId,groupId,productId }).then(data => { }).catch((error) => {})
涂鸦智能群组操作,主要是基于对主设备的操作,主设备是指当前群组在线的第一个设备。在线和离线状态、数据上报都是依赖于主设备的变更。发送控制命令是面对群组的所有设备。
解散群组
* 解散群组
* @param groupId 群组id
* @param callback 回调
TuyaHomeApi.dismissGroup({groupId})
群组回调事件
* 注册群组回调事件
TuyaGroupApi.registerGroupListener({groupId},()=>{
console.log("onDpUpdate")
},()=>{
console.log("onGroupInfoUpdate")
},()=>{
console.log("onGroupRemoved")
});
* 注销群组回调事件
TuyaGroupApi.unregisterGroupListener({groupId});
发送群组控制命令
* 发送群组控制命令
* @param command 控制命令
* @param listener 回调
TuyaGroupApi.publishDps({groupId,command);
群组的发送命令返回结果,是指发送给云端成功,并不是指实际控制设备成功。
本地获取群组数据,需要初始化Home(调用getHomeDetail()或者getHomeLocalCache)之后,才能取到数据
* 本地获取群组数据bean
* @param groupId 群组id
* @return GroupBean 群组数据类
TuyaHomeDataManagerApi.getGroupBean({groupId})
* 本地获取群组数据列表
* @return List<GroupBean> 群组列表
TuyaHomeDataManagerApi.getGroupDeviceList({groupId})
智能分为场景和自动化。场景是用户添加动作,手动触发;自动化是由用户设定条件,当条件触发后自动执行设定的动作。
涂鸦智能Android SDK中,智能包括场景和自动化的统一管理接口TuyaSceneApi
,独立操作接口需要用场景id初始化,场景id可以在获取场景列表接口的返回结果中获取。
以下文档中手动场景和自动化场景简称为场景。
/**
* 获取场景列表
* @param homeId 家庭Id
*/
TuyaSceneApi.getSceneList({ homeId})
其中,SceneBean
的接口定义如下
/**
* 获取场景id
* @return 场景id
*/
public String getId()
/**
* 获取场景名称
* @return 场景名称
*/
public String getName()
/**
* 获取场景条件
* @return 场景条件
*/
public List<SceneCondition> getConditions()
/**
* 获取场景任务
* @return 场景任务
*/
public List<SceneTask> getActions()
TuyaSceneApi.getSceneList({ homeId}).then((data) => {}).catch((error) => {});
用户可设置的条件包括天气状况、设备状况、定时。
-
天气型
天气条件包括温度、湿度、天气、PM2.5、空气质量、日出日落, 可自由选定城市。根据用户账号中设备的不同,可选择的天气条件也不同。
/** * 创建天气型条件 * * @param place 天气城市 * @param type 条件类型 * @param rule 条件规则 * @return */ TuyaSceneApi.createWeatherCondition({place,ruleType, type,range,value})
注: PlaceFacadeBean类对象请从获取城市�列表,根据经纬度获取城市, 根据城市id获取城市接口获取。 目前获取城市接口只支持国内。
-
设备型
设备条件是指当一个设备处于某种状态时,会触发另一台或多台设备的预定任务。为了避免循环控制,同一台设备无法同时作为条件和任务。
/** * 创建设备型条件 * * @param devBean 条件设备 * @param dpId 条件dpId * @param rule 条件规则 * @return */ TuyaSceneApi.createDevCondition({deviceBean,dpId,ruleType, type,range,value})
注: SceneDevBean类对象请从获取条件设备列表接口获取。
-
定时
定时指到达指定时间执行预定任务
/** * 创建定时条件 * @param display 用于展示的用户选定的时间条件 * @param name 定时条件的名称 * @param type 条件类型 * @param rule 条件规则 * @return */ TuyaSceneApi.createTimerCondition({display,name,ruleType,type,timezoneId,loops,time,data})
rule-条件规则有四种规则:
-
数值型
以温度为例,数值型条件的最终表达式为"temp > 20"的格式。您可以从获取条件列表接口获得目前支持的温度最大值、最小值、粒度(步进),您可以从获取条件列表获取支持的温度等。
-
枚举型
以天气状况为例, 枚举型条件的最终表达式为"condition == rainy"的格式,您可以从获取条件列表接口获得目前支持的天气状况,包括每种天气状况的code和名称。
-
布尔型
布尔型常见于设备型条件, 最终表达式为"dp1 == true"的格式, 您需要调用获取条件设备列表接口获取支持配置智能场景的设备, 然后根据设备id查询该设备可支持的操作,详见获取设备支持的操作。 例:
获取当前用户支持配置的条件的列表,通常用于添加或修改条件的第一步。
/**
* 获取条件列表
* @param showFahrenheit 是否显示华氏度
*/
TuyaSceneApi.getConditionList({ showFahrenheit})
其中, ConditionListBean
提供的接口为
/**
* 获取条件类别
*
* @return 类别 [1]
*/
public String getType() {
return type;
}·
/**
* 获取条件名称
*
* @return 名称
*/
public String getName() {
return name;
}
/**
* 获取Property [2]
*
* @return Property
*/
public IProperty getProperty() {
return property;
}
注:
-
目前支持的天气条件类别及其名称和Property类型
名称 Type Property Type 温度 Temp ValueProperty 湿度 humidity EnumProperty 天气 condition EnumProperty PM2.5 pm25 EnumProperty 空气质量 aqi EnumProperty 日出日落 sunsetrise EnumProperty 定时 timer TimerProperty -
Property是涂鸦智能中一种常用的数据结构,可以用来控制设备和其他功能。目前提供四种Property: 数值型,枚举型,布尔型和用于定时的类型(与条件中的数值型,枚举型,布尔型相对应), 每种Property提供不同的访问接口。详见前文规则介绍处。
TuyaHomeApi.getConditionList({ showFahrenheit}).then(data => { }).catch((error) => {})
获取可用于条件设置的设备列表。
/**
* 获取条件中的可选设备列表
* @param homeId 家庭的id
* @param callback 回调
*/
TuyaSceneApi.getConditionDevList({ homeId })
TuyaSceneApi.getConditionDevList({ homeId }).then(data => { }).catch((error) => {})
用于获取在选择设备具体的触发条件时, 可选择的任务。
/**
* 获取设备支持的任务条件列表
*
* @param devId 设备id
*/
TuyaSceneApi.getDeviceConditionOperationList({ devId })
其中, TaskListBean
提供以下接口:
/**
* 获取dp点名称, 用于界面展示
*
* @return dp点名称
*/
public String getName() {
return name;
}
/**
* 获取dpId
*
* @return dpId
*/
public long getDpId() {
return dpId;
}
/**
* 获取该dp点可配置的操作
*
* 格式:
* {
* {true, "已开启"},
* {false, "已关闭"}
* }
*
* @return
*/
public HashMap<Object, String> getTasks() {
return tasks;
}
/**
* 获取该条件的类型bool、value、enum等
*/
public String getType() {
return type;
}
TuyaSceneApi.getDeviceConditionOperationList({ devId }).then(data => { }).catch((error) => {})
用于在创建天气条件时,选择城市。 注: 目前城市列表暂时仅支持中国。
/**
* 根据国家码获取城市列表
*
* @param countryCode 国家码
*/
TuyaSceneApi.getCityListByCountryCode({ countryCode })
其中, PlaceFacadeBean
类提供以下接口:
/**
* 获取区域名称
*
* @return 区域名称
*/
public String getArea() {
return area;
}
/**
* 获取省份名称
*
* @return 省份名称
*/
public String getProvince() {
return province;
}
/**
* 获取城市名称
*
* @return 城市名称
*/
public String getCity() {
return city;
}
/**
* 获取城市id
*
* @return 城市id
*/
public long getCityId() {
return cityId;
}
TuyaSceneApi.getCityListByCountryCode({ countryCode }).then(data=>{})
根据城市id获取城市信息, 用于展示已有的天气条件。城市id可以在获取城市列表接口中获取。
/**
* 根据城市id获取城市信息
*
* @param cityId 城市id{@link PlaceFacadeBean}
* @param callback 回调
*/
TuyaSceneApi.getCityByCityIndex({cityId })
TuyaSceneApi.getCityByCityIndex({cityId }).then(data=>{})
根据经纬度获取城市信息, 用于展示已有的天气条件。
/**
* 根据经纬度获取城市信息
*
* @param lon 经度
* @param lat 纬度
* @param callback 回调
*/
TuyaSceneApi.getCityByLatLng({lon,lat})
TuyaSceneApi.getCityByLatLng({lon,lat}).then(data=>{})
场景动作指当条件触发时执行的控制设备动作。手动场景可执行的动作包含自动化场景和智能设备,自动化场景可执行的动作包含手动场景、其他自动化场景和智能设备。用户可设定的任务视用户的设备而定,请注意,并不是每一款产品都支持场景。
用于创建场景动作。
/**
* 创建场景动作
*
* @param devId 设备id
* @param tasks 要执行的任务 格式: { dpId: dp点值 }
* 例:
* {
* "1": true,
* }
* @return 场景动作
*/
TuyaSceneApi.createDpTask({devId,tasks})
TuyaSceneApi.createDpTask({
devId,
tasks: {
dpId,
value,
devId,
devName
dpName,
}
}).then(d => {})
获取支持场景动作的设备列表, 用于选择添加到要执行的动作中。
/**
* 获取动作中的可选设备列表
* @param homeId 家庭id
*/
TuyaSceneApi.getTaskDevList({homeId})
其中, DeviceBean
提供以下接口:
/**
* 获取设备名称
*
* @return 设备名称
*/
public String getName() {
return name;
}
/**
* 产品id
*
* @return 产品id
*/
public String getProductId() {
return productId;
}
/**
* 获取设备id
*
* @return 设备id
*/
public String getDevId() {
return devId;
}
/**
* 获取设备图标
*
* @return 图标地址
*/
public String getIconUrl() {
return iconUrl;
}
TuyaSceneApi.getTaskDevList({homeId}).then(d => {})
用于在创建动作时, 获取设备可执行的任务。设备id可以从获取执行动作支持的设备列表获取
/**
* 获取设备可以执行的操作
*
* @param devId 设备id
*/
TuyaSceneApi.getDeviceTaskOperationList({devId})
其中, TaskListBean
提供以下接口:
/**
* 获取dp点名称, 用于界面展示
*
* @return dp点名称
*/
public String getName() {
return name;
}
/**
* 获取dpId
*
* @return dpId
*/
public long getDpId() {
return dpId;
}
/**
* 获取该dp点可配置的操作
*
* 格式:
* {
* {true, "已开启"},
* {false, "已关闭"}
* }
*
* @return
*/
public HashMap<Object, String> getTasks() {
return tasks;
}
/**
* 获取该条件的类型bool、value、enum等
*/
public String getType() {
return type;
}
TuyaSceneApi.getDeviceTaskOperationList({devId}).then((data)=>{})
用于将条件和动作组装成场景并创建新的场景, 成功后会返回场景数据。 两种创建方法,唯一区别是否含有stickyOnTop参数
/**
* 创建场景
*
* @param homeId 家庭id
* @param name 场景名称
* @param stickyOnTop 是否显示在首页
* @param conditions 场景触发条件 {@link SceneCondition}
* @param tasks 场景执行任务 {@link SceneTask}
* @param matchType 场景条件与或关系 SceneBean.MATCH_TYPE_OR 表示满足任意条件执行,默认值;SceneBean.MATCH_TYPE_AND 表示满足所有条件
*/
TuyaSceneApi.createScene({homeId,name, stickyOnTop,background,matchType,tasks,conditionList})
TuyaSceneApi.createScene({homeId,name, stickyOnTop,background,matchType,tasks,conditionList}).then(data=>{})
用于修改场景, 成功后会返回新的场景数据。
/**
* 修改场景
*
* @param sceneReqBean 场景数据类
*/
TuyaSceneApi.modifyScene({sceneBean,sceneId})
用于执行手动场景。
/**
* 执行场景动作
*
*/
TuyaSceneApi.executeScene({ sceneId })
用于删除场景。
/**
* 删除场景
*
* @param callback 回调
*/
TuyaSceneApi.deleteScene({ sceneId })
用于开启或关闭自动化场景
/**
* 开启自动化场景
* @param sceneId
*/
TuyaSceneApi.enableScene({ sceneId })
/**
* 关闭自动化场景
* @param sceneId
*/
TuyaSceneApi.disableScene({ sceneId })
TuyaSceneApi.enableScene({ sceneId }).then((data)=>{})
TuyaSceneApi.disableScene({ sceneId }).then((data)=>{})
手动场景或自动化场景排序。注意:只能单独对手动场景或自动化场景排序,不能混排。
/**
* 场景排序
* @param homeId 家庭id
* @param sceneIds 手动场景或自动化场景已排序好的的id列表
* @param callback 回调
*/
TuyaSceneApi.sortSceneList({homeId,sceneIds})
TuyaSceneApi.sortSceneList({homeId,sceneIds}).then((data)=>{})
用于获取全部消息列表。
/**
* 获取消息列表
*
* @param callback 回调
*/
TuyaMessageApi.getMessageList();
其中, MessageBean
提供以下接口:
/**
* 获取日期和时间 格式: 2017-09-08 17:12:45
*
* @return 日期和时间
*/
public String getDateTime() {
return dateTime;
}
/**
* 获取消息图标URL
*
* @return 消息图标URL
*/
public String getIcon() {
return icon;
}
/**
* 获取消息类型名称(如果是告警类型消息则为dp点名称)
*
* @return 消息类型名称
*/
public String getMsgTypeContent() {
return msgTypeContent;
}
/**
* 获取消息内容, 可用于界面展示
*
* @return 消息内容
*/
public String getMsgContent() {
return msgContent;
}
/**
* 获取消息类型
* 0: 系统消息
* 1: 有新的设备
* 2: 有新的好友
* 4: 设备告警
*
* @return 消息类型
*/
public int getMsgType() {
return msgType;
}
/**
* 获取设备id
* 注: 只有告警类型消息才会有该字段
*
* @return 设备ID
*/
public String getMsgSrcId() {
return msgSrcId;
}
/**
* 获取消息id
*
* @return 消息id
*/
public String getId() {
return id;
}
TuyaMessageApi.getMessageList().then(data=>{})
用于批量删除消息。
/**
* 删除消息
*
* @param mIds 要删除的消息的id列表
* @param callback 回调
*/
TuyaMessageApi.deleteMessage({ids})
TuyaMessageApi.getMessageList(ids:[]).then(data=>{})
用于在用户和企业或开发者之间提供一种沟通通道。
获取该用户所有的反馈。
/**
* 获取反馈列表
*
*/
TuyaFeedBackApi.getFeedbackList()
其中, FeedbackTalkBean
类提供以下接口:
/**
* 获取日期和时间 格式: 2018-06-08 17:12:45
*
* @return 日期和时间
*/
public String getDateTime() {
return dateTime;
}
/**
* 获取最新一条反馈内容, 用于显示在列表中
*
* @return 反馈内容
*/
public String getContent() {
return content;
}
/**
* 获取反馈类目id
*
* @return 反馈类目id
*/
public String getHdId() {
return hdId;
}
/**
* 获取反馈类型
* 2: 设备故障
* 7: 其他
*
* @return 反馈类型
*/
public int getHdType() {
return hdType;
}
/**
* 获取反馈类目标题(如果为设备故障反馈即设备名称)
*
* @return 类目标题
*/
public String getTitle() {
return title;
}
TuyaFeedBackApi.getFeedbackList().then(data=>{})
获取可选择的反馈类型列表,用于创建反馈之前�选择。
/**
* 获取反馈类型列表
*
* @param callback 回调
*/
TuyaFeedBackApi.getFeedbackType()
其中, FeedbackTypeRespBean
类提供以下接口:
/**
* 获取反馈类型列表(设备列表和其他列表)
*
* @return 类型列表
*/
public ArrayList<FeedbackTypeBean> getList() {
return list;
}
/**
* 获取列表类别(目前仅有设备和其他)
*
* @return 列表类别
*/
public String getType() {
return type;
}
FeedbackTypeBean
类提供以下接口:
/**
* 获取反馈类型id
*
* @return 反馈类型id
*/
public String getHdId() {
return hdId;
}
/**
* 获取反馈类型
* 2: 设备故障
* 7: 其他
*
* @return 反馈类型
*/
public int getHdType() {
return hdType;
}
/**
* 获取反馈类型标题(如果为设备故障反馈即设备名称)
*
* @return 类型标题
*/
public String getTitle() {
return title;
}
TuyaFeedBackApi.getFeedbackType().then(data=>{})
新增一条反馈信息。
/**
* 添加反馈
*
* @param message 反馈内容
* @param contact 联系方式(电话或邮箱)
* @param hdId 反馈类目id
* @param hdType 反馈类型
*/
TuyaFeedBackApi.addFeedback({
message, // 反馈内容
contact, // 联系方式(电话或邮箱)
hdId, // 反馈类目id
hdType, // 反馈类型
})
注 hdId
, hdType
变量可以从获取反馈类型列表接口返回的FeedbackTypeBean
类中获取。
TuyaFeedBackApi.addFeedback({
message: '哈哈', // 反馈内容
contact: '123123123', // 联系方式(电话或邮箱)
hdId: '6c03b81fade341ad12bezz', // 反馈类目id
hdType: 2, // 反馈类型
})
用于获取当前反馈话题(会话场景)的消息列表。
/**
* 获取反馈消息列表
*
* @param callback 回调
*/
TuyaFeedBackApi.getMsgList({
hdId, // 反馈类目id
hdType, // 反馈类型
})
其中, FeedbackMsgBean
提供以下接口:
/**
* 获取消息内容
*
* @return 消息内容
*/
public String getContent() {
return content;
}
/**
* 获取消息时间
*
* @return 消息时间
*/
public int getCtime() {
return ctime;
}
/**
* 区分用户和后台发送的消息
* 0代表用户
*/
public int getType() {
return type;
}
TuyaFeedBackApi.getMsgList({
hdId, // 反馈类目id
hdType, // 反馈类型
}).then(data=>{})
用于在当前对话中添加新的反馈消息。
/**
* 添加新反馈
*
* @param msg 反馈内容
* @param contact 联系方式
*/
TuyaFeedBackApi.addMsg({
message,
contact, // 联系方式(电话或邮箱)
hdId, // 反馈类目id
hdType, // 反馈类型
})
TuyaFeedBackApi.addMsg({
message: 'hahahaah', // 反馈内容
contact: '123123123', // 联系方式(电话或邮箱)
hdId: '6c03b81fade341ad12bezz', // 反馈类目id
hdType: 2, // 反馈类型
}).then(data => { })
基于Tuya SDK开发的app,Tuya平台支持Push功能,支持给用户发送运营Push和产品的告警Push。
将aliasId注册到涂鸦云
* @param aliasId 用户别名 为第二步向友盟注册用户别名的alias
* @param pushProvider 注册push的类别 友盟填"umeng"
TuyaPushApi.registerDevice({
aliasId:'',
pushProvider:''
})
如果使用了友盟第三方通道,弹窗的activity必须命名为SpecialPushActivity.
以小米为例,SpecialPushActivity继承自UmengNotifyClickActivity,并且完整的包名路径为com.activity.SpecialPushActivity
.
继承 UmengMessageService, 实现自己的Service来完全控制达到消息的处理,参考友盟文档
public class MyPushIntentService extends UmengMessageService {
@Override
public void onMessage(Context context, Intent intent) {
try {
String message = intent.getStringExtra(AgooConstants.MESSAGE_BODY);
UMessage msg = new UMessage(new JSONObject(message);
UmLog.d(TAG, "message=" + message); //消息体
UmLog.d(TAG, "custom=" + msg.custom); //自定义消息的内容
UmLog.d(TAG, "title=" + msg.title); //通知标题
UmLog.d(TAG, "text=" + msg.text); //通知内容
PushBean pushBean=PushBean.formatMessage(msg.custom)
} catch (Exception e) {
L.e(TAG, e.toString());
}
}
-
msg.custom中的内容就是收到的推送信息
-
msg.custom的具体协议格式: custom=tuya://message?a=view&ct=${title}&cc=${content}&p={}&link=tuyaSmart%3A%2F%2Fbrowser%3Furl%3Dhttp%253A%252F%252Fwww.baidu.com;
-
通过PushBean.formatMessage()来对数据进行解析得到PushBean
涂鸦开发者平台 - 用户运营 - 消息中心 - 新增消息
涂鸦开发者平台 - 对应产品 - 扩展功能 - 告警设置 - 新增告警规则(应用推送方式)
对于国外的用户,需要集成Google的FCM推送服务。先参照官方文档 将 Firebase 添加到您的 Android 项目,之后配置客户端,参考 Android客户端配置Firebase
在继承FirebaseInstanceIdService
类的onTokenRefresh
方法监控注册令牌的生成,并将令牌注册到涂鸦云。
* @param aliasId 用户别名 即fcm生成的token
* @param pushProvider 注册push的类别 fcm填"gcm"
TuyaPushApi.registerDevice({
aliasId:'',
pushProvider:''
})
网关类封装了ZigBee网关的相关操作,包括控制,查询子设备,监听子设备状态等。 可以通过TuyaGatewayApi。
TuyaGatewayApi{
/**
* 发送命令
*
* @param dps
*/
TuyaGatewayApi.publishDps({devId,localId,dps})
/**
* 广播控制设备
*
* @param dps
*/
TuyaGatewayApi.broadcastDps({devId,dps})
/**
* 组播控制设备
*
* @param localId
* @param dps
* @param callback
*/
TuyaGatewayApi.multicastDps({localId,devId,dps);
/**
* 获取网关子设备
*
* @param callback
*/
TuyaHomeDataManagerApi.getSubDevList({devId})
/**
* 注册子设备信息变更
*
* @param listener
*/
TuyaGatewayApi.registerSubDevListener({ devId },()=>{
console.log('onSubDevDpUpdate')
},()=>{
console.log('onSubDevRemoved')
},()=>{
console.log('onSubDevAdded')
},()=>{
console.log('onSubDevInfoUpdate')
},()=>{
console.log('onSubDevStatusChanged')
})
/**
* 注销子设备信息变更
*/
TuyaGatewayApi.unRegisterSubDevListener({devId})