更新记录

1.0.5(2023-06-08)

  1. Android增加取消监听接口

1.0.4(2023-05-24)

  1. ios增加业务接口

1.0.3(2023-05-10)

  1. 优化iOS 蓝牙扫描配网
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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原生插件配置”->”云端插件“列表中删除该插件重新选择


前言

wrs-tuyaThing是涂鸦官网针对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

快速入门

设备配网注意点

  1. 设备配网前需要先创建一个家庭,然后选择一个家庭
  2. 配网前手机需要开启定位,手机连接Wi-Fi,不能用4G网络
  3. Wi-Fi路由器需要关闭5G信号(涂鸦设备目前只支持2.4GHz网络),登录路由器,关闭5GHz(各种品牌路由器关闭方法参考厂家说明或自定百度)

集成插件步骤

  1. 在涂鸦IOT平台里的App 工作台,在App -> App SDK -> SDK开发创建应用,并在应用里绑定Android、iOS包名(即uniapp的android包名、iOS的Bundle ID)
  2. android还需要在涂鸦IOT平台里(点击创建的应用进入应用详情-> 获取密钥-> Android -> 证书)绑定签名的SHA256,所以在自定义基座或云打包时需要使用自己的签名文件,不能用云端的签名。(SHA265的获取可参考涂鸦的说明https://developer.tuya.com/cn/docs/app-development/iot_app_sdk_core_sha1?id=Kao7c7b139vrh)****
  3. 进入到创建的应用详情页的SDK页面里,切换到“获取SDK”栏目,选择对应到功能模块,分别下载“下载iOS开发版”、“下载Android开发版”
  4. 将demo下的nativeplugins/wrs-tuyaThing-security文件夹拷贝至项目对应目录,将上面下载到功能模块包分别解压,iOS开发版解压后,将ThingSmartCryption.xcframework替换demo工程下nativeplugins/wrs-tuyaThing-security/ios下的ThingSmartCryption.xcframework,并且将ThingSmartCryption.xcframework/ios-arm64/CustomResources/Bundles/ThingSmartCryption.bundle拷贝替换wrs-tuyaThing-security/ios/Bundles/ThingSmartCryption.bundle
  5. android开发版解压后,将security-algorithm-1.0.0-beta.aar文件替换nativeplugins/wrs-tuyaThing-security/android/security-algorithm-1.0.0-beta.aar文件
  6. 在manifest.json-App原生插件配置-本地插件,选择WRSTuyaThingSecurity插件
  7. 在插件市场的本插件页面,右边选择“试用”,选择需要试用的应用
  8. 在项目的manifest.json的app原生插件-》云插件选择本插件,打包自定义基座(自定义基座或云打包时,需要使用上面步骤里涂鸦平台上绑定的包名,Android使用上面SHA256对应的签名文件),运行时选择自定义基座运行
  9. 在云插件里分别配置iOS和Android对应AppKey、AppSecret
  10. manifest.json的app-plus-》distribute -》 packagingOptions增加配置,参考demo

                "packagingOptions": [
                    "pickFirst 'lib/*/libc++_shared.so'",
                    "pickFirst 'lib/*/libyuv.so'",
                    "pickFirst 'lib/*/libopenh264.so'",
                    "pickFirst 'lib/*/liblog.so'"
                ]
  1. 有些API的入参和出参在Android、iOS平台上可能不一样,需要各端去适配下
  2. 由于涂鸦API接口众多,使用过程中如果出现不适配情况请联系QQ:252797991

涂鸦错误码查询链接:

https://developer.tuya.com/cn/docs/app-development/errorcode?id=Ka6o3bubtl735

调用接口时,出现"xxx非法客户端"的错误排查步骤: android:

  1. 检查uniapp项目的包名是否与涂鸦IOT平台里对应应用的包名一致
  2. nativeplugins/wrs-tuyaThing-security里对应文件是否按照集成步骤里的说明进行替换
  3. android签名的SHA256是否与涂鸦IOT平台里对应应用的包名一致
  4. 删除手机app重新自定义基座安装

iOS:

  1. 检查uniapp项目的Bundle ID是否与涂鸦IOT平台里对应应用的包名一致
  2. nativeplugins/wrs-tuyaThing-security里对应文件是否按照集成步骤里的说明进行替换、
  3. 删除手机app重新自定义基座安装

由于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支持的最低版本
            },

插件模块说明

插件目前分为2个模块:


 // 模块1,主要有初始化SDK,监听Wi-Fi、蓝牙,是否开始日志等功能
 var tuya = uni.requireNativePlugin("wrs-tuyaThing");

 // 模块2,主要有涂鸦智能生活模块API
 var tuyaIntelligentlife = uni.requireNativePlugin("wrs-tuyaThing-intelligentlife");
  • 开启或关闭日志

// 开启日志
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();
  • 双模设备蓝牙兜底配网

  • 蓝牙兜底双模设备连云

蓝牙设备操作

  • 判断设备在线状态
  1. 通过通用方式查询 与 Wi-Fi 设备一致(此状态是综合状态,若蓝牙设备添加到网关下面 则蓝牙设备可云端在线),仅支持Android

var params = {};
params.devId = "";
var resp = tuyaIntelligentlife.getIsOnline(params);
if(isString(resp)) {
    resp = JSON.parse(resp);
}
  1. 查询设备蓝牙是否本地连接

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);

            //如果取消设备监听不成功,可以增加这个接口把监听设置null ,仅支持Android
            tuyaIntelligentlife.registerDevListenerNull(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();
  • 查询场景执行日志

var params = {};
params.homeId = 22222;
params.startTime = 1111;
params.endTime = 22222;
params.size = 222;
params.lastId = "";
params.lastRecordTime = 1255255;
tuyaIntelligentlife.getExecuteLogAll(params, (resp) => {

});
  • 查询日志详情

var params = {};
params.homeId = 22222;
params.startTime = 1111;
params.endTime = 22222;
params.eventId = "xx";
params.returnType = 111;
tuyaIntelligentlife.getExecuteLogDetail(params, (resp) => {

});
  • 查询设备日志列表

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) => {

});

支持定制,联系方式 QQ:252797991

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:required="false" /> <!-- 网络 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.WAKE_LOCK" android:required="false" /> iOS: 蓝牙、Wi-Fi

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的 涂鸦 SDK可能会采集数据,详情可参考:https://developer.tuya.com/cn/

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问