Note: This repository is inherited from the old Tuya Github repository, which will be deprecated soon. Please use this repository for Tuya SDK development instead. For changing the existing remote repository URL, please check this tutorial
--------------------English documentation----------------------
TuyaSmartSocketKit 主要针对涂鸦云云对接的产品中Android端开发者。该项目旨在提供Android手机(以下简称手机)与硬件设备(以下简称设备)的局域网连接,并在局域网中发送dpCode进行设备控制通信。
涂鸦设备连接与控制流程如下:
接入可以参考demo localcontroldemo
根目录的build.gradle
中添加 tuya maven url
allprojects {
repositories {
maven {
url "https://maven-other.tuya.com/repository/maven-releases/"
}
google()
jcenter()
}
}
module中的build.gradle
中添加依赖:
implementation 'com.tuya.smart:socket-sdk:0.1.1'
/**
* 初始化监听
* @param context context
* @param socketListener socket监听
*/
void init(Context context, TuyaSocketListener socketListener);
应用或Activity启动时调用初始化接口。
其中,TuyaSocketListener中的方法如下:
/**
* 连接断开
* @param deviceId 设备id
* @param errorCode 错误码 {@link com.tuya.sdk.lancontrol.api.ErrorCode}
*/
void onDisconnected(String deviceId, int errorCode);
/**
* 设备连接
* @param deviceId 设备id
*/
void onConnected(String deviceId);
/**
* 设备控制成功
* @param deviceId 设备id
* @param commands 修改成功的设备功能点
*/
void onCommandsReceived(String deviceId, Map<String, Object> commands);
调用示例:
TuyaSocketManager.getInstance().init(this, new TuyaSocketListener() {
@Override
public void onDisconnected(String deviceId, int errorCode) {
LogUtils.i("onDisconnected : deviceId = " + deviceId + "\n errorCode = " + errorCode);
}
@Override
public void onConnected(String deviceId) {
LogUtils.i("onConnected : deviceId = " + deviceId);
}
@Override
public void onCommandsReceived(String deviceId, Map<String, Object> commands) {
LogUtils.i("onCommandsReceived : deviceId = " + deviceId + "\n commands = " + commands);
}
});
添加设备信息到SDK中,SDK内部将自动建立与设备的局域网连接。
该参数可以通过云云对接的接口 /v1.0/devices/schema
获取到。
/**
*
* @param deviceInfoJsonString 接口/v1.0/devices/schema的返回数据
*/
void addDeviceInfo(String deviceInfoJsonString);
调用示例:
TuyaSocketManager.getInstance().addDeviceInfo(json);
/**
* 发送控制命令
* @param deviceId 设备id
* @param commands 控制命令
* @param resultCallback 发送回调
*/
TuyaSocketManager.getInstance().publishCommands(String deviceId, Map<String, Object> commands, ResultCallback resultCallback);
调用示例:
HashMap<String, Object> commands = new HashMap<>();
boolean value = new Random().nextBoolean();
commands.put("switch_1", value);
TuyaSocketManager.getInstance().publishCommands("6ce35593d91e3d9aa2tlo4", commands, new ResultCallback() {
@Override
public void onError(int errorCode, String errorMessage) {
LogUtils.i("publish onError " + errorMessage);
}
@Override
public void onSuccess() {
LogUtils.i("publish onSuccess ");
}
});
当您的应用退出时,您可以关闭所有局域网连接:
// Close all devices connect
TuyaSocketManager.getInstance().destroy(this);
dpCodeValue组成规则:
要了解dp点的详细信息,可以参考 设备功能点文档
dpCode是描述设备的功能点,即一个设备支持哪些功能控制。在 " /v1.0/devices/schema" 接口中返回的 schema 中会返回的就是设备支持的功能点。以下分别对典型的功能点进行说明。
dpCodeDict均以 dpCode : dpValue
的格式进行。
dpCode 可以从 schema 中 code 字段获得。dpValue 需要根据dp点支持的格式发送。
以下将以接口文档中给出的Demo为例,说明dpCode如何构成。
-
开关
"type": "bool"
例如:
{"switch_led" : true}
或者{"switch_led" : true}
{ "mode": "rw", "code": "switch_led", "name": "开关 ", "property": { "type": "bool" }, "iconname": "icon- dp_power2", "id": 20, "type": "obj", "desc": "" }
-
模式选择 (单选)
"type": "enum"
e.g.
{"work_mode" : "white"}
{"work_mode" : "colour"}
{ "mode": "rw", "code": "work_mode", "name": "模式", "property": { "range": ["white", "colour", "scene", "music"], "type": "enum" }, "iconname": "i con-dp_list", "id": 21, "type": "obj", "desc": "" }
-
亮度值(发送数值)
"type": "value"
e.g.
{"bright_value": 400}
注意:这里的数值有最大值、最小值、步进值限制。
{ "mode": "rw", "code": "bright_value", "name": "亮度值", "property": { "min": 10, "max": 1000, "scale": 0, "step": 1, "type": "value" }, "iconname ": "icon-dp_sun", "id": 22, "type": "obj", "desc": "" }
-
彩光(发送字符串)
"type": "string"
e.g.
{"colour_data":"000100010001"}
以上方式只是其中一种传递方式,具体的deValue值需要针对具体情况进行分析
{ "mode": "rw", "code": "colour_data", "name": "彩光", "property": { "type": "string", "maxlen": 255 }, "iconname": "icon- dp_light", "id": 24, "type": "obj", "desc": "" }