@boozilla/homebridge-shome 1.0.3 → 1.0.5
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/dist/accessories/heaterAccessory.js +14 -2
- package/dist/accessories/heaterAccessory.js.map +1 -1
- package/dist/shomeClient.d.ts +1 -0
- package/dist/shomeClient.js +29 -25
- package/dist/shomeClient.js.map +1 -1
- package/package.json +1 -1
- package/src/accessories/heaterAccessory.ts +19 -2
- package/src/shomeClient.ts +35 -26
|
@@ -19,6 +19,7 @@ export class HeaterAccessory {
|
|
|
19
19
|
.onSet(this.setActive.bind(this));
|
|
20
20
|
this.service.getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
|
|
21
21
|
.onGet(this.getCurrentState.bind(this));
|
|
22
|
+
this.service.updateCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState, this.platform.Characteristic.TargetHeaterCoolerState.HEAT);
|
|
22
23
|
this.service.getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
|
|
23
24
|
.setProps({
|
|
24
25
|
validValues: [this.platform.Characteristic.TargetHeaterCoolerState.HEAT],
|
|
@@ -27,7 +28,13 @@ export class HeaterAccessory {
|
|
|
27
28
|
.onGet(this.getTargetState.bind(this));
|
|
28
29
|
this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
29
30
|
.onGet(this.getCurrentTemperature.bind(this));
|
|
30
|
-
this.service.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
|
|
31
|
+
const thresholdCharacteristic = this.service.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature);
|
|
32
|
+
// Prevent initial value error log by setting a valid default if the current value is out of bounds.
|
|
33
|
+
const currentTargetTemp = this.accessory.context.subDevice.setTemp;
|
|
34
|
+
if (currentTargetTemp < 5) {
|
|
35
|
+
thresholdCharacteristic.updateValue(5);
|
|
36
|
+
}
|
|
37
|
+
thresholdCharacteristic
|
|
31
38
|
.setProps({ minValue: 5, maxValue: 40, minStep: 1 })
|
|
32
39
|
.onGet(this.getTargetTemperature.bind(this))
|
|
33
40
|
.onSet(this.setTargetTemperature.bind(this));
|
|
@@ -53,7 +60,12 @@ export class HeaterAccessory {
|
|
|
53
60
|
}
|
|
54
61
|
async getTargetTemperature() {
|
|
55
62
|
const subDevice = this.accessory.context.subDevice;
|
|
56
|
-
|
|
63
|
+
const targetTemp = subDevice.setTemp;
|
|
64
|
+
// When the heater is off, the API might return 0. We should return a valid temp for HomeKit.
|
|
65
|
+
if (subDevice.deviceStatus !== 1 || targetTemp < 5) {
|
|
66
|
+
return 5;
|
|
67
|
+
}
|
|
68
|
+
return targetTemp;
|
|
57
69
|
}
|
|
58
70
|
async setActive(value) {
|
|
59
71
|
const device = this.accessory.context.device;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heaterAccessory.js","sourceRoot":"","sources":["../../src/accessories/heaterAccessory.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAIH;IACA;IAJf,OAAO,CAAU;IAEzB,YACuB,QAAuB,EACvB,SAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAe;QACvB,cAAS,GAAT,SAAS,CAAmB;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;QAE/C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACnE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;aACvE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC;aAC/D,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1G,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEtF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;aAChE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC;aAClF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACjF,QAAQ,CAAC;YACR,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC;SACzE,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAC5E,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"heaterAccessory.js","sourceRoot":"","sources":["../../src/accessories/heaterAccessory.ts"],"names":[],"mappings":"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"}
|
package/dist/shomeClient.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare class ShomeClient {
|
|
|
23
23
|
constructor(log: Logger, username: string, password: string, deviceId: string);
|
|
24
24
|
private enqueue;
|
|
25
25
|
private processQueue;
|
|
26
|
+
private executeTaskWithRetries;
|
|
26
27
|
login(): Promise<string | null>;
|
|
27
28
|
private performLogin;
|
|
28
29
|
getDeviceList(): Promise<MainDevice[]>;
|
package/dist/shomeClient.js
CHANGED
|
@@ -23,27 +23,36 @@ export class ShomeClient {
|
|
|
23
23
|
this.password = password;
|
|
24
24
|
this.deviceId = deviceId;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
enqueue(request) {
|
|
27
27
|
return new Promise((resolve, reject) => {
|
|
28
28
|
this.requestQueue.push({ request, resolve, reject, authRetry: false });
|
|
29
|
-
|
|
30
|
-
this.processQueue();
|
|
31
|
-
}
|
|
29
|
+
this.processQueue();
|
|
32
30
|
});
|
|
33
31
|
}
|
|
34
32
|
async processQueue() {
|
|
35
|
-
if (this.isProcessing
|
|
36
|
-
return;
|
|
33
|
+
if (this.isProcessing) {
|
|
34
|
+
return; // A processing loop is already running
|
|
37
35
|
}
|
|
38
36
|
this.isProcessing = true;
|
|
39
|
-
|
|
37
|
+
while (this.requestQueue.length > 0) {
|
|
38
|
+
const task = this.requestQueue.shift();
|
|
39
|
+
try {
|
|
40
|
+
const result = await this.executeTaskWithRetries(task);
|
|
41
|
+
task.resolve(result);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
task.reject(error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
this.isProcessing = false;
|
|
48
|
+
}
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
async executeTaskWithRetries(task) {
|
|
40
51
|
let retries = 0;
|
|
41
|
-
|
|
52
|
+
while (true) {
|
|
42
53
|
try {
|
|
43
54
|
const result = await task.request();
|
|
44
|
-
|
|
45
|
-
this.isProcessing = false;
|
|
46
|
-
this.processQueue();
|
|
55
|
+
return result;
|
|
47
56
|
}
|
|
48
57
|
catch (error) {
|
|
49
58
|
const isAuthError = axios.isAxiosError(error) && error.response?.status === 401;
|
|
@@ -52,23 +61,18 @@ export class ShomeClient {
|
|
|
52
61
|
this.cachedAccessToken = null;
|
|
53
62
|
this.tokenExpiry = 0;
|
|
54
63
|
task.authRetry = true;
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
else if (!isAuthError && retries < MAX_RETRIES) {
|
|
58
|
-
retries++;
|
|
59
|
-
const backoffTime = INITIAL_BACKOFF_MS * Math.pow(2, retries - 1);
|
|
60
|
-
this.log.warn(`Request failed. Retrying in ${backoffTime}ms... (Attempt ${retries}/${MAX_RETRIES})`);
|
|
61
|
-
setTimeout(execute, backoffTime);
|
|
64
|
+
continue; // Immediately retry the request
|
|
62
65
|
}
|
|
63
|
-
|
|
64
|
-
this.log.error(`Request failed after ${MAX_RETRIES} retries.`, error);
|
|
65
|
-
|
|
66
|
-
this.isProcessing = false;
|
|
67
|
-
this.processQueue();
|
|
66
|
+
if (retries >= MAX_RETRIES) {
|
|
67
|
+
this.log.error(`Request failed after ${MAX_RETRIES} retries. Giving up.`, error);
|
|
68
|
+
throw error; // Throw final error
|
|
68
69
|
}
|
|
70
|
+
retries++;
|
|
71
|
+
const backoffTime = INITIAL_BACKOFF_MS * Math.pow(2, retries - 1);
|
|
72
|
+
this.log.warn(`Request failed. Retrying in ${backoffTime}ms... (Attempt ${retries}/${MAX_RETRIES})`);
|
|
73
|
+
await new Promise(resolve => setTimeout(resolve, backoffTime));
|
|
69
74
|
}
|
|
70
|
-
}
|
|
71
|
-
await execute();
|
|
75
|
+
}
|
|
72
76
|
}
|
|
73
77
|
async login() {
|
|
74
78
|
return this.enqueue(() => this.performLogin());
|
package/dist/shomeClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shomeClient.js","sourceRoot":"","sources":["../src/shomeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,QAAQ,GAAG,mCAAmC,CAAC;AACrD,MAAM,YAAY,GAAG,kEAAkE,CAAC;AACxF,MAAM,kBAAkB,GAAG,yEAAyE,CAAC;AACrG,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAuBhC,MAAM,OAAO,WAAW;IASC;IACA;IACA;IACA;IAXf,iBAAiB,GAAkB,IAAI,CAAC;IACxC,KAAK,GAAkB,IAAI,CAAC;IAC5B,WAAW,GAAW,CAAC,CAAC;IAChC,8DAA8D;IACtD,YAAY,GAAqB,EAAE,CAAC;IACpC,YAAY,GAAG,KAAK,CAAC;IAE7B,YACuB,GAAW,EACX,QAAgB,EAChB,QAAgB,EAChB,QAAgB;QAHhB,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,aAAQ,GAAR,QAAQ,CAAQ;IAEvC,CAAC;IAEO,
|
|
1
|
+
{"version":3,"file":"shomeClient.js","sourceRoot":"","sources":["../src/shomeClient.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -28,6 +28,8 @@ export class HeaterAccessory {
|
|
|
28
28
|
this.service.getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
|
|
29
29
|
.onGet(this.getCurrentState.bind(this));
|
|
30
30
|
|
|
31
|
+
this.service.updateCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState, this.platform.Characteristic.TargetHeaterCoolerState.HEAT);
|
|
32
|
+
|
|
31
33
|
this.service.getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
|
|
32
34
|
.setProps({
|
|
33
35
|
validValues: [this.platform.Characteristic.TargetHeaterCoolerState.HEAT],
|
|
@@ -38,7 +40,15 @@ export class HeaterAccessory {
|
|
|
38
40
|
this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
39
41
|
.onGet(this.getCurrentTemperature.bind(this));
|
|
40
42
|
|
|
41
|
-
this.service.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
|
|
43
|
+
const thresholdCharacteristic = this.service.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature);
|
|
44
|
+
|
|
45
|
+
// Prevent initial value error log by setting a valid default if the current value is out of bounds.
|
|
46
|
+
const currentTargetTemp = this.accessory.context.subDevice.setTemp;
|
|
47
|
+
if (currentTargetTemp < 5) {
|
|
48
|
+
thresholdCharacteristic.updateValue(5);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
thresholdCharacteristic
|
|
42
52
|
.setProps({ minValue: 5, maxValue: 40, minStep: 1 })
|
|
43
53
|
.onGet(this.getTargetTemperature.bind(this))
|
|
44
54
|
.onSet(this.setTargetTemperature.bind(this));
|
|
@@ -69,7 +79,13 @@ export class HeaterAccessory {
|
|
|
69
79
|
|
|
70
80
|
async getTargetTemperature(): Promise<CharacteristicValue> {
|
|
71
81
|
const subDevice = this.accessory.context.subDevice;
|
|
72
|
-
|
|
82
|
+
const targetTemp = subDevice.setTemp;
|
|
83
|
+
|
|
84
|
+
// When the heater is off, the API might return 0. We should return a valid temp for HomeKit.
|
|
85
|
+
if (subDevice.deviceStatus !== 1 || targetTemp < 5) {
|
|
86
|
+
return 5;
|
|
87
|
+
}
|
|
88
|
+
return targetTemp;
|
|
73
89
|
}
|
|
74
90
|
|
|
75
91
|
async setActive(value: CharacteristicValue) {
|
|
@@ -92,6 +108,7 @@ export class HeaterAccessory {
|
|
|
92
108
|
async setTargetTemperature(value: CharacteristicValue) {
|
|
93
109
|
const device = this.accessory.context.device;
|
|
94
110
|
const subDevice = this.accessory.context.subDevice;
|
|
111
|
+
|
|
95
112
|
const success = await this.platform.shomeClient.setDevice(
|
|
96
113
|
device.thngId,
|
|
97
114
|
subDevice.deviceId.toString(),
|
package/src/shomeClient.ts
CHANGED
|
@@ -46,29 +46,39 @@ export class ShomeClient {
|
|
|
46
46
|
) {
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
private
|
|
49
|
+
private enqueue<T>(request: () => Promise<T>): Promise<T> {
|
|
50
50
|
return new Promise<T>((resolve, reject) => {
|
|
51
51
|
this.requestQueue.push({ request, resolve, reject, authRetry: false });
|
|
52
|
-
|
|
53
|
-
this.processQueue();
|
|
54
|
-
}
|
|
52
|
+
this.processQueue();
|
|
55
53
|
});
|
|
56
54
|
}
|
|
57
55
|
|
|
58
56
|
private async processQueue(): Promise<void> {
|
|
59
|
-
if (this.isProcessing
|
|
60
|
-
return;
|
|
57
|
+
if (this.isProcessing) {
|
|
58
|
+
return; // A processing loop is already running
|
|
61
59
|
}
|
|
62
60
|
this.isProcessing = true;
|
|
63
|
-
const task = this.requestQueue.shift()!;
|
|
64
|
-
let retries = 0;
|
|
65
61
|
|
|
66
|
-
|
|
62
|
+
while (this.requestQueue.length > 0) {
|
|
63
|
+
const task = this.requestQueue.shift()!;
|
|
67
64
|
try {
|
|
68
|
-
const result = await
|
|
65
|
+
const result = await this.executeTaskWithRetries(task);
|
|
69
66
|
task.resolve(result);
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
} catch (error) {
|
|
68
|
+
task.reject(error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
this.isProcessing = false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
private async executeTaskWithRetries(task: QueueTask<any>): Promise<any> {
|
|
77
|
+
let retries = 0;
|
|
78
|
+
while (true) {
|
|
79
|
+
try {
|
|
80
|
+
const result = await task.request();
|
|
81
|
+
return result;
|
|
72
82
|
} catch (error) {
|
|
73
83
|
const isAuthError = axios.isAxiosError(error) && error.response?.status === 401;
|
|
74
84
|
|
|
@@ -77,22 +87,20 @@ export class ShomeClient {
|
|
|
77
87
|
this.cachedAccessToken = null;
|
|
78
88
|
this.tokenExpiry = 0;
|
|
79
89
|
task.authRetry = true;
|
|
80
|
-
|
|
81
|
-
} else if (!isAuthError && retries < MAX_RETRIES) {
|
|
82
|
-
retries++;
|
|
83
|
-
const backoffTime = INITIAL_BACKOFF_MS * Math.pow(2, retries - 1);
|
|
84
|
-
this.log.warn(`Request failed. Retrying in ${backoffTime}ms... (Attempt ${retries}/${MAX_RETRIES})`);
|
|
85
|
-
setTimeout(execute, backoffTime);
|
|
86
|
-
} else {
|
|
87
|
-
this.log.error(`Request failed after ${MAX_RETRIES} retries.`, error);
|
|
88
|
-
task.reject(error);
|
|
89
|
-
this.isProcessing = false;
|
|
90
|
-
this.processQueue();
|
|
90
|
+
continue; // Immediately retry the request
|
|
91
91
|
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
92
|
|
|
95
|
-
|
|
93
|
+
if (retries >= MAX_RETRIES) {
|
|
94
|
+
this.log.error(`Request failed after ${MAX_RETRIES} retries. Giving up.`, error);
|
|
95
|
+
throw error; // Throw final error
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
retries++;
|
|
99
|
+
const backoffTime = INITIAL_BACKOFF_MS * Math.pow(2, retries - 1);
|
|
100
|
+
this.log.warn(`Request failed. Retrying in ${backoffTime}ms... (Attempt ${retries}/${MAX_RETRIES})`);
|
|
101
|
+
await new Promise(resolve => setTimeout(resolve, backoffTime));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
async login(): Promise<string | null> {
|
|
@@ -175,6 +183,7 @@ export class ShomeClient {
|
|
|
175
183
|
params: { createDate, hashData },
|
|
176
184
|
headers: { 'Authorization': `Bearer ${token}` },
|
|
177
185
|
});
|
|
186
|
+
|
|
178
187
|
return response.data.deviceInfoList || null;
|
|
179
188
|
});
|
|
180
189
|
}
|