藍牙 Mesh 本地定時 SDK 提供了通過 App 設置Mesh設備本地定時,以及自動對時的功能。
概述
依賴 SDK | 概述 |
物模型 SDK 提供了 App 端的物模型 | |
藍牙 Mesh SDK | 提供藍牙mesh基礎能力 |
使用說明
獲取藍牙Mesh網絡是否有連接
可以使用下面的方式判斷當前是否已經連接到了Mesh網絡。
boolean isConnected2Mesh = TgMeshManager.getInstance().isConnectedToMesh();
本地定時操作
獲取 MeshTimerTransaction 對象
在添加/刪除/更新某個mesh節點的本地定時前,需要獲取MeshTimerTransaction
對象。
// 入參為mesh設備的iotId
String iotId = "***";
MeshTimerTransaction meshTimerTransaction = MeshTimerTransaction.initWithIotID(iotId);
獲取設備的定時列表
定時對象模型
MeshTimerModel
public enum TimerType { TIMER_NONE(0), TIMER_COUNTDOWN(1), // 倒計時定時 TIMER_NORMAL(2), // 普通定時 TIMER_CIRCULATION(3); // 循環定時 } public enum TimerEnableType { TIMER_ENABLE_NONE(0), // 定時未啟用 TIMER_ENABLE(1), // 已啟用 TIMER_IN_FLIGHT(2); } public class MeshTimerModel{ private String timerID; // 開始時間 // 倒計時: yyyy-MM-dd HH:mm // 普通定時: HH:mm // 循環定時: HH:mm private String time; // 循環定時普通定時 // 格式:"1,2,3,4,5,6,7" (1表示星期天,2表示星期一) private String days; // 定時器類型 private TimerType timerType; // 該定時器是否啟用 private TimerEnableType enableType; // 表示當次設置的定時任務的具體動作。控制多個屬性及屬性值,每對屬性之間使用,分割,示例:"powerstate:1,mode:2" // 對于循環定時,字符串里包含"|",則"|"前面的是RunTime需執行的action,"|"后面的是SleepTime需執行的action private String attributesTargets; // 表示本地事件與UTC時間的差值 // 單位:秒 // 取值范圍為:-43200到50400 // 步長:3600 private int timeZone; // 結束時間,周期循環定時的類型用到 // 示例:HH:mm private String endTime; // 運行的時長,如打開30分鐘,周期循環定時的類型用到 單位秒 private int runTime; // 睡眠的時長,如打開30分鐘,周期循環定時的類型用到 單位秒 private int sleepTime; }
獲取定時器任務列表
獲取當前設備列表中的定時任務列表。
說明在更新/刪除/增加本地定時功能前,必須調用該接口。
// 入參為mesh設備的iotId String iotId = ""; MeshTimerTransaction meshTimerTransaction = MeshTimerTransaction.initWithIotID(iotId); meshTimerTransaction.getDeviceTimerList(new ITimerActionCallback<List<MeshTimerModel>>() { @Override public void onSuccess(List<MeshTimerModel> result) { // result 為當前設備的本地定時列表 } @Override public void onFailure(int errorCode, String desc) { // } });
定時器操作
SDK提供添加/刪除/更新某個定時器的功能,但調用方必須保證一個操作接口完成后,才可以進行下一次調用。保證一次只操作一個定時器。
操作錯誤碼
public interface ErrorCode {
// SDK內部沒有獲取到當前設備的定時列表,需要檢查該設備的物模型中是否支持本地定時
int ERROR_UNSUPPORTED_OPERATIONS = -1;
// 需先調用 getDeviceTimerList 方法,保證 SDK 內部初始化
int ERROR_INVOCATION_PROCESS = -2;
// 本地定時器已滿,不能繼續添加定時器
int ERROR_TIMING_ALREADY_FULL = -3;
// MeshTimerModel 中的 timerID 非法,調用發需要保證不會更新 timerID
int ERROR_INVALID_TIMER_ID = -4;
// 設置本地定時器失敗。可能Mesh本地網絡未連接
int ERROR_SEND_FAILED = -5;
// 設備本地定時器超時。可能原因:
// 1. 目標設備不在周邊或者斷電
// 2. 設備固件不支持設置定時器
// 3. 定時器參數不合法。
int ERROR_SET_TIMER_TIMEOUT = -6;
// 需要等待上一個調用操作完成
int ERROR_EXIT_PENDING_TASK = -7;
}
添加本地定時任務
SDK 提供了 Builder 方法分別創建本地普通定時、循環定時以及倒計時。
對于倒計時定時,時間到達后云端會自動清除該定時器。SDK調用方需要使用getDeviceTimerList
來刷新本地定時列表。
String iotId = "";
MeshTimerTransaction meshTimerTransaction = MeshTimerTransaction.initWithIotID(iotId);
// 添加本地普通定時
MeshTimerModel.NormalTimerBuilder builder = new MeshTimerModel.NormalTimerBuilder();
builder.setTime("21:30").setTargets("powerstate:0").setDays("1,2,3,4,5,6,7").setTimeZone(28800);
MeshTimerModel timerModel = builder.build();
meshTimerTransaction.addTimerWithTimerModel(timerModel, new ITimerActionCallback<List<MeshTimerModel>>() {
@Override
public void onSuccess(List<MeshTimerModel> result) {
// result為最新的定時任務列表。業務層必須該對象進行后續的操作
Log.i(TAG, "On successful to add timer, result: " + JSON.toJSONString(result));
}
@Override
public void onFailure(int errorCode, String desc) {
Log.e(TAG, "On failed to add timer, errorCode: " + errorCode + ", desc: " + desc);
}
});
// 添加本地循環定時
MeshTimerModel.CirculationTimerBuilder circulationTimerBuilder = new MeshTimerModel.CirculationTimerBuilder();
MeshTimerModel circulationTimerModel = circulationTimerBuilder.setTime("21:30")
.setTargets("powerstate:0|powerstate:1")
.setDays("1,2,3,4,5,6,7")
.setTimeZone(28800)
.setEndTime("23:00")
.setRunTime(30)
.setSleepTime(30).build();
meshTimerTransaction.addTimerWithTimerModel(circulationTimerModel, new ITimerActionCallback<List<MeshTimerModel>>() {
@Override
public void onSuccess(List<MeshTimerModel> result) {
Log.i(TAG, "On successful to add timer, result: " + JSON.toJSONString(result));
}
@Override
public void onFailure(int errorCode, String desc) {
Log.e(TAG, "On failed to add timer, errorCode: " + errorCode + ", desc: " + desc);
}
});
// 添加本地倒計時
MeshTimerModel.CountDownTimerBuilder countDownTimerBuilder = new MeshTimerModel.CountDownTimerBuilder();
// 2023-03-08 22:00 為開始執行時間,假如當前時間是2023-03-08 21:00,倒計時1個小時
MeshTimerModel countDownTimer = countDownTimerBuilder.setTime("2023-3-8 22:00")
.setTargets("powerstate:0")
.setTimeZone(28800)
.build();
meshTimerTransaction.addTimerWithTimerModel(countDownTimer, new ITimerActionCallback<List<MeshTimerModel>>() {
@Override
public void onSuccess(List<MeshTimerModel> result) {
Log.i(TAG, "On successful to add timer, result: " + JSON.toJSONString(result));
}
@Override
public void onFailure(int errorCode, String desc) {
Log.e(TAG, "On failed to add timer, errorCode: " + errorCode + ", desc: " + desc);
}
});
刪除某個本地定時
// 當前最新的本地定時列表
List<MeshTimerModel> currentTimerModels;
meshTimerTransaction.deleteTimerWithTimerModel(currentTimerModels.get(0), new ITimerActionCallback<List<MeshTimerModel>>() {
@Override
public void onSuccess(List<MeshTimerModel> result) {
Log.i(TAG, "On successful to delete timer, result: " + JSON.toJSONString(result));
}
@Override
public void onFailure(int errorCode, String desc) {
Log.e(TAG, "On failed to delete timer, errorCode: " + errorCode + ", desc: " + desc);
}
});
更新某個本地定時
// 當前最新的本地定時列表
List<MeshTimerModel> currentTimerModels;
MeshTimerModel timerModel1 = currentTimerModels.get(0);
// disable該定時器
timerModel1.setEnableType(TimerEnableType.TIMER_ENABLE_NONE);
meshTimerTransaction.editTimerWithTimerModel(timerModel1, new ITimerActionCallback<List<MeshTimerModel>>() {
@Override
public void onSuccess(List<MeshTimerModel> result) {
Log.i(TAG, "On successful to edit timer, result: " + JSON.toJSONString(result));
}
@Override
public void onFailure(int errorCode, String desc) {
Log.e(TAG, "On failed to edit timer, errorCode: " + errorCode + ", desc: " + desc);
}
});
文檔內容是否對您有幫助?