homey-api 3.4.4 → 3.4.7
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/lib/AthomCloudAPI.js
CHANGED
|
@@ -385,6 +385,7 @@ for(const {@link HomeyAPIV2.ManagerDevices.Device device} of Object.values(devic
|
|
|
385
385
|
try {
|
|
386
386
|
responseBody = await response.json();
|
|
387
387
|
} catch (err) {
|
|
388
|
+
this.__debug(`Invalid response from server (${response.status}): ${response.text()}`);
|
|
388
389
|
throw new APIError(`Invalid response from server: ${response.text()}`, response.status);
|
|
389
390
|
}
|
|
390
391
|
|
|
@@ -453,6 +454,7 @@ for(const {@link HomeyAPIV2.ManagerDevices.Device device} of Object.values(devic
|
|
|
453
454
|
try {
|
|
454
455
|
responseBody = await response.json();
|
|
455
456
|
} catch (err) {
|
|
457
|
+
this.__debug(`Invalid response from server (${response.status}): ${response.text()}`);
|
|
456
458
|
throw new APIError(`Invalid response from server: ${response.text()}`, response.status);
|
|
457
459
|
}
|
|
458
460
|
|
|
@@ -520,6 +522,7 @@ for(const {@link HomeyAPIV2.ManagerDevices.Device device} of Object.values(devic
|
|
|
520
522
|
try {
|
|
521
523
|
responseBody = await response.json();
|
|
522
524
|
} catch (err) {
|
|
525
|
+
this.__debug(`Invalid response from server (${response.status}): ${response.text()}`);
|
|
523
526
|
throw new APIError(`Invalid response from server: ${response.text()}`, response.status);
|
|
524
527
|
}
|
|
525
528
|
|
|
@@ -571,6 +574,7 @@ for(const {@link HomeyAPIV2.ManagerDevices.Device device} of Object.values(devic
|
|
|
571
574
|
try {
|
|
572
575
|
responseBody = await response.json();
|
|
573
576
|
} catch (err) {
|
|
577
|
+
this.__debug(`Invalid response from server (${response.status}): ${response.text()}`);
|
|
574
578
|
throw new APIError(`Invalid response from server: ${response.text()}`, response.status);
|
|
575
579
|
}
|
|
576
580
|
|
|
@@ -37,27 +37,30 @@ class Item extends EventEmitter {
|
|
|
37
37
|
writable: false,
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
// Set Homey
|
|
41
40
|
Object.defineProperty(this, '__homey', {
|
|
42
41
|
value: homey,
|
|
43
42
|
enumerable: false,
|
|
44
43
|
writable: false,
|
|
45
44
|
});
|
|
46
45
|
|
|
47
|
-
// Set Manager
|
|
48
46
|
Object.defineProperty(this, '__manager', {
|
|
49
47
|
value: manager,
|
|
50
48
|
enumerable: false,
|
|
51
49
|
writable: false,
|
|
52
50
|
});
|
|
53
|
-
|
|
54
|
-
// Set Connected
|
|
51
|
+
|
|
55
52
|
Object.defineProperty(this, '__connected', {
|
|
56
53
|
value: false,
|
|
57
54
|
enumerable: false,
|
|
58
55
|
writable: true,
|
|
59
56
|
});
|
|
60
57
|
|
|
58
|
+
Object.defineProperty(this, '__lastUpdated', {
|
|
59
|
+
value: new Date(),
|
|
60
|
+
enumerable: false,
|
|
61
|
+
writable: true,
|
|
62
|
+
});
|
|
63
|
+
|
|
61
64
|
// Set Properties
|
|
62
65
|
for (const [key, value] of Object.entries(properties)) {
|
|
63
66
|
if (key === 'id') continue;
|
|
@@ -97,6 +100,8 @@ class Item extends EventEmitter {
|
|
|
97
100
|
this[key] = value;
|
|
98
101
|
}
|
|
99
102
|
|
|
103
|
+
this.__lastUpdated = new Date();
|
|
104
|
+
|
|
100
105
|
this.emit('update', properties);
|
|
101
106
|
}
|
|
102
107
|
|
|
@@ -27,14 +27,12 @@ class Manager extends EventEmitter {
|
|
|
27
27
|
}) {
|
|
28
28
|
super();
|
|
29
29
|
|
|
30
|
-
// Set Homey
|
|
31
30
|
Object.defineProperty(this, '__homey', {
|
|
32
31
|
value: homey,
|
|
33
32
|
enumerable: false,
|
|
34
33
|
writable: false,
|
|
35
34
|
});
|
|
36
35
|
|
|
37
|
-
// Set Items
|
|
38
36
|
Object.defineProperty(this, 'itemClasses', {
|
|
39
37
|
value: Object.entries(items).reduce((obj, [itemName, item]) => {
|
|
40
38
|
const ItemClass = this.constructor.CRUD[itemName]
|
|
@@ -62,14 +60,12 @@ class Manager extends EventEmitter {
|
|
|
62
60
|
writable: false,
|
|
63
61
|
});
|
|
64
62
|
|
|
65
|
-
// Set Connected
|
|
66
63
|
Object.defineProperty(this, '__connected', {
|
|
67
64
|
value: false,
|
|
68
65
|
enumerable: false,
|
|
69
66
|
writable: true,
|
|
70
67
|
});
|
|
71
68
|
|
|
72
|
-
// Set Cache
|
|
73
69
|
Object.defineProperty(this, '__cache', {
|
|
74
70
|
value: Object.values(items).reduce((obj, item) => ({
|
|
75
71
|
...obj,
|
|
@@ -69,6 +69,13 @@ class Device extends Item {
|
|
|
69
69
|
this.__capabilityInstances[capabilityId] = this.__capabilityInstances[capabilityId] || [];
|
|
70
70
|
this.__capabilityInstances[capabilityId].push(instance);
|
|
71
71
|
|
|
72
|
+
// Schedule a refresh if it's been more than a second since the device has updated.
|
|
73
|
+
const now = Date.now();
|
|
74
|
+
|
|
75
|
+
if (this.__lastUpdated.getTime() + 1000 < now) {
|
|
76
|
+
this.manager.scheduleRefresh();
|
|
77
|
+
}
|
|
78
|
+
|
|
72
79
|
return instance;
|
|
73
80
|
}
|
|
74
81
|
|
|
@@ -117,31 +124,32 @@ class Device extends Item {
|
|
|
117
124
|
}
|
|
118
125
|
|
|
119
126
|
onReconnect() {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
127
|
+
this.manager.scheduleRefresh();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
refreshCapabilityInstances() {
|
|
131
|
+
Object.entries(this.__capabilityInstances).forEach(([capabilityId, capabilityInstances]) => {
|
|
132
|
+
const value = this.capabilitiesObj
|
|
133
|
+
? this.capabilitiesObj[capabilityId] != null
|
|
134
|
+
? this.capabilitiesObj[capabilityId].value
|
|
135
|
+
: null
|
|
136
|
+
: null;
|
|
137
|
+
|
|
138
|
+
const lastUpdated = this.capabilitiesObj
|
|
139
|
+
? this.capabilitiesObj[capabilityId] != null
|
|
140
|
+
? this.capabilitiesObj[capabilityId].lastUpdated
|
|
141
|
+
: null
|
|
142
|
+
: null;
|
|
143
|
+
|
|
144
|
+
for (const capabilityInstance of capabilityInstances) {
|
|
145
|
+
capabilityInstance.__onCapabilityValue({
|
|
146
|
+
capabilityId,
|
|
147
|
+
value,
|
|
148
|
+
transactionId: Util.uuid(),
|
|
149
|
+
transactionTime: lastUpdated
|
|
140
150
|
});
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.catch(err => this.__debug(`Device[${this.id}].onReconnectError:`, err));
|
|
144
|
-
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
145
153
|
}
|
|
146
154
|
|
|
147
155
|
/**
|
|
@@ -12,6 +12,31 @@ class ManagerDevices extends Manager {
|
|
|
12
12
|
Device,
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
scheduleRefresh() {
|
|
16
|
+
if (this.__refreshTimeout) {
|
|
17
|
+
clearTimeout(this.__refreshTimeout);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (this.__pendingRefreshDevicesCall != null) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
this.__refreshTimeout = setTimeout(() => {
|
|
25
|
+
if (this.isConnected()) {
|
|
26
|
+
this.__debug('Refreshing devices...');
|
|
27
|
+
this.__pendingRefreshDevicesCall = this.getDevices({ $cache: false }).then(devices => {
|
|
28
|
+
for (const device of Object.values(devices)) {
|
|
29
|
+
device.refreshCapabilityInstances();
|
|
30
|
+
}
|
|
31
|
+
}).catch(err => {
|
|
32
|
+
this.__debug('Failed to refresh devices.', err);
|
|
33
|
+
}).finally(() => {
|
|
34
|
+
this.__pendingRefreshDevicesCall = null;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}, 1000);
|
|
38
|
+
}
|
|
39
|
+
|
|
15
40
|
}
|
|
16
41
|
|
|
17
42
|
module.exports = ManagerDevices;
|