Last Updated on : 2024-06-18 09:24:18download
Class name | Description |
---|---|
ThingOptimusSdk |
Provides access to the SDK initialization feature and returns the lock management class. |
IThingLockManager |
The lock management class that is used to get different types of lock classes. |
IThingWifiLock |
The Wi-Fi lock class that includes all methods of Wi-Fi locks. |
Example
The following code block shows how to create a Wi-Fi lock class based on a device ID.
// Initialize the SDK for only once.
ThingOptimusSdk.init(getApplicationContext());
// Get the `thingLockManager` class.
IThingLockManager thingLockManager = ThingOptimusSdk.getManager(IThingLockManager.class);
// Create `IThingWifiLock`.
IThingWifiLock thingLockDevice = thingLockManager.getWifiLock("your_lock_device_id");
Term | Description |
---|---|
Duress alarms | The duress alarm feature allows users to enroll a password or fingerprint as a duress code. If they are coerced by hostile persons, unlocking with the duress code can trigger alarms to be sent to a list of contacts. |
Lock members | Lock members are classified into home members and non-home members.
|
dpCode | An identifier of a data point (DP) for a device. Each DP is assigned a name and an identifier indicated by dpCode . For more information, see List of Lock DPs. |
This section describes the operations regarding non-home members.
API description
public void getLockUsers(final IThingResultCallback<List<WifiLockUser>> callback)
Fields of WifiLockUser
Field | Type | Description |
---|---|---|
userId | String | The member ID. |
userName | String | The nickname of the user. |
avatarUrl | String | The URL of the avatar. |
contact | String | The contact method. |
unlockRelations | List |
The unlocking method and password serial number. |
devId | String | The device ID. |
ownerId | String | The home ID. |
userType | int | The type of lock member. Valid values:
|
Example
thingLockDevice.getLockUsers(new IThingResultCallback<List<WifiLockUser>>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get lock users failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(List<WifiLockUser> wifiLockUser) {
Log.i(TAG, "get lock users success: wifiLockUser = " + wifiLockUser);
}
});
Creates a non-home member to be associated with an unlocking record in later operations.
API description
public void addLockUser(final String userName, File avatarFile, final List<UnlockRelation> unlockRelations, final IThingResultCallback<String> callback)
Parameters
Parameter | Optional | Description |
---|---|---|
userName | No | The name of the member. |
avatarFile | Yes | The avatar of the member. If it is not set, the default avatar is used. |
unlockRelations | No | The mapping between the unlocking method and the password serial number. |
You can call getRecords to get the value of UnlockRelation
. After unlocking with a password or another method, an unlocking record can be obtained. The unlocking method in the unlocking record can be assigned to a user.
Fields of UnlockRelationBean
Field | Type | Description |
---|---|---|
ThingUnlockType | Enum | The unlocking method. |
passwordNumber | int | The associated password serial number. Valid values: 0 to 999 . |
Example
ArrayList<UnlockRelation> unlockRelations = new ArrayList<>();
UnlockRelation unlockRelation = new UnlockRelation();
unlockRelation.unlockType = ThingUnlockType.PASSWORD;
unlockRelation.passwordNumber = 1;
unlockRelations.add(unlockRelation);
File avatarFile = new File(getFilesDir(), "1.png");
thingLockDevice.addLockUser("Pan", avatarFile , unlockRelations, new IThingResultCallback<String>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "add lock user failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(String userId) {
Log.i(TAG, "add lock user success: " + userId);
}
});
API description
Modifies the information about a lock member, including the user name, avatar, and mapping with the unlocking password.
public void updateLockUser(final String userId, final String userName, File avatarFile, final List<UnlockRelation> unlockRelations, final IThingResultCallback<Boolean> callback)
Parameters
Parameter | Optional | Description |
---|---|---|
userId | No | The member ID, required. |
userName | Yes | The username of the member. This parameter is optional and not changed if not set. |
avatarFile | Yes | The avatar of the member. If it is not set, the default avatar is used. |
unlockRelations | No | The mapping between the unlocking method and the password serial number. This parameter is required and not changed if not set. |
Example
ArrayList<UnlockRelation> unlockRelations = new ArrayList<>();
UnlockRelation unlockRelation = new UnlockRelation();
unlockRelation.unlockType = ThingUnlockType.PASSWORD;
unlockRelation.passwordNumber = 1;
unlockRelations.add(unlockRelation);
thingLockDevice.updateLockUser("0000005f1g", "pan", null, unlockRelations, new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "update lock user failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean aBoolean) {
Log.i(TAG, "update lock user success");
}
});
API description
Modifies only an unlocking method that is assigned to a home member. The username and avatar of the member are not modified in this call.
The username, avatar, and other information about a member can be modified only in the API requests mentioned in Home Management.
public void updateFamilyUserUnlockMode(String userId, List<UnlockRelation> unlockRelations, IThingResultCallback<Boolean> callback)
Parameters
Parameter | Optional | Description |
---|---|---|
userId | No | The member ID, required. |
unlockRelations | No | The mapping between the unlocking method and the password serial number. |
Example
ArrayList<UnlockRelation> unlockRelations = new ArrayList<>();
UnlockRelation unlockRelation = new UnlockRelation();
unlockRelation.unlockType = ThingUnlockType.PASSWORD;
unlockRelation.passwordNumber = 1;
unlockRelations.add(unlockRelation);
thingLockDevice.updateFamilyUserUnlockMode("your_family_user_id", unlockRelations, new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "update family user failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean aBoolean) {
Log.i(TAG, "update family user success");
}
});
API description
Deletes the information about a lock member. After the member is deleted, the existing password is not deleted.
public void deleteLockUser(String userId, final IThingResultCallback<Boolean> callback)
Parameters
Parameter | Description |
---|---|
userId | The member ID. |
Example
thingLockDevice.deleteLockUser("0000004pnk", new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "delete lock user failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean result) {
Log.i(TAG, "delete lock user failed success");
}
});
Creates a temporary password. Users can enter this password to unlock a door.
Returns a list of temporary passwords. The usage status of each temporary password is also displayed.
API description
public void getTempPasswords(final IThingResultCallback<List<TempPassword>> callback)
Data model of ThingSmartLockTempPwdModel
Field | Type | Description |
---|---|---|
phone | String | The mobile phone number. |
name | String | The name of the temporary password. |
countryCode | String | The country or region code. |
invalidTime | long | The timestamp in milliseconds when the temporary password expires. |
effectiveTime | long | The timestamp in milliseconds when the temporary password takes effect. |
createTime | long | The timestamp in milliseconds when the temporary password was created. |
id | int | The unique ID of the temporary password. |
sequenceNumber | int | The serial number of the password, associated with a user account. |
status | int | The status of the temporary password. |
Valid values of status
include:
int REMOVED = 0; // Deleted
int INVALID = 1; // Invalid
int TO_BE_PUBILSH = 2; // To be sent
int WORKING = 3; // Being used
int TO_BE_DELETED = 4; // To be deleted
int EXPIRED = 5; // Expired
Example
thingLockDevice.getTempPasswords(new IThingResultCallback<List<TempPassword>>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get lock temp passwords failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(List<TempPassword> tempPasswords) {
Log.i(TAG, "get lock temp passwords success: tempPasswords" + tempPasswords);
}
});
The validity period of a temporary password can be customized. This setting must be synced with the lock after the temporary password is created.
API description
public void createTempPassword(TempPassword tempPassword, final IThingResultCallback<Boolean> callback)
Parameters of TempPassword
The following table describes the parameters of this class.
Parameter | Optional | Description |
---|---|---|
name | No | The name of the password. |
password | No | The 7-digit numeric temporary password. |
effectiveDate | No | The timestamp in milliseconds when the temporary password takes effect. |
invalidDate | No | The timestamp in milliseconds when the temporary password expires. |
countryCode | Yes | The country or region code. For example, 86 means mainland China. |
phone | Yes | The mobile phone number. After the password is created, a notification will be sent to this mobile phone number. phone and countryCode are optional. Before phone is set, the mobile phone’s SMS service must be enabled. Otherwise, this setting will not take effect |
TempPassword
is created by TempPassword.Builder
. For more information, see the following example.
Example
TempPasswordBuilder tempPasswordBuilder = new TempPasswordBuilder()
.name("Liam's password")
.password("1231231")
.effectiveTime(System.currentTimeMillis())
.invalidTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
thingLockDevice.createTempPassword(tempPasswordBuilder, new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "create lock temp password: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean result) {
Log.i(TAG, "add lock user success");
}
});
Deletes a temporary password. This setting must be synced with the lock after the temporary password is deleted.
API description
public void deleteTempPassword(int passwordId, final IThingResultCallback<Boolean> callback)
Parameters
Parameter | Description |
---|---|
passwordId | The unique ID of the temporary password. |
Example
thingLockDevice.deleteTempPassword(1111, new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "delete lock temp password failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean result) {
Log.i(TAG, "delete lock temp password success");
}
});
Returns a dynamic password. Users can enter the dynamic password to unlock a door. The dynamic password is valid for five minutes.
API description
public void getDynamicPassword(final IThingResultCallback<String> callback)
Example
thingLockDevice.getDynamicPassword(new IThingResultCallback<String>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get lock dynamic password failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(String dynamicPassword) {
Log.i(TAG, "get lock dynamic password success: dynamicPassword = " + dynamicPassword);
}
});
Users can trigger a remote unlocking request on a lock. Then, the SDK can be used to implement remote locking.
API description
public void setRemoteUnlockListener(RemoteUnlockListener remoteUnlockListener)
Parameters
RemoteUnlockListener
provides the following Receive
method:
void onReceive(String devId, int second);
Parameters
Field | Type | Description |
---|---|---|
devId | String | The device ID. |
second | int | The minimum response time. Unit: seconds. |
API description
public void replyRemoteUnlock(boolean allow, final IThingResultCallback<Boolean> callback)
Parameters
Field | Type | Description |
---|---|---|
allow | Boolean | Specifies whether to allow unlocking the door. |
Example
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lock_device);
....
// Registers a listener for remote unlocking requests
thingLockDevice.setRemoteUnlockListener(new RemoteUnlockListener() {
@Override
public void onReceive(String devId, int second) {
if (second != 0 && !dialogShowing) {
dialogShowing = true;
Log.i(TAG, "remote unlock request onReceive");
onCreateDialog();
}
}
});
}
/**
* Creates a dialog box that confirms whether to remotely unlock a door.
*/
public void onCreateDialog() {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Whether to allow remote unlocking?")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
replyRemoteUnlockRequest(true);
Log.i(TAG, "remote unlock request access");
dialog.dismiss();
dialogShowing = false;
}
})
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
replyRemoteUnlockRequest(false);
dialog.dismiss();
Log.i(TAG, "remote unlock request deny");
dialogShowing = false;
}
}).setCancelable(false);
AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();
}
/**
* Requests to remotely unlock a door.
*
* @param allow
*/
private void replyRemoteUnlockRequest(boolean allow) {
thingLockDevice.replyRemoteUnlock(allow, new IThingResultCallback<Boolean>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "reply remote unlock failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Boolean result) {
Log.i(TAG, "reply remote unlock success");
}
});
}
API description
/**
* Query on/off status of Google Voice password
*
* @param callback The callback.
*/
void fetchRemoteVoiceUnlock(IThingResultCallback<Boolean> callback);
Example
thingLockDevice.fetchRemoteVoiceUnlock(new IThingResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
Log.i(Constant.TAG, "fetchRemoteVoiceUnlock success:" + result);
}
@Override
public void onError(String code, String message) {
Log.e(Constant.TAG, "fetchRemoteVoiceUnlock failed: code = " + code + " message = " + message);
}
});
API description
/**
* Set or cancel Google Voice password
*
* @param isOpen The on/off setting.
* @param password The voice password
* @param callback The callback
*/
void setRemoteVoiceUnlock(boolean isOpen, String password, IThingResultCallback<Boolean> callback);
Example
thingLockDevice.setRemoteVoiceUnlock(isOpen, password, new IThingResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
Log.i(Constant.TAG, "setRemoteVoiceUnlock success:" + result);
}
@Override
public void onError(String code, String error) {
Log.e(Constant.TAG, "setRemoteVoiceUnlock failed: code = " + code + " message = " + error);
}
});
Returns lock usage records based on the specified data point (DP) ID.
API description
public void getRecords(ArrayList<String> dpCodes, int offset, int limit, final IThingResultCallback<Record> callback)
Parameters
Parameter | Description |
---|---|
dpCodes | The list of data points (DPs) of the target device. For more information, see List of lock DPs. |
offset | The offset number starting from which entries are returned. |
limit | The total number of returned entries in each call. |
Return values
Fields of Record
Field | Type | Description |
---|---|---|
totalCount | int | The total number of returned entries in each call. |
hasNext | Boolean | Indicates whether the next page is included. |
datas | List |
The data that is included in a record. |
Fields of DataBean
Field | Type | Description |
---|---|---|
userId | String | The member ID. |
avatarUrl | String | The avatar URL of the user. |
userName | String | The nickname of the user. |
createTime | long | The timestamp in milliseconds when the lock usage record was created. |
devId | String | The device ID. |
dpCodesMap | HashMap<String, Object> | The ID and current value of the DP. |
unlockRelation | UnlockRelation | The mapping between an unlocking method and an unlocking password serial number. Ignore this parameter for non-unlocking records. |
tags | int | The flag of the record. Valid values:
|
You can query lock usage records to get the value of unlockRelation
and assign the value to a created user.
For example, a password is created on a lock and used to unlock the door. This way, an unlocking record is generated and the unlocking method is returned. Users can query this unlocking record on the app and assign the associated password to a user as needed.
Example
// Sends the DP ID of the unlocking method to get the unlocking records.
ArrayList<String> dpCodes = new ArrayList<>();
dpCodes.add("alarm_lock");
dpCodes.add("hijack");
dpCodes.add("doorbell");
thingLockDevice.getRecords(dpCodes, 0, 10, new IThingResultCallback<Record>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get unlock records failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Record recordBean) {
Log.i(TAG, "get unlock records success: recordBean = " + recordBean);
}
});
Unlocking records include the following events: unlock with a fingerprint, unlock with a normal password, unlock with a temporary password, unlock with a dynamic password, unlock with a card, unlock with biometric recognition, and unlock with a mechanical key.
API description
/**
* get unlock records
* @param unlockTypes unlock type list
* @param offset offset number
* @param limit item count
* @param callback callback
*/
void getUnlockRecords(int offset, int limit, final IThingResultCallback<Record> callback);
Parameters
Parameter | Description |
---|---|
offset | The offset number starting from which entries are returned. |
limit | The total number of returned entries in each call. |
Example
thingLockDevice.getUnlockRecords(0, 10, new IThingResultCallback<Record>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get unlock records failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Record recordBean) {
Log.i(TAG, "get unlock records success: recordBean = " + recordBean);
}
});
The duress alarm feature allows users to enroll a password or fingerprint as a duress code. If they are coerced by hostile persons, unlocking with the duress code can trigger alarms to be sent to a list of contacts.
Adds a duress alarm flag to an unlocking method. The associated password or fingerprint will be specified as a duress code.
API description
/**
* Set the hijacking flag for the unlock method.
*
* @param unlockRelation UnlockRelation
* @param callback callback
*/
void setHijackingConfig(UnlockRelation unlockRelation, final IThingResultCallback<Boolean> callback);
Parameters
Parameter | Description |
---|---|
unlockRelation | The mapping between an unlocking method and an unlocking password serial number. |
callback | The callback. |
API description
/**
* Remove the hijacking flag for the unlock method.
*
* @param unlockRelation UnlockRelation
* @param callback callback
*/
void removeHijackingConfig(UnlockRelation unlockRelation, final IThingResultCallback<Boolean> callback);
Parameters
Parameter | Description |
---|---|
unlockRelation | The mapping between an unlocking method and an unlocking password serial number. |
callback | The callback. |
Returns the duress alarm records based on the specified unlocking DP data.
API description
public void getHijackRecords(int offset, int limit, final IThingResultCallback<RecordBean> callback)
Parameters
Parameter | Description |
---|---|
offset | The offset number starting from which entries are returned. |
limit | The total number of returned entries in each call. |
Example
thingLockDevice.getHijackRecords(0, 10, new IThingResultCallback<Record>() {
@Override
public void onError(String code, String message) {
Log.e(TAG, "get lock hijack records failed: code = " + code + " message = " + message);
}
@Override
public void onSuccess(Record hijackingRecordBean) {
Log.i(TAG, "get lock hijack records success: hijackingRecordBean = " + hijackingRecordBean);
}
});
DP name | DP identifier (dpCode) |
---|---|
Unlock with a fingerprint | unlock_fingerprint |
Unlock with a normal password | unlock_password |
Unlock with a temporary password | unlock_temporary |
Unlock with a dynamic password | unlock_dynamic |
Unlock with a card | unlock_card |
Unlock with biometric recognition | unlock_face |
Unlock with a mechanical key | unlock_key |
Alerts | alarm_lock |
Countdown of remote unlocking | unlock_request |
Reply to a remote unlocking request | reply_unlock_request |
Battery capacity status | battery_state |
Remaining battery capacity | residual_electricity |
Double locking status | reverse_lock |
Child lock status | child_lock |
Remote unlocking with app | unlock_app |
Duress alarm | hijack |
Unlock from the inside of the door | open_inside |
Open and closed status of the door | closed_opened |
Doorbell call | doorbell |
SMS notification | message |
Double lock by lifting up | anti_lock_outside |
Unlock with irises | unlock_eye |
Unlock with palm prints | unlock_hand |
Unlock with finger veins | unlock_finger_vein |
Synchronize all fingerprint numbers | update_all_finger |
Synchronize all password numbers | update_all_password |
Synchronize all card numbers | update_all_card |
Synchronize all face numbers | update_all_face |
Synchronize all iris numbers | update_all_eye |
Synchronize all palm print numbers | update_all_hand |
Synchronize all finger vein numbers | update_all_fin_vein |
Report offline password unlocking | unlock_offline_pd |
Report the clearing of offline passwords | unlock_offline_clear |
Report the clearing of a single offline password | unlock_offline_clear_single |
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback