更新记录
1.0.29(2023-01-05)
优化内部激活逻辑
1.0.28(2023-01-04)
- 适配xcode 最新版,iOS 版本最低支持ios 11
1.0.27(2022-12-22)
插件配置里初始化增加valid参数
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:11 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
插件说明
由于涂鸦SDK 4.x版本在新建的应用里已经不支持(已经集成购买的用户还能继续使用),所以本插件不再维护,新版本SDK 5.x的插件已经迁移至https://ext.dcloud.net.cn/plugin?id=11937
前言
wrs-tuya是涂鸦官网针对app开发的插件,包含Wi-Fi、蓝牙、有线、zigbee版本,可以控制照明、传感、家电、网关等等遵循涂鸦协议的外设,包含账号家庭管理、设备配网、设备控制管理等等
支持定制,联系方式 QQ:252797991
功能
按照涂鸦APIhttps://developer.tuya.com/cn/docs/app-development/android-energy-consumption?id=Kaosznjd98j7v分类,为了快速查找API方法,可以现在涂鸦官网复制中文方法名称,然后在此网页上搜索,如要查找发送手机号码验证码的API,复制“发送手机号码验证码”在此网页上搜索相关API,有些API无法搜索再仔细阅读此文当或查看demo查找。 关于涂鸦云开发(垂直品类硬件API(万能红外开放能力、设备连接服务、设备OTA固件升级、实时音视频、睡眠带开放能力、体脂秤开放能力、智能门锁开放能力、视频云存储 、邮件服务 、 语音消息服务、消息推送服务、短信服务 、内测版 API)、行业通用API等等)插件见https://ext.dcloud.net.cn/plugin?id=6744
快速入门
设备配网注意点
- 设备配网前需要先创建一个家庭,然后选择一个家庭
- 配网前手机需要开启定位,手机连接Wi-Fi,不能用4G网络
- Wi-Fi路由器需要关闭5G信号(涂鸦设备目前只支持2.4GHz网络),登录路由器,关闭5GHz(各种品牌路由器关闭方法参考厂家说明或自定百度)
集成安全图片和设置 Appkey 和 AppSecret
- 在涂鸦IOT平台里的App 工作台,在App -> App SDK -> SDK开发创建应用,并在应用里绑定Android、iOS包名(即uniapp的android包名、iOS的Bundle ID)
- android还需要在涂鸦IOT平台里(点击创建的应用进入应用详情-> 获取密钥-> Android -> 证书)绑定签名的SHA256,所以在自定义基座或云打包时需要使用自己的签名文件,不能用云端的签名。(SHA265的获取可参考涂鸦的说明https://developer.tuya.com/cn/docs/app-development/iot_app_sdk_core_sha1?id=Kao7c7b139vrh)****
- 进入到创建的应用详情页的SDK页面里,在 获取密钥 中,点击 下载安全图片 > 安全图片下载 下载安全图片。
- 将下载的安全图片重命名为 t_s.bmp,android放置到工程目录的 nativeplugins/wrs-tuya/android/assets 文件夹下,ios放到nativeplugins/wrs-tuya/ios/BundleResources文件夹下,没有文件夹就创建对应文件夹,参考demo
- 在插件市场的本插件页面,右边选择“试用”,选择需要试用的应用
- 在项目的manifest.json的app原生插件-》云插件选择本插件,打包自定义基座(自定义基座或云打包时,需要使用上面步骤里涂鸦平台上绑定的包名,Android使用上面SHA256对应的签名文件),运行时选择自定义基座运行
- app启动时初始化,用创建SDK应用页面的AppKey、AppSecret替换App.vue里的值进行初始化
- 有些API的入参和出参在Android、iOS平台上可能不一样,需要各端去适配下
- 由于涂鸦API接口众多,使用过程中如果出现不适配情况请联系QQ:252797991
如果不了解在uniapp里如何集成使用原生插件的同学,请参考
- 简书:https://www.jianshu.com/p/830ccc503e29
- CSDN: https://blog.csdn.net/wenrisheng/article/details/124057700
涂鸦错误码查询链接:
https://developer.tuya.com/cn/docs/app-development/errorcode?id=Ka6o3bubtl735
调用接口时,出现"xxx非法客户端"的错误排查步骤: android:
- 检查uniapp项目的包名是否与涂鸦IOT平台里对应应用的包名一致
- 检查安全图片是否已经替换到uniapp项目里,图片命名是否正确
- android签名的SHA256是否与涂鸦IOT平台里对应应用的包名一致
- 删除手机app重新自定义基座安装
iOS:
- 检查uniapp项目的Bundle ID是否与涂鸦IOT平台里对应应用的包名一致
- 检查安全图片是否已经替换到uniapp项目里,图片命名是否正确
- 删除手机app重新自定义基座安装
ios打包时如果报错日志包含有duplicate、Masonry等关键字,这是因为勾选了uniapp项目的某些app原生模块(如:VideoPlayer(视频播放)、高德地图等)导致Masonry库冲突了,这时请使用涂鸦SDK noMasonry插件
由于ios ide xcode 14以后最低支持ios 11了,所以需要在manifest.json里增加"deploymentTarget" : "11.0"
/* ios打包配置 */
"ios" : {
"idfa" : false,
"privacyDescription" : {
"NSPhotoLibraryUsageDescription" : "选择图片使用相册权限需要您的授权",
"NSCameraUsageDescription" : "选择图片使用相机权限需要您的授权",
"NSPhotoLibraryAddUsageDescription" : "选择图片使用相册权限需要您的授权",
"NSMicrophoneUsageDescription" : "选择图片使用MIC权限需要您的授权"
},
"dSYMs" : false,
"deploymentTarget" : "11.0" //可选,字符串类型,iOS支持的最低版本
},
没有增加这个配置的话打包时候会报错:
Undefined symbols for architecture arm64:
\"_objc_msgSend$componentsSeparatedByString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$containsString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$stringByReplacingOccurrencesOfString:withString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$stringWithUTF8String:\", referenced from:
-[NSObject(Dictionary) propertyName:] in WRSTuyaPlugin(NSObject+Dictionary.o)
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
插件模块说明
插件目前分为2个模块:
// 模块1,主要有初始化SDK,监听Wi-Fi、蓝牙,是否开始日志等功能
var tuya = uni.requireNativePlugin("wrs-tuya");
// 模块2,主要有涂鸦智能生活模块API
var tuyaIntelligentlife = uni.requireNativePlugin("wrs-tuya-intelligentlife");
- 初始化SDK
初始化SDK有3种方式,任选一种即可
- 在项目的manifest.json的app原生插件-》涂鸦插件里分别填写Android和iOS的appkey、appsecret、valid(推荐这种方式),这里的valid表示是否采用这里的appKey、appSerect来初始化,yes 或 no,填写yes表示采用这种方式来初始化SDK,填写no表示采用其它2种方式来初始化SDK
- 在App.vue启动onLaunch方法里调用tuya.init(),该方法会在子线程同步初始化SDK
// #ifdef APP-PLUS
var tuya = uni.requireNativePlugin("wrs-tuya");
// #endif
onLaunch: function() {
// #ifdef APP-PLUS
var params = {};
switch (uni.getSystemInfoSync().platform) {
case 'android':
params.appkey = "8xmrfgm7kqfpwgg7vvyg";
params.appSerect = "cyjqnyxdvtg3srgx7k3p8qxvt4ynupfy";
break;
case 'ios':
params.appkey = "m7kgtxgrgrq55rtuyd74";
params.appSerect = "vh3tnxxmcg5y9sdudnftqptquxa9u9gq";
break;
default:
break;
}
tuya.init(params);
// #endif
},
- 在App.vue启动onLaunch方法里调用tuya.initInMainThread(),该方法会在UI主线程线程异步初始化SDK
// #ifdef APP-PLUS
var tuya = uni.requireNativePlugin("wrs-tuya");
// #endif
onLaunch: function() {
// #ifdef APP-PLUS
var params = {};
switch (uni.getSystemInfoSync().platform) {
case 'android':
params.appkey = "8xmrfgm7kqfpwgg7vvyg";
params.appSerect = "cyjqnyxdvtg3srgx7k3p8qxvt4ynupfy";
break;
case 'ios':
params.appkey = "m7kgtxgrgrq55rtuyd74";
params.appSerect = "vh3tnxxmcg5y9sdudnftqptquxa9u9gq";
break;
default:
break;
}
tuya.initInMainThread(params);
// #endif
},
- 开启或关闭日志
// 开启日志
tuya.setDebugMode({
debugMode: true
});
- uniapp端日志回调,仅支持android
// 此方法需要在tuya.setDebugMode方法前调用且debugMode为true时生效
tuya.setLogCallback((resp)=>{
});
蓝牙Wi-Fi状态
- Wi-Fi是否已经开启
var resp = tuya.checkWifiOpened();
if(isString(resp)) {
resp = JSON.parse(resp);
}
if(resp.flag) { // wifi打开了
} else { // Wi-Fi关闭了
}
- 获取Wi-Fi名称
tuya.getSSID((resp) => {
if(resp.ssid != null) { // Wi-Fi名称
}
});
- 打开Wi-Fi,仅对Android有效,iOS无效,iOS提示用户去设置里打开Wi-Fi
var resp = tuya.openWifi();
- 关闭Wi-Fi,仅对Android有效,iOS无效,iOS提示用户去设置里关闭Wi-Fi
var resp = tuya.closeWifi();
- 监听网络状态
// 监听当前网络
tuya.registerNetworkStateListener((resp) => {
switch (resp.status) {
case "NETWORK_WIFI":
this.wifiIsOpen = true;
this.showMsg("当前是Wi-Fi网络");
break;
default:
this.showMsg("当前不是Wi-Fi网络");
break;
}
});
- 取消动态监听网络状态
tuya.unregisterNetworkStateListener();
- 判断蓝牙是否已经打开
if(this.isIos) {
tuya.checkBluetoothOpened((resp)=>{
var msg = "";
if (resp.permission) {
if (resp.permission == 5) { // 蓝牙已经打开
msg = "蓝牙已经打开";
} else if (resp.permission == 4) { // 蓝牙关闭
msg = "蓝牙关闭";
} else { // 蓝牙不支持或状态未知
msg = "蓝牙不支持或状态未知";
}
} else { // iOS系统版本过低,无法获取蓝牙状态
msg = "iOS系统版本过低,无法获取蓝牙状态";
}
this.showMsg(msg);
});
} else {
var resp = tuya.checkBluetoothOpened();
if (isString(resp)) {
resp = JSON.parse(resp);
}
if(resp.flag) {
this.showMsg("蓝牙已经打开");
} else {
this.showMsg("蓝牙没有已经打开");
}
}
- 打开蓝牙,仅对Android有效(蓝牙打开或关闭需要一段时间,可以注册回调监听状态),iOS无效,iOS提示用户去设置里打开蓝牙
var resp = tuya.openBluetooth();
- 关闭蓝牙,仅对Android有效,iOS无效,iOS提示用户去设置里关闭蓝牙
var resp = tuya.closeBluetooth();
- 动态监听蓝牙状态
tuya.registerBluetoothStateListener((resp) => {
var msg = "";
if (this.isIos) { // iOS蓝牙状态判断
if (resp.permission) {
if (resp.permission == 5) { // 蓝牙已经打开
msg = "蓝牙已经打开";
} else if (resp.permission == 4) { // 蓝牙关闭
msg = "蓝牙关闭";
} else { // 蓝牙不支持或状态未知
msg = "蓝牙不支持或状态未知";
}
} else { // iOS系统版本过低,无法获取蓝牙状态
msg = "iOS系统版本过低,无法获取蓝牙状态";
}
} else { // Android蓝牙状态判断
var openOrClosed = resp.openOrClosed;
if (openOrClosed) { // 蓝牙已经打开
msg = "蓝牙已经打开";
} else { // 蓝牙已经关闭
msg = "蓝牙已经关闭";
}
}
console.log("动态监听蓝牙状态:" + msg);
});
- 取消动态监听蓝牙状态
tuya.unregisterBluetoothStateListener();
智能生活App SDK
var tuyaIntelligentlife = uni.requireNativePlugin("wrs-tuya-intelligentlife");
用户账号
手机号码
- 查询验证码服务可用地区
tuyaIntelligentlife.getWhiteListWhoCanSendMobileCodeSuccess((resp)=>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 发送手机号码验证码
var params = {
userName: "xxx",
region:"",
countryCode: "86",
type: 1 // 发送验证码类型。取值: 1:使用手机号码注册账号时,发送验证码 2:使用手机号码登录账号时,发送验证码 3:重置手机号码注册的账号的密码时,发送验证码
};
tuyaIntelligentlife.sendVerifyCodeWithUserName(params,(resp)=>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 校验填入的验证码 验证码验证功能
var params = {
userName: "xxx",
region:"",
countryCode: "86",
code:"XXX",
type: 1 // 发送验证码类型。取值: 1:使用手机号码注册账号时,发送验证码 2:使用手机号码登录账号时,发送验证码 3:重置手机号码注册的账号的密码时,发送验证码
};
tuyaIntelligentlife.checkCodeWithUserName(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 使用手机号码注册账号
var params = {
countryCode: "86",
phone:"XXX",
password: "XX",
code: "XX"
};
tuyaIntelligentlife.registerAccountWithPhone(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 判断是否已经登录
var resp = tuyaIntelligentlife.islogin();
if(isString(resp)) {
resp = JSON.parse(resp);
}
if(resp.islogin) {// 是否已经登陆了涂鸦账号
uni.reLaunch({
url: './main'
});
}
- 使用手机号码和密码登录账号
var params = {
countryCode: "86",
phone:"XXX",
password: "XX"
};
tuyaIntelligentlife.loginWithPhonePassword(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 使用手机号码和验证码登录账号
var params = {
countryCode: "86",
phone:"XXX",
code: "XX"
};
tuyaIntelligentlife.loginWithPhone(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 重置手机号码注册的账号密码
var params = {
countryCode: "86",
phone:"XXX",
code: "XX",
password: "xxx"
};
tuyaIntelligentlife.resetPhonePassword(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 登陆用户绑定手机号
var params = {
countryCode: "86",
phoneNumber:"XXX",
code: "XX"
};
tuyaIntelligentlife.bindMobile(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
邮箱账号
- 邮箱密码注册
var params = {
countryCode: "xx",
email:"xx",
password: "XX",
code: 1
};
tuyaIntelligentlife.registerAccountWithEmail(params, (resp) =>{
if(resp.flag) { // 成功
// ios注册成功可能没有用户信息返回或用户信息数据与Android不一样,各端如果需要用户信息需要各自去适配
} else { // 失败
}
});
- 邮箱密码登录
var params = {
countryCode: "xx",
email:"xx",
password: "XX"
};
tuyaIntelligentlife.loginWithEmail(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 邮箱重置密码
var params = {
countryCode: "xx",
email:"xx",
code: "XX",
password: "xx"
};
tuyaIntelligentlife.resetEmailPassword(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
用户UID
- 用户 UID 登录注册接口,用户 UID(User ID)登录采用注册和登录为一体的接口,如果注册了账号就自动登录,如果没有注册就自动注册并且登录。
var params = {
countryCode: "xx",
uid:"xx",
password: "XX",
isCreateHome: true // isCreateHome参数可选,非必传
};
tuyaIntelligentlife.loginOrRegisterWithUid(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
第三方平台
- 微信登录
var params = {
countryCode: "xx",
code:"xx"
};
tuyaIntelligentlife.loginByWechat(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- QQ 登录
var params = {
countryCode: "xx",
userId:"xx",
accessToken:"xxx"
};
tuyaIntelligentlife.loginByQQ(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- Facebook 登录
var params = {
phoneCode: "xx",
token:"xx"
};
tuyaIntelligentlife.loginByFacebook(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- Auth2登录
var params = {
countryCode: "xx",
type:"xx",
accessToken:"XX",
extraInfo:""
};
tuyaIntelligentlife.thirdLogin(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
匿名用户
- 匿名注册登录
var params = {
countryCode: "xx",
nickName:"xx"
};
tuyaIntelligentlife.touristRegisterAndLogin(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 匿名登录绑定账号
var params = {
countryCode: "xx",
userName:"xx",
verifyCode:"xx",
password:"xx"
};
tuyaIntelligentlife.touristBindWithUserName(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
二维码授权
- 用户获取 Token
var params = {
countryCode: "xx"
};
tuyaIntelligentlife.getQRCodeToken(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 获取登录状态
var params = {
countryCode: "xx",
token:"xx"
};
tuyaIntelligentlife.QRCodeLogin(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 授权接口
var params = {
countryCode: "xx",
token:"xx",
homeId:2121
};
tuyaIntelligentlife.QRcodeAuth(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
账号详情
账号绑定
- 获取验证码 (邮箱绑定获取验证码)
var params = {
countryCode: "xx",
email:"xx"
};
tuyaIntelligentlife.sendBindVerifyCodeWithEmail(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 绑定账号邮箱
var params = {
countryCode: "xx",
email:"xx",
code:"XX",
sId:"XX"
};
tuyaIntelligentlife.bindEmail(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
修改用户信息
- 修改用户头像
var params = {
file: "xx" // 头像图片路径
};
tuyaIntelligentlife.uploadUserAvatar(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 设置用户温度单位
var params = {
unit: 1 // 1:TempUnitEnum.Celsius摄氏度 2:TempUnitEnum.Fahrenheit华摄度
};
tuyaIntelligentlife.setTempUnit(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 修改昵称
var params = {
name: "xx"
};
tuyaIntelligentlife.reRickName(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 更新用户时区
var params = {
timezoneId: "xx"
};
tuyaIntelligentlife.updateTimeZone(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 更新用户定位
var params = {
lat: "1255.011",
lon:"464.222"
};
tuyaIntelligentlife.setLatAndLong(params);
- 同步用户信息
tuyaIntelligentlife.updateUserInfo((resp) =>{});
账号退出登录
- 匿名退出登录
tuyaIntelligentlife.touristLogOut((resp) =>{});
- 其它账号退出登录
tuyaIntelligentlife.logout((resp) =>{});
- 账号注销
tuyaIntelligentlife.cancelAccount((resp) =>{});
- 登录会话过期
tuyaIntelligentlife.setOnNeedLoginListener((resp) =>{});
家庭管理
家庭信息
- 创建家庭
var params = {
name: "xx",
lon: 121.00,
lat:21.2,
geoName:"xx",
rooms:["ss"]
};
tuyaIntelligentlife.createHome(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
<!-- - 切换当前家庭,已废弃,暂时没有业务需要,替换成getHomeDetail接口
```
var params = {
homeId: 1212
};
tuyaIntelligentlife.switchHome(params);
``` -->
- 查询家庭列表
tuyaIntelligentlife.queryHomeList((resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 新增一个家庭监听
tuyaIntelligentlife.registerTuyaHomeChangeListener((resp) =>{
var opt = resp.opt;
if(opt == "onHomeAdded") {
} else if(opt == "onHomeInvite") {
} else if(opt == "onHomeRemoved") {
} else if(opt == "onHomeInfoChanged") {
} else if(opt == "onSharedDeviceList") {
} else if(opt == "onSharedGroupList") {
} else if(opt == "onServerConnectSuccess") {
}
});
- 查询家庭详细信息,做设备配网或操作之前先调用下getHomeDetail接口,一般放到主页或app启动时调用
var params = {
homeId: 121
};
tuyaIntelligentlife.getHomeDetail(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 查询家庭离线的详细信息
var params = {
homeId: 121
};
tuyaIntelligentlife.getHomeLocalCache(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 修改家庭信息
var params = {
homeId: 121,
name:"xx",
lon:5411,
lat:5454,
geoName:"xx",
rooms:["ss"]
};
tuyaIntelligentlife.updateHome(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 注销家庭
var params = {};
params.homeId = 111;
tuyaIntelligentlife.dismissHome(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
房间信息
- 新增房间
var params = {
homeId: 121,
name:"xx"
};
tuyaIntelligentlife.addRoom(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 删除房间
var params = {
homeId: 121,
roomId: 121
};
tuyaIntelligentlife.removeRoom(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 房间排序
var params = {
homeId: 121,
idList:[454]
};
tuyaIntelligentlife.sortRoom(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 根据设备查询房间信息
var params = {
devId: "xx"
};
var result = tuyaIntelligentlife.getDeviceRoomBean(params);
- 修改房间名称
var params = {
roomId: 121,
homeId:211,
name:"xx"
};
tuyaIntelligentlife.updateRoom(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 自定义房间背景图
var params = {
file: ”/ssss/xxxx.png“,
roomId:2121,
homeId:211
};
tuyaIntelligentlife.updateIcon(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 添加设备到房间
var params = {
devId: ”xx“,
roomId:2121,
homeId:211
};
tuyaIntelligentlife.addDevice(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 从房间中移除设备
var params = {
devId: ”xx“,
roomId:2121
};
if(isIOS) { // android不需要homeId参数,iOS需要homeId参数
params.homeId = 211
}
tuyaIntelligentlife.removeDevice(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 添加群组到房间
var params = {
groupId: 4545,
roomId:2121,
homeId:211,
};
tuyaIntelligentlife.addGroup(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 从房间中移除群组
var params = {
groupId: 4545,
roomId:2121,
homeId:211
};
tuyaIntelligentlife.removeGroup(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 批量修改房间与群组和设备的关系
var params = {
roomId:2121,
list:[{id:"xx",type:1}]
};
tuyaIntelligentlife.moveDevGroupListFromRoom(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
成员信息
- 添加家庭成员
role: int ROLE_CUSTOM = -1; int ROLE_MEMBER = 0; int ROLE_ADMIN = 1; int ROLE_OWNER = 2; int INVALID_ROLE = -999;
var params = {
member:{
homeId: 11,
nickName:"",
admin: true,
memberId: 12,
headPic:"",
account:"",
countryCode:"",
invitationCode: "41",
role:1,
autoAccept:true
}
};
tuyaIntelligentlife.addMember(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 删除家庭成员
var params = {
memberId:11
};
tuyaIntelligentlife.removeMember(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 获取家庭成员列表
var params = {
homeId:11
};
tuyaIntelligentlife.queryMemberList(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
设备配网
- 获取配网token
tuyaIntelligentlife.getActivatorToken({homeId: "xx"}, (resp) => {
})
- 快连模式 热点模式
var params = {
ssid:"",
password:"",
token:"", // 非必填,如果没有传token,跟根据homeId会自动获取
timeout:100,
homeId:110, // 非必填,用于没有传token时自动获取token
activatorModel:"EZ" // EZ:快连模式 AP:热点模式 QR:二维码
};
tuyaIntelligentlife.startActivator(params, (resp) =>{
if(resp.flag) { // 成功
var opt = resp.opt;
if(opt == "onStep") { // 某个设备正在配网
} else if(opt == "onActiveSuccess") {// 某个设备配网成功
} else if(opt == "onError") { // 某个设备配网失败
}
} else { // 失败
}
});
- 停止配网
tuyaIntelligentlife.stopActivator()
- 摧毁配网对象
tuyaIntelligentlife.destroyActivator()
- startGwSearch
var params = {};
params.timeout = 100;
params.token = "xx";
params.homeId = 111;
tuyaIntelligentlife.startGwSearch(params, (resp) => {})
摄像头二维码配网
有线设备配网
- 有线设备配网,有线Zigbee网关
// 有线设备配网,有线Zigbee网关激活配网
const value = uni.getStorageSync('currentHome');
var homeId = value.homeId;
var params = {};
params.timeout = 100;
params.homeId = homeId;
// params.token = "";
tuyaIntelligentlife.startGwSearch(params, (resp) => {
var flag = resp.flag;
if(flag) {
var opt = resp.opt;
if(opt == "onStep") {
var step = resp.step;
var data = resp.data;
if(isString(data)) {
data = JSON.parse(data);
}
this.showMsg("搜索到设备进行配网,当前配网步骤:" + step + " data:" + data)
} else if(opt == "onActiveSuccess") {
var dev = resp.dev;
var name = dev.name;
this.showMsg("设备:" + name + "配网成功")
} else if(opt == "onError") { // 某个设备配网失败
this.showMsg("某个设备:" + "code:" + resp.code + " error:" + resp.error)
}
} else {
console.log("配网搜索失败");
}
});
- 有线设备停止配网
tuyaIntelligentlife.stopGwSearch();
闪电搜索和配网
子设备配网
- 子设备配网
var params = {
devId:"xx" // ZigBee网关Id
};
tuyaIntelligentlife.startGwSubDevActivator(params, (resp) =>{
if(resp.flag) { // 成功
var opt = resp.opt;
if(opt == "onStep") { // 某个设备正在配网
} else if(opt == "onActiveSuccess") {// 某个设备配网成功
} else if(opt == "onError") { // 某个设备配网失败
}
} else { // 失败
}
});
- 子设备停止配网
tuyaIntelligentlife.stopGwSubDevActivator()
- 子设备摧毁释放配网对象
tuyaIntelligentlife.destoryGwSubDevActivator()
蓝牙体系
扫描设备
- 开始扫描
var params = {};
params.scanType = "SIG_MESH"; // scanType支持:SINGLE、MESH、SIG_MESH、NORMAL、TY_BEACON
params.timeout = 60 * 1000;
params.homeId = 111;
tuyaIntelligentlife.startLeScan(params, (resp) => {})
- 查询设备名称
var params = {};
params.productId = "xx";
params.uuid = "";
params.mac = "";
tuyaIntelligentlife.getActivatorDeviceInfo(params, (resp) => {})
- 停止扫描
tuyaIntelligentlife.stopLeScan()
单点设备配网
- 开始单点设备入网
var params = {};
// android参数
params.homeId = 11;
params.address = "";
params.deviceType = 1;
params.uuid = "";
params.productId = "";
// ios参数
params.homeId = 11;
params.address = "";
params.uuid = "";
params.productId = "";
params.mac = "";
params.isActive = true,
params.bleType = 1;
params.isSupport5G = false;
params.isProuductKey = false;
params.bleProtocolV = false;
tuyaIntelligentlife.singleActivator(params, (resp)=>{})
- 取消单点设备入网,仅支持Android,iOS暂时没有找到对应接口
tuyaIntelligentlife.stopBleConfig({uuid: ""})
双模设备配网
- 双模设备入网
var params = {};
// android参数
params.homeId = 11;
params.deviceType = 1;
params.uuid = "";
params.address = "";
params.mac = "";
params.ssid = "";
params.pwd = "";
params.timeout = 120 * 1000;
// ios参数
params.homeId = 11;
params.uuid = "";
params.productId = "";
params.ssid = "";
params.pwd = "";
params.timeout = 120 * 1000;
tuyaIntelligentlife.dualActivator(params, (resp) =>{})
- 取消双模设备入网,仅支持Android,iOS暂时没有找到对应接口
var params = {};
params.uuid = "";
tuyaIntelligentlife.stopDualActivator();
- 关闭轮询,仅支持ios,android暂时没有找到对应接口
tuyaIntelligentlife.stopDiscover();
-
双模设备蓝牙兜底配网
-
蓝牙兜底双模设备连云
蓝牙设备操作
- 判断设备在线状态
- 通过通用方式查询 与 Wi-Fi 设备一致(此状态是综合状态,若蓝牙设备添加到网关下面 则蓝牙设备可云端在线),仅支持Android
var params = {};
params.devId = "";
var resp = tuyaIntelligentlife.getIsOnline(params);
if(isString(resp)) {
resp = JSON.parse(resp);
}
- 查询设备蓝牙是否本地连接
Android:
var params = {};
params.devId = "";
var resp = tuyaIntelligentlife.isBleLocalOnline(params);
if(isString(resp)) {
resp = JSON.parse(resp);
}
ios:
var params = {};
params.uuid = "";
var resp = tuyaIntelligentlife.isBleLocalOnline(params);
if(isString(resp)) {
resp = JSON.parse(resp);
}
- 连接设备
Android:
var params = {};
// params.devIds = [""];// 此参数已经过时,但还能使用
params.devs = [
{
devId: "",
autoConnect: true,
directConnect: true,
level: "normal", // normal或force
scanTimeout: 10
}
];
tuyaIntelligentlife.connectBleDevice(params);
ios:
var params = {};
params.uuid = “”;
params.productKey = "";
tuyaIntelligentlife.connectBLEWithUUID(params, (resp) => {});
- 断开设备
Android:
var params = {};
params.devIds = [""];
tuyaIntelligentlife.disconnectBleDevice(params, (resp) => {});
ios:
var params = {};
params.uuid = "";
tuyaIntelligentlife.disconnectBLEWithUUID(params, (resp) => {});
- 设备操作
设备管理
- 初始化设备控制类
// ITuyaDevice
var ITuyaDevice = tuyaIntelligentlife.newDeviceInstance({devId:"xx"})
- 注册设备监听
var params = {};
params.devIds = ["xx"];
tuyaIntelligentlife.registerDevListener(params, (resp) => {
var devId = resp.devId;
var opt = resp.opt;
switch (opt) {
case "onDpUpdate":
var dpStr = resp.dpStr;
console.log("onDpUpdate:" + dpStr);
var dps = JSON.parse(dpStr);
this.onDpUpdate(dps);
break;
case "onRemoved":
break;
case "onStatusChanged":
var online = resp.online;
break;
case "onNetworkStatusChanged":
var status = resp.status;
break;
case "onDevInfoUpdate":
break;
default:
break;
}
});
// 监听单个设备,仅支持Android
var params = {};
params.devId = ["xx"];
tuyaIntelligentlife.registerSingleDevListener(params, (resp) => {});
- 取消设备监听
var params = {};
params.devIds = ["xx"];
tuyaIntelligentlife.unRegisterDevListener(params);
// 取消单个设备监听,仅支持Android
var params = {};
params.devId = ["xx"];
tuyaIntelligentlife.unRegisterSingleDevListener(params, (resp) => {});
- removeDevice
var params = {};
params.devId = "";
params.roomId = 2222;
params.homeId = 544;
params.devId = "";
tuyaIntelligentlife.removeDevice(params, (resp) => {
if(resp.flag) {
}
})
- 删除设备
tuyaIntelligentlife.remove({devId: this.devId}, (resp) => {
if(resp.flag) { // 删除成功
} else {
}
});
- 查询设备信息,调用getDp接口后再通过registerDevListener监听数据回调
var params = {};
params.devId = "xx";
params.dpId = "xx";
tuyaIntelligentlife.getDp(params, (resp) => {
if(resp.flag) {
} else {
}
});
- 修改设备名称
var params = {};
params.devId = "xx";
params.name = "xx";
tuyaIntelligentlife.renameDevice(params, (resp) => {
if(resp.flag) {
} else {
}
});
- 移除设备
var params = {};
params.devId = "xx";
tuyaIntelligentlife.removeDevice(params, (resp) => {
if(resp.flag) {
} else {
}
});
- 恢复出厂设置
var params = {};
params.devId = "";
tuyaIntelligentlife.resetFactory()
- 查询 Wi-Fi 信号强度, android直接从resp获取信号强度,iOS需要通过registerDevListener监听数据回调
var params = {};
params.devId = "";
tuyaIntelligentlife.requestWifiSignal(params, (resp) => {})
- 回收设备资源,仅支持Android
var params = {};
params.devId = "";
tuyaIntelligentlife.onDestroy()
- 查询固件升级信息
tuyaIntelligentlife.getOtaInfo({devId:"", (resp) =>{}})
设备控制
- 获取设备信息
// DeviceBean
var deviceBean = tuyaIntelligentlife.getDeviceBean({devId:"xx"})
- 获取设备功能点 getSchema
var schema = tuyaIntelligentlife.getSchema({devId:"xx"})
- 设备功能点
var dps = {"101": true};
var params = {};
params.devId = "xx";
params.dps = dps;
params.publishMode = "auto"// auto: 自动控制 local:局域网控制 internet:云端控制 http: http mqtt:mqtt 不传publishMode参数:指定通道控制
tuyaIntelligentlife.publishDps(params, (resp) => {
if (resp.flag) {
// 指令下发成功并不是指设备真正操作成功,只是意味着成功发送指令。操作成功会有 DP 数据信息通过 registerDevListener onDpUpdate 接口返回。
// uni.showToast({
// title: "指令下发成功",
// duration: 2000
// });
} else {
uni.showToast({
title: "code:" + resp.code + " error:" + resp.error,
duration: 2000
});
}
});
- publishOrdersDps
var dps = {"101": true};
var params = {};
params.devId = "xx";
params.orders = "";
tuyaIntelligentlife.publishOrdersDps(params, (resp) => {
});
- 获取子设备列表
var params = {
devId:"xx" // ZigBee网关Id
};
tuyaIntelligentlife.getSubDevList(params, (resp) =>{
if(resp.flag) { // 成功
} else { // 失败
}
});
- 注册子设备监听
var params = {
devId:"xx"
};
tuyaIntelligentlife.registerSubDevListener(params, (resp) =>{
var opt = resp.opt;
if(opt == "onSubDevDpUpdate") {
} else if(opt == "onSubDevRemoved") {
} else if(opt == "onSubDevAdded") {
} else if(opt == "onSubDevInfoUpdate") {
} else if(opt == "onSubDevStatusChanged") {
}
});
- 注销子设备监听
var params = {
devId:"xx"
};
tuyaIntelligentlife.unRegisterSubDevListener(params);
- 子设备单个控制
var params = {
devId:"xx",
nodeId: "xx" ,
dps:{"1212": true}
};
tuyaIntelligentlife.publishDpsSubDev(params, (resp) =>{
});
- 子设备群组控制
var params = {
devId:"xx",
nodeId: "xx" ,
dps:{"1212": true}
};
tuyaIntelligentlife.multicastDps(params, (resp) =>{
});
- 子设备广播控制
var params = {
devId:"xx",
nodeId: "xx" ,
dps:{"1212": true}
};
tuyaIntelligentlife.broadcastDps(params, (resp) =>{
});
其他API
- onSDKDestroy 注销云连接,退出应用时可以调用
tuyaIntelligentlife..onSDKDestroy()
设备控制
智能场景
- 查询城市列表
var params = {};
params.city = "cn";
tuyaIntelligentlife.getLocalCityAll(params, (resp) => {
});
- 根据经纬度查询城市信息
var params = {};
params.longitude = "45435421.11";
params.latitude = "354135415";
tuyaIntelligentlife.getLocalByCoordinate(params, (resp) => {
});
- 根据城市ID查询城市信息
var params = {};
params.cityId = 45435421;
tuyaIntelligentlife.getLocalByCityId(params, (resp) => {
});
- 查询条件列表
var params = {};
params.homeId = 45435421;
params.showFahrenheit = true; // true: 使用华氏单位 false:使用摄氏单位
params.windSpeedUnit = "xxx"; // 风速单位
tuyaIntelligentlife.getConditionAll(params, (resp) => {
});
- 查询条件设备的DP列表
var params = {};
params.devId = "xxx";
tuyaIntelligentlife.getConditionDeviceDpAll(params, (resp) => {
});
- 查询条件设备列表
var params = {};
params.devId = "xxx";
tuyaIntelligentlife.getConditionDeviceAll(params, (resp) => {
});
- 查询条件设备ID列表, 仅支持Android,iOS暂未找到对应api
var params = {};
params.homeId = 55555;
tuyaIntelligentlife.getConditionDeviceIdAll(params, (resp) => {
});
- 查询动作设备的DP列表
var params = {};
params.devId = "xxx";
tuyaIntelligentlife.getActionDeviceDpAll(params, (resp) => {
});
- 查询动作设备群组的DP列表
var params = {};
params.groupDeviceId = "xxx";
tuyaIntelligentlife.getActionGroupDeviceDpAll(params, (resp) => {
});
- 查询动作设备列表
var params = {};
params.homeId = 5555;
tuyaIntelligentlife.getActionDeviceAll(params, (resp) => {
});
- 查询动作设备ID列表,仅支持Android,iOS暂为找到api
var params = {};
params.homeId = 5555;
tuyaIntelligentlife.getActionDeviceIdAll(params, (resp) => {
});
- 删除场景
var params = {};
params.homeId = 5555;
params.sceneId = "ss";
tuyaIntelligentlife.deleteSceneWithHomeId(params, (resp) => {
});
- 查询简易场景列表
var params = {};
params.homeId = 5555;
tuyaIntelligentlife.getSimpleSceneAll(params, (resp) => {
});
- 根据ID查询场景详情
var params = {};
params.homeId = 5555;
params.sceneId = "xxx";
tuyaIntelligentlife.getSceneDetail(params, (resp) => {
});
- 添加场景
var params = {};
params.homeId = 5555;
switch (uni.getSystemInfoSync().platform) {
case 'android':
params.sceneData = {
matchType: 1,
ownerId:"",
coverIcon: "",
name: "",
conditions: [
{
defaultIconUrl:"",
id: "",
entitySubIds: "",
entityType: 1,
entityId: "",
expr:[],
iconUrl: "",
entityName: "",
condType: 1,
exprDisplay: "",
productId: "",
productPic: "",
devDelMark: true,
deleteDevIcon: "",
extraInfo: {
tempUnit: "",
cityName: "",
delayTime: "",
percent: {},
percent1: {},
members: "",
timeWindow: 111,
calType: "",
maxSeconds: 11,
center: {},
radius: 1,
geotitle: "",
windSpeedUnit: "",
originTempUnit: "",
dpScale: 1
}
}
],
displayColor: "",
actions:[
{
actionDisplayNew: {},
extraProperty: {},
actionExecutor: "",
entityId: "",
devDelMark: true,
entityName: "",
executorProperty: {},
id: "",
devIcon: "",
isDevOnline: true,
uiid: "",
productId: "",
productPic: "",
deleteDevIcon: "",
defaultIconUrl: ""
}
],
enabled: true,
boundForPanel: true,
stickyOnTop: true,
boundForWiFiPanel: true,
newLocalScene: true,
localLinkage: true,
arrowIconUrl: true,
preConditions:[
{
id: "",
condType: "",
expr: {
loops: "",
start: "",
end: "",
timeInterval: "",
cityId: "",
timeZoneId: "",
cityName: ""
}
}
],
panelType: 1,
disableTime: 1,
fullData: true,
outOfWork: 1
};
break;
case 'ios':
params.sceneData = {
sceneId: "",
code: "",
name: "",
enabled: true,
stickyOnTop: true,
preConditions: [
{
scenarioId: "",
conditionId: "",
condType: "",
expr: {}
}
],
conditions: [
{
conditionId: "",
iconUrl: "",
entityId: "",
entityName: "",
entityType: 1, // AutoTypeDevice = 1, AutoTypeWhether = 3, AutoTypeTimer = 6, AutoTypePir = 7, AutoTypeFaceRecognition = 9, AutoTypeGeofence = 10, AutoTypeLockMemberGoHome = 11,AutoTypeConditionCalculate = 13,AutoTypeSunsetriseTimer = 16, AutoTypeManual = 99,
exprDisplay: "",
scenarioId: "",
entitySubIds: "",
expr: "",
status: 1,// TYSceneConditionStatusLoading = 0, TYSceneConditionStatusSuccess = 1,TYSceneConditionStatusOffline = 2,TYSceneConditionStatusTimeout = 3,
extraInfo:{},
devDelMark: true,
deleteDevIcon: "",
cityName: "",
cityLatitude: 424.22,
cityLongitude: 24121.00,
productId: "",
productPic: "",
defaultIconUrl: "",
conditionExpressionType: 1 // TYSConditionExpressionTypePrecise = 1,TYSConditionExpressionTypeSimple = 2
}
]
};
break;
default:
break;
}
tuyaIntelligentlife.saveScene(params, (resp) => {
});
- 修改场景
var params = {};
params.sceneId = "xxx";
params.sceneData = {}; // sceneData参考上面的添加场景的参数节点sceneData
tuyaIntelligentlife.modifyScene(params, (resp) => {
});
- 对场景或自动化排序
var params = {};
params.homeId = 111;
params.sceneIds = ["xxx", "xxx"];
tuyaIntelligentlife.sortSceneList(params, (resp) => {
});
- 开启自动化场景
var params = {};
params.sceneId = "";
tuyaIntelligentlife.enableAutomation(params, (resp) => {
});
- 关闭自动化场景
var params = {};
params.sceneId = "";
tuyaIntelligentlife.disableAutomation(params, (resp) => {
});
- 定时启用自动化, 仅支持Android,iOS暂时未找到
var params = {};
params.sceneId = "";
params.time = 22222;
tuyaIntelligentlife.enableAutomationWithTime(params, (resp) => {
});
- 执行场景
var params = {};
params.sceneId = "";
params.homeId = 22222;
tuyaIntelligentlife.executeScene(params, (resp) => {
});
- 注册场景信息变更监听
tuyaIntelligentlife.registerDeviceMqttListener((resp) => {
// android、iOS返回的resp数据不一样
});
- 注销场景信息变更监听
tuyaIntelligentlife.unRegisterDeviceMqttListener();
- 查询场景执行日志, 仅支持Android,iOS暂未找到API
var params = {};
params.homeId = 22222;
params.startTime = 1111;
params.endTime = 22222;
params.size = 222;
params.lastId = "";
params.lastRecordTime = 1255255;
tuyaIntelligentlife.getExecuteLogAll(params, (resp) => {
});
- 查询日志详情, 仅支持Android,iOS暂未找到API
var params = {};
params.homeId = 22222;
params.startTime = 1111;
params.endTime = 22222;
params.eventId = "xx";
params.returnType = 111;
tuyaIntelligentlife.getExecuteLogDetail(params, (resp) => {
});
- 查询设备日志列表, 仅支持Android,iOS暂未找到API
var params = {};
params.homeId = 22222;
params.devId = "";
params.startTime = 22222;
params.endTime = 22222;
params.size = 111;
params.lastId = "",
params.lastRecordTime = 111;
tuyaIntelligentlife.getDeviceLogAll(params, (resp) => {
});