homebridge-ttlock-accesscode 1.0.0 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/config.schema.json +31 -4
- package/dist/api/ttlockApi.d.ts +9 -8
- package/dist/api/ttlockApi.js +128 -67
- package/dist/api/ttlockApi.js.map +1 -1
- package/dist/api/usageTracker.d.ts +37 -0
- package/dist/api/usageTracker.js +276 -0
- package/dist/api/usageTracker.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.js +23 -11
- package/dist/config.js.map +1 -1
- package/dist/devices/accessoryInformation.d.ts +3 -0
- package/dist/devices/accessoryInformation.js +28 -0
- package/dist/devices/accessoryInformation.js.map +1 -0
- package/dist/devices/baseDevice.d.ts +58 -0
- package/dist/devices/baseDevice.js +376 -0
- package/dist/devices/baseDevice.js.map +1 -0
- package/dist/devices/create.d.ts +4 -0
- package/dist/devices/create.js +27 -0
- package/dist/devices/create.js.map +1 -0
- package/dist/devices/descriptorHelpers.d.ts +5 -0
- package/dist/devices/descriptorHelpers.js +82 -0
- package/dist/devices/descriptorHelpers.js.map +1 -0
- package/dist/devices/deviceManager.d.ts +19 -0
- package/dist/devices/deviceManager.js +74 -0
- package/dist/devices/deviceManager.js.map +1 -0
- package/dist/devices/deviceTypes.d.ts +44 -0
- package/dist/devices/deviceTypes.js +2 -0
- package/dist/devices/deviceTypes.js.map +1 -0
- package/dist/devices/homekitLock.d.ts +18 -0
- package/dist/devices/homekitLock.js +191 -0
- package/dist/devices/homekitLock.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +45 -19
- package/dist/platform.js +397 -234
- package/dist/platform.js.map +1 -1
- package/dist/taskQueue.d.ts +12 -0
- package/dist/taskQueue.js +50 -0
- package/dist/taskQueue.js.map +1 -0
- package/dist/utils.d.ts +10 -2
- package/dist/utils.js +50 -5
- package/dist/utils.js.map +1 -1
- package/package.json +32 -21
- package/dist/homekitDevice.d.ts +0 -44
- package/dist/homekitDevice.js +0 -506
- package/dist/homekitDevice.js.map +0 -1
- package/dist/platformAccessoryInformation.d.ts +0 -3
- package/dist/platformAccessoryInformation.js +0 -35
- package/dist/platformAccessoryInformation.js.map +0 -1
- package/dist/types/index.d.ts +0 -39
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
</span>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
|
-
<a href="https://github.com/ZeliardM/homebridge-ttlock-accesscode/blob/latest/LICENSE"><img src="https://
|
|
15
|
-
<a href="https://www.npmjs.com/package/homebridge-ttlock-accesscode/v/latest"><img src="https://
|
|
16
|
-
<a href="https://www.npmjs.com/package/homebridge-ttlock-accesscode/v/latest"><img src="https://
|
|
17
|
-
<a href="https://www.paypal.me/ZeliardM/USD/"><img src="https://
|
|
18
|
-
<a href="https://github.com/sponsors/ZeliardM"><img src="https://
|
|
14
|
+
<a href="https://github.com/ZeliardM/homebridge-ttlock-accesscode/blob/latest/LICENSE"><img src="https://img.shields.io/npm/l/homebridge-ttlock-accesscode?color=yellow" alt="mit license"></a>
|
|
15
|
+
<a href="https://www.npmjs.com/package/homebridge-ttlock-accesscode/v/latest"><img src="https://img.shields.io/npm/v/homebridge-ttlock-accesscode/latest?label=npm%40latest&color=blue" alt="latest npm version"></a>
|
|
16
|
+
<a href="https://www.npmjs.com/package/homebridge-ttlock-accesscode/v/latest"><img src="https://img.shields.io/npm/dt/homebridge-ttlock-accesscode?color=brightgreen" alt="npm downloads total"></a>
|
|
17
|
+
<a href="https://www.paypal.me/ZeliardM/USD/"><img src="https://img.shields.io/badge/donate-paypal-orange" alt="donate"></a>
|
|
18
|
+
<a href="https://github.com/sponsors/ZeliardM"><img src="https://img.shields.io/badge/donate-github-orange" alt="donate"></a>
|
|
19
19
|
</p>
|
|
20
20
|
|
|
21
21
|
<div align="center">
|
package/config.schema.json
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"clientId": {
|
|
18
18
|
"title": "Client ID",
|
|
19
19
|
"type": "string",
|
|
20
|
+
"required": true,
|
|
20
21
|
"description": "Client ID for TTLock Cloud API.",
|
|
21
22
|
"placeholder": "Client ID",
|
|
22
23
|
"minLength": 1
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"clientSecret": {
|
|
25
26
|
"title": "Client Secret",
|
|
26
27
|
"type": "string",
|
|
28
|
+
"required": true,
|
|
27
29
|
"description": "Client Secret for TTLock Cloud API.",
|
|
28
30
|
"placeholder": "Client Secret",
|
|
29
31
|
"minLength": 1
|
|
@@ -31,6 +33,7 @@
|
|
|
31
33
|
"username": {
|
|
32
34
|
"title": "Username",
|
|
33
35
|
"type": "string",
|
|
36
|
+
"required": true,
|
|
34
37
|
"description": "Username for TTLock App Account.",
|
|
35
38
|
"placeholder": "Username",
|
|
36
39
|
"minLength": 1
|
|
@@ -38,27 +41,41 @@
|
|
|
38
41
|
"password": {
|
|
39
42
|
"title": "Password",
|
|
40
43
|
"type": "string",
|
|
44
|
+
"required": true,
|
|
41
45
|
"description": "Password for TTLock App Account.",
|
|
42
46
|
"placeholder": "Password",
|
|
43
47
|
"minLength": 1
|
|
44
48
|
},
|
|
49
|
+
"totalApiCallsPerMonth": {
|
|
50
|
+
"title": "Total API Calls Per Month",
|
|
51
|
+
"type": "integer",
|
|
52
|
+
"description": "Total number of TTLock API calls allowed per month (used to automatically adjust polling).",
|
|
53
|
+
"default": 100000,
|
|
54
|
+
"minimum": 100000
|
|
55
|
+
},
|
|
45
56
|
"pollingInterval": {
|
|
46
57
|
"title": "Polling Interval (seconds)",
|
|
47
58
|
"type": "integer",
|
|
48
59
|
"description": "How often to check device status in the background (seconds)",
|
|
49
|
-
"default":
|
|
60
|
+
"default": 90
|
|
50
61
|
},
|
|
51
62
|
"discoveryPollingInterval": {
|
|
52
|
-
"title": "Discovery Polling Interval (
|
|
63
|
+
"title": "Discovery Polling Interval (hours)",
|
|
53
64
|
"type": "integer",
|
|
54
|
-
"description": "How often to discover new devices in the background (
|
|
55
|
-
"default":
|
|
65
|
+
"description": "How often to discover new devices in the background (hours)",
|
|
66
|
+
"default": 6
|
|
56
67
|
},
|
|
57
68
|
"offlineInterval": {
|
|
58
69
|
"title": "Offline Interval (days)",
|
|
59
70
|
"type": "integer",
|
|
60
71
|
"description": "How often to remove offline devices in the background (days)",
|
|
61
72
|
"default": 7
|
|
73
|
+
},
|
|
74
|
+
"waitTimeUpdate": {
|
|
75
|
+
"title": "Wait Time Update (milliseconds)",
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"description": "The time to wait to combine similar commands for a device before sending a command to a device (milliseconds). Default: 100.",
|
|
78
|
+
"default": 100
|
|
62
79
|
}
|
|
63
80
|
}
|
|
64
81
|
},
|
|
@@ -68,6 +85,7 @@
|
|
|
68
85
|
"clientSecret",
|
|
69
86
|
"username",
|
|
70
87
|
"password",
|
|
88
|
+
"totalApiCallsPerMonth",
|
|
71
89
|
{
|
|
72
90
|
"type": "fieldset",
|
|
73
91
|
"title": "Device Discovery (Optional)",
|
|
@@ -78,6 +96,15 @@
|
|
|
78
96
|
"discoveryPollingInterval",
|
|
79
97
|
"offlineInterval"
|
|
80
98
|
]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"type": "fieldset",
|
|
102
|
+
"title": "Advanced Settings (Optional)",
|
|
103
|
+
"description": "Don't change these, unless you understand what you're doing.",
|
|
104
|
+
"expandable": true,
|
|
105
|
+
"items": [
|
|
106
|
+
"waitTimeUpdate"
|
|
107
|
+
]
|
|
81
108
|
}
|
|
82
109
|
]
|
|
83
110
|
}
|
package/dist/api/ttlockApi.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Logging } from 'homebridge';
|
|
2
|
-
import {
|
|
2
|
+
import { UsageTracker } from './usageTracker.js';
|
|
3
|
+
import { FeatureInfo, Passcode, SysInfo, TTLockDevice } from '../devices/deviceTypes.js';
|
|
3
4
|
export declare class TTLockApi {
|
|
4
5
|
private log;
|
|
5
6
|
private clientId;
|
|
@@ -8,20 +9,20 @@ export declare class TTLockApi {
|
|
|
8
9
|
accessToken: string | null;
|
|
9
10
|
refreshToken: string | null;
|
|
10
11
|
private tokenMutex;
|
|
11
|
-
|
|
12
|
+
private usageTracker;
|
|
13
|
+
constructor(log: Logging, clientId: string, clientSecret: string, usageTracker?: UsageTracker);
|
|
12
14
|
private encryptPassword;
|
|
13
15
|
authenticate(username: string, password: string): Promise<void>;
|
|
14
16
|
private refreshTokenIfNeeded;
|
|
15
17
|
private makeAuthenticatedRequest;
|
|
16
18
|
private handleError;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
getDevices(): Promise<TTLockDevice[]>;
|
|
20
|
+
getDeviceDetails(lockId: string): Promise<Partial<SysInfo>>;
|
|
21
|
+
getSysInfo(lockId: string): Promise<Partial<SysInfo>>;
|
|
22
|
+
getFeatureInfo(featureValue: string): Promise<FeatureInfo>;
|
|
21
23
|
lock(lockId: string): Promise<void>;
|
|
22
24
|
unlock(lockId: string): Promise<void>;
|
|
23
|
-
|
|
24
|
-
getPasscodes(lockId: string): Promise<PasscodeList>;
|
|
25
|
+
getPasscodes(lockId: string): Promise<Passcode[]>;
|
|
25
26
|
addPasscode(lockId: string, passcode: string): Promise<{
|
|
26
27
|
keyboardPwdId: string;
|
|
27
28
|
}>;
|
package/dist/api/ttlockApi.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import { Mutex } from 'async-mutex';
|
|
3
2
|
import crypto from 'crypto';
|
|
4
3
|
import qs from 'qs';
|
|
4
|
+
import { Mutex } from 'async-mutex';
|
|
5
5
|
class RequestFailed extends Error {
|
|
6
6
|
constructor(message) {
|
|
7
7
|
super(message);
|
|
@@ -16,7 +16,8 @@ export class TTLockApi {
|
|
|
16
16
|
accessToken = null;
|
|
17
17
|
refreshToken = null;
|
|
18
18
|
tokenMutex = new Mutex();
|
|
19
|
-
|
|
19
|
+
usageTracker;
|
|
20
|
+
constructor(log, clientId, clientSecret, usageTracker) {
|
|
20
21
|
this.log = log;
|
|
21
22
|
this.clientId = clientId;
|
|
22
23
|
this.clientSecret = clientSecret;
|
|
@@ -26,22 +27,32 @@ export class TTLockApi {
|
|
|
26
27
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
27
28
|
},
|
|
28
29
|
});
|
|
29
|
-
this.log.debug('TTLockApi
|
|
30
|
+
this.log.debug('TTLockApi initialized');
|
|
31
|
+
this.usageTracker = usageTracker;
|
|
30
32
|
}
|
|
31
33
|
encryptPassword(password) {
|
|
32
34
|
return crypto.createHash('md5').update(password).digest('hex');
|
|
33
35
|
}
|
|
34
36
|
async authenticate(username, password) {
|
|
35
|
-
this.log.debug('Authenticating with TTLock API');
|
|
37
|
+
this.log.debug('Authenticating with TTLock API...');
|
|
36
38
|
try {
|
|
37
39
|
const encryptedPassword = this.encryptPassword(password);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if (this.usageTracker) {
|
|
41
|
+
const ok = await this.usageTracker.tryReserve(1, 'authenticate');
|
|
42
|
+
if (!ok) {
|
|
43
|
+
throw new Error('API usage budget exhausted (authenticate)');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const response = await Promise.race([
|
|
47
|
+
this.apiClient.post('oauth2/token', qs.stringify({
|
|
48
|
+
client_id: this.clientId,
|
|
49
|
+
client_secret: this.clientSecret,
|
|
50
|
+
grant_type: 'password',
|
|
51
|
+
username,
|
|
52
|
+
password: encryptedPassword,
|
|
53
|
+
})),
|
|
54
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('TTLock API authentication timed out')), 15000)),
|
|
55
|
+
]);
|
|
45
56
|
if (response.data.access_token && response.data.refresh_token) {
|
|
46
57
|
this.accessToken = response.data.access_token;
|
|
47
58
|
this.refreshToken = response.data.refresh_token;
|
|
@@ -63,7 +74,13 @@ export class TTLockApi {
|
|
|
63
74
|
}
|
|
64
75
|
const release = await this.tokenMutex.acquire();
|
|
65
76
|
try {
|
|
66
|
-
this.log.debug('Refreshing access token');
|
|
77
|
+
this.log.debug('Refreshing access token...');
|
|
78
|
+
if (this.usageTracker) {
|
|
79
|
+
const ok = await this.usageTracker.tryReserve(1, 'refreshToken');
|
|
80
|
+
if (!ok) {
|
|
81
|
+
throw new Error('API usage budget exhausted (refreshToken)');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
67
84
|
const response = await this.apiClient.post('oauth2/token', qs.stringify({
|
|
68
85
|
client_id: this.clientId,
|
|
69
86
|
client_secret: this.clientSecret,
|
|
@@ -99,6 +116,7 @@ export class TTLockApi {
|
|
|
99
116
|
date: Date.now(),
|
|
100
117
|
};
|
|
101
118
|
const fullEndpoint = `v3/${endpoint}`;
|
|
119
|
+
let lastError = new Error('Unknown request error');
|
|
102
120
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
103
121
|
try {
|
|
104
122
|
const response = await this.apiClient.request({
|
|
@@ -110,12 +128,13 @@ export class TTLockApi {
|
|
|
110
128
|
params: method === 'GET' ? requestData : undefined,
|
|
111
129
|
data: method === 'POST' ? qs.stringify(requestData) : undefined,
|
|
112
130
|
});
|
|
113
|
-
if (response.data
|
|
131
|
+
if ('errcode' in response.data && response.data.errcode !== 0) {
|
|
114
132
|
throw new RequestFailed(`API returned error: ${response.data.errmsg || 'Unknown error'}`);
|
|
115
133
|
}
|
|
116
134
|
return response.data;
|
|
117
135
|
}
|
|
118
136
|
catch (error) {
|
|
137
|
+
lastError = error;
|
|
119
138
|
if (error instanceof RequestFailed) {
|
|
120
139
|
const errorMsg = error.message;
|
|
121
140
|
this.log.debug(`Attempt ${attempt + 1} failed: ${errorMsg}`);
|
|
@@ -125,20 +144,48 @@ export class TTLockApi {
|
|
|
125
144
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
126
145
|
continue;
|
|
127
146
|
}
|
|
147
|
+
break;
|
|
128
148
|
}
|
|
129
|
-
|
|
130
|
-
if (error.response
|
|
131
|
-
|
|
132
|
-
|
|
149
|
+
if (axios.isAxiosError(error)) {
|
|
150
|
+
if (error.response) {
|
|
151
|
+
if (error.response.status === 401) {
|
|
152
|
+
this.log.debug('Access token expired, refreshing token...');
|
|
153
|
+
try {
|
|
154
|
+
await this.refreshTokenIfNeeded();
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
lastError = error;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const rf = new RequestFailed(`Request failed: status=${error.response.status}, body=${JSON.stringify(error.response.data)}`);
|
|
163
|
+
this.log.error(rf.message);
|
|
164
|
+
if (error.response.status >= 500 && attempt < maxRetries) {
|
|
165
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
166
|
+
this.log.debug(`Server error, retrying in ${delay / 1000} seconds...`);
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
168
|
+
lastError = rf;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
lastError = rf;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
this.log.debug(`Network error on attempt ${attempt + 1}: ${error.message}`);
|
|
175
|
+
if (attempt < maxRetries) {
|
|
176
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
177
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
133
178
|
continue;
|
|
134
179
|
}
|
|
135
|
-
|
|
136
|
-
throw new RequestFailed(`Request failed: status=${error.response.status}, body=${JSON.stringify(error.response.data)}`);
|
|
180
|
+
break;
|
|
137
181
|
}
|
|
138
182
|
this.handleError('Request failed', error);
|
|
139
|
-
|
|
183
|
+
break;
|
|
140
184
|
}
|
|
141
185
|
}
|
|
186
|
+
if (lastError instanceof Error) {
|
|
187
|
+
throw lastError;
|
|
188
|
+
}
|
|
142
189
|
throw new Error('Max retries reached');
|
|
143
190
|
}
|
|
144
191
|
handleError(message, error) {
|
|
@@ -152,52 +199,73 @@ export class TTLockApi {
|
|
|
152
199
|
this.log.error(`${message}: ${JSON.stringify(error)}`);
|
|
153
200
|
}
|
|
154
201
|
}
|
|
155
|
-
async
|
|
156
|
-
this.log.debug('Fetching list of locks');
|
|
202
|
+
async getDevices() {
|
|
157
203
|
const response = await this.makeAuthenticatedRequest('lock/list', 'GET', { pageNo: 1, pageSize: 1000 });
|
|
158
204
|
if (!response.list || !Array.isArray(response.list)) {
|
|
159
205
|
this.log.error('Invalid response format: expected list of locks');
|
|
160
206
|
throw new Error('Invalid response format: expected list of locks');
|
|
161
207
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
208
|
+
const lockList = [];
|
|
209
|
+
for (const lock of response.list) {
|
|
210
|
+
try {
|
|
211
|
+
const ttlockDevice = {};
|
|
212
|
+
ttlockDevice.feature_info = await this.getFeatureInfo(lock.featureValue);
|
|
213
|
+
ttlockDevice.sys_info = await this.getDeviceDetails(lock.lockId);
|
|
214
|
+
ttlockDevice.sys_info.alias = lock.lockAlias;
|
|
215
|
+
ttlockDevice.sys_info.battery = lock.electricQuantity;
|
|
216
|
+
ttlockDevice.sys_info.device_id = lock.lockId.toString();
|
|
217
|
+
ttlockDevice.sys_info.mac = lock.lockMac;
|
|
218
|
+
if (ttlockDevice.feature_info.passcode) {
|
|
219
|
+
ttlockDevice.sys_info.passcodes = await this.getPasscodes(lock.lockId);
|
|
220
|
+
}
|
|
221
|
+
ttlockDevice.offline = false;
|
|
222
|
+
ttlockDevice.last_seen = new Date();
|
|
223
|
+
lockList.push(ttlockDevice);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
this.handleError(`Failed to fetch details for lock ${lock.lockId}`, error);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return lockList;
|
|
166
231
|
}
|
|
167
|
-
async
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
firmwareRevision: data.firmwareRevision,
|
|
177
|
-
};
|
|
232
|
+
async getDeviceDetails(lockId) {
|
|
233
|
+
const sysInfo = {};
|
|
234
|
+
const detailResponse = await this.makeAuthenticatedRequest('lock/detail', 'GET', { lockId });
|
|
235
|
+
const stateResponse = await this.makeAuthenticatedRequest('lock/queryOpenState', 'GET', { lockId });
|
|
236
|
+
sysInfo.fw_ver = detailResponse.firmwareRevision.split('.').slice(0, 3).join('.');
|
|
237
|
+
sysInfo.hw_ver = detailResponse.hardwareRevision;
|
|
238
|
+
sysInfo.model = detailResponse.modelNum;
|
|
239
|
+
sysInfo.state = stateResponse.state === 0 ? 1 : stateResponse.state === 1 ? 0 : stateResponse.state;
|
|
240
|
+
return sysInfo;
|
|
178
241
|
}
|
|
179
|
-
async
|
|
180
|
-
this.log.debug(`Fetching
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
242
|
+
async getSysInfo(lockId) {
|
|
243
|
+
this.log.debug(`Fetching sys_info for lock: ${lockId}`);
|
|
244
|
+
const sysInfo = {};
|
|
245
|
+
const stateResponse = await this.makeAuthenticatedRequest('lock/queryOpenState', 'GET', { lockId });
|
|
246
|
+
const batteryResponse = await this.makeAuthenticatedRequest('lock/queryElectricQuantity', 'GET', { lockId });
|
|
247
|
+
sysInfo.state = stateResponse.state === 0 ? 1 : stateResponse.state === 1 ? 0 : stateResponse.state;
|
|
248
|
+
sysInfo.battery = batteryResponse.electricQuantity;
|
|
249
|
+
return sysInfo;
|
|
185
250
|
}
|
|
186
|
-
async
|
|
187
|
-
this.log.debug(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
251
|
+
async getFeatureInfo(featureValue) {
|
|
252
|
+
this.log.debug('Calculating feature info');
|
|
253
|
+
const featureInfo = {};
|
|
254
|
+
try {
|
|
255
|
+
if (!featureValue || typeof featureValue !== 'string') {
|
|
256
|
+
featureInfo.passcode = false;
|
|
257
|
+
return featureInfo;
|
|
258
|
+
}
|
|
259
|
+
const hex = featureValue.replace(/[^0-9a-fA-F]/g, '') || '0';
|
|
260
|
+
const value = BigInt(`0x${hex}`);
|
|
261
|
+
featureInfo.passcode = ((value >> 0n) & 1n) === 1n;
|
|
262
|
+
return featureInfo;
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
this.handleError('Failed to parse featureValue', error);
|
|
266
|
+
featureInfo.passcode = false;
|
|
267
|
+
return featureInfo;
|
|
268
|
+
}
|
|
201
269
|
}
|
|
202
270
|
async lock(lockId) {
|
|
203
271
|
this.log.debug(`Locking lock: ${lockId}`);
|
|
@@ -209,13 +277,6 @@ export class TTLockApi {
|
|
|
209
277
|
await this.makeAuthenticatedRequest('lock/unlock', 'POST', { lockId });
|
|
210
278
|
this.log.debug(`Lock ${lockId} unlocked`);
|
|
211
279
|
}
|
|
212
|
-
async getBatteryLevel(lockId) {
|
|
213
|
-
this.log.debug(`Fetching battery level for lock: ${lockId}`);
|
|
214
|
-
const data = await this.makeAuthenticatedRequest('lock/queryElectricQuantity', 'GET', { lockId });
|
|
215
|
-
return {
|
|
216
|
-
battery: data.electricQuantity,
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
280
|
async getPasscodes(lockId) {
|
|
220
281
|
this.log.debug(`Fetching passcodes for lock: ${lockId}`);
|
|
221
282
|
const response = await this.makeAuthenticatedRequest('lock/listKeyboardPwd', 'GET', { lockId, pageNo: 1, pageSize: 1000, orderBy: 0 });
|
|
@@ -225,9 +286,9 @@ export class TTLockApi {
|
|
|
225
286
|
}
|
|
226
287
|
this.log.debug(`Found ${response.list.length} passcodes for lock: ${lockId}`);
|
|
227
288
|
return response.list.map((item, index) => ({
|
|
228
|
-
|
|
289
|
+
passcode_id: item.keyboardPwdId.toString(),
|
|
229
290
|
index: (index).toString(),
|
|
230
|
-
|
|
291
|
+
lock_id: item.lockId.toString(),
|
|
231
292
|
passcode: item.keyboardPwd,
|
|
232
293
|
}));
|
|
233
294
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ttlockApi.js","sourceRoot":"","sources":["../../src/api/ttlockApi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ttlockApi.js","sourceRoot":"","sources":["../../src/api/ttlockApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { API, Logging } from 'homebridge';
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
3
|
+
export declare class UsageTracker extends EventEmitter {
|
|
4
|
+
private totalAllowed;
|
|
5
|
+
private storageFilePath?;
|
|
6
|
+
private state;
|
|
7
|
+
private log;
|
|
8
|
+
private api;
|
|
9
|
+
private mutex;
|
|
10
|
+
private rolloverInterval?;
|
|
11
|
+
private currentTier;
|
|
12
|
+
private pendingReserved;
|
|
13
|
+
constructor(api: API, log: Logging, totalAllowed: number);
|
|
14
|
+
init(): Promise<void>;
|
|
15
|
+
private loadOrInit;
|
|
16
|
+
private persist;
|
|
17
|
+
getUsage(): {
|
|
18
|
+
used: number;
|
|
19
|
+
totalAllowed: number;
|
|
20
|
+
daysInMonth: number;
|
|
21
|
+
remaining: number;
|
|
22
|
+
daysRemaining: number;
|
|
23
|
+
remainingDailyAllowance: number;
|
|
24
|
+
lastUpdatedISO: string | undefined;
|
|
25
|
+
};
|
|
26
|
+
increment(n?: number, reason?: string): Promise<void>;
|
|
27
|
+
tryReserve(n?: number, reason?: string): Promise<boolean>;
|
|
28
|
+
beginBatch(n?: number, reason?: string): Promise<boolean>;
|
|
29
|
+
consumePendingReservation(n?: number): Promise<boolean>;
|
|
30
|
+
private computeTier;
|
|
31
|
+
canReserve(n?: number): boolean;
|
|
32
|
+
resetForNewMonth(): Promise<void>;
|
|
33
|
+
private scheduleRolloverCheck;
|
|
34
|
+
private checkRollover;
|
|
35
|
+
updateTotalAllowed(newTotal: number): Promise<void>;
|
|
36
|
+
stop(): void;
|
|
37
|
+
}
|