homey-api 1.10.17 → 3.0.0-rc.2
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 +1 -1
- package/assets/types/homey-api.d.ts +47 -588
- package/assets/types/homey-api.private.d.ts +47 -648
- package/index.js +1 -1
- package/lib/APIErrorNotFound.js +20 -0
- package/lib/AthomCloudAPI/Homey.js +3 -1
- package/lib/EventEmitter.js +0 -6
- package/lib/HomeyAPI/HomeyAPI.js +49 -5
- package/lib/HomeyAPI/HomeyAPIErrorNotFound.js +21 -0
- package/lib/HomeyAPI/HomeyAPIV2/Manager.js +2 -575
- package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices/Capability.js +20 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices/Device.js +18 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices.js +20 -3
- package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers/Driver.js +25 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers.js +29 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/AdvancedFlow.js +17 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/Flow.js +34 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardAction.js +25 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardCondition.js +25 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardTrigger.js +25 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow.js +104 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken/FlowToken.js +24 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken.js +29 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights/Log.js +23 -0
- package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights.js +29 -0
- package/lib/HomeyAPI/HomeyAPIV2.js +12 -716
- package/lib/HomeyAPI/HomeyAPIV3/Item.js +173 -2
- package/lib/HomeyAPI/HomeyAPIV3/Manager.js +531 -3
- package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerApps}/App.js +1 -1
- package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3}/ManagerApps.js +4 -3
- package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices/Capability.js +9 -0
- package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/Device.js +78 -3
- package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/DeviceCapability.js +3 -3
- package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices.js +17 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers/Driver.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers.js +15 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/AdvancedFlow.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/Flow.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCard.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardAction.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardCondition.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardTrigger.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow.js +12 -23
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken/FlowToken.js +16 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken.js +15 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights/Log.js +9 -0
- package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights.js +15 -0
- package/lib/HomeyAPI/HomeyAPIV3.js +728 -4
- package/lib/HomeyAPI/HomeyAPIV3Cloud.js +1 -1
- package/lib/HomeyAPI/HomeyAPIV3Local.js +1 -1
- package/package.json +1 -1
- package/lib/HomeyAPI/HomeyAPIApp.js +0 -127
- package/lib/HomeyAPI/HomeyAPIV2/Item.js +0 -177
|
@@ -1,8 +1,179 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const EventEmitter = require('../../EventEmitter');
|
|
4
4
|
|
|
5
|
-
class Item extends
|
|
5
|
+
class Item extends EventEmitter {
|
|
6
|
+
|
|
7
|
+
static ID = null; // Set by Manager.js
|
|
8
|
+
|
|
9
|
+
constructor({
|
|
10
|
+
id,
|
|
11
|
+
homey,
|
|
12
|
+
manager,
|
|
13
|
+
properties,
|
|
14
|
+
}) {
|
|
15
|
+
super();
|
|
16
|
+
|
|
17
|
+
// Set ID
|
|
18
|
+
Object.defineProperty(this, 'id', {
|
|
19
|
+
value: id,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
writable: false,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Set Homey
|
|
25
|
+
Object.defineProperty(this, 'homey', {
|
|
26
|
+
value: homey,
|
|
27
|
+
enumerable: false,
|
|
28
|
+
writable: false,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Set Manager
|
|
32
|
+
Object.defineProperty(this, 'manager', {
|
|
33
|
+
value: manager,
|
|
34
|
+
enumerable: false,
|
|
35
|
+
writable: false,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Set Connected
|
|
39
|
+
Object.defineProperty(this, '__connected', {
|
|
40
|
+
value: false,
|
|
41
|
+
enumerable: false,
|
|
42
|
+
writable: true,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Set Properties
|
|
46
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
47
|
+
if (key === 'id') continue;
|
|
48
|
+
|
|
49
|
+
Object.defineProperty(this, key, {
|
|
50
|
+
value,
|
|
51
|
+
enumerable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get uri() {
|
|
58
|
+
return `homey:${this.constructor.ID}:${this.id}`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
__debug(...props) {
|
|
62
|
+
this.manager.__debug(`[${this.constructor.name}:${this.id}]`, ...props);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
__update(properties) {
|
|
66
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
67
|
+
this[key] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async connect() {
|
|
72
|
+
this.__debug('connect');
|
|
73
|
+
|
|
74
|
+
// If disconnecting, await that first
|
|
75
|
+
try {
|
|
76
|
+
// Ensure all microtasks are done first. E.g. if disconnect is called in the same tick as
|
|
77
|
+
// connect. This way the disconnect is always started first so we can await the disconnect
|
|
78
|
+
// promise before we try to connect again.
|
|
79
|
+
await Promise.resolve();
|
|
80
|
+
await this.__disconnectPromise;
|
|
81
|
+
} catch (err) { }
|
|
82
|
+
|
|
83
|
+
this.__connectPromise = Promise.resolve().then(async () => {
|
|
84
|
+
if (!this.io) {
|
|
85
|
+
this.io = this.homey.subscribe(this.uri, {
|
|
86
|
+
onConnect: () => {
|
|
87
|
+
this.__debug('onConnect');
|
|
88
|
+
this.__connected = true;
|
|
89
|
+
|
|
90
|
+
this.onConnect();
|
|
91
|
+
},
|
|
92
|
+
onDisconnect: () => {
|
|
93
|
+
this.__debug('onDisconnect');
|
|
94
|
+
this.__connected = false;
|
|
95
|
+
|
|
96
|
+
this.onDisconnect();
|
|
97
|
+
},
|
|
98
|
+
onReconnect: () => {
|
|
99
|
+
this.__debug('onDisconnect');
|
|
100
|
+
|
|
101
|
+
this.onReconnect();
|
|
102
|
+
},
|
|
103
|
+
onEvent: (event, data) => {
|
|
104
|
+
this.__debug('onEvent', event, data);
|
|
105
|
+
|
|
106
|
+
this.emit(event, data);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
await this.io;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Delete the connecting Promise
|
|
115
|
+
this.__connectPromise
|
|
116
|
+
.catch(() => { })
|
|
117
|
+
.finally(() => {
|
|
118
|
+
delete this.__connectPromise;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
await this.__connectPromise;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async disconnect() {
|
|
125
|
+
this.__debug('disconnect');
|
|
126
|
+
|
|
127
|
+
// If connecting, await that first
|
|
128
|
+
try {
|
|
129
|
+
await this.__connectPromise;
|
|
130
|
+
} catch (err) { }
|
|
131
|
+
|
|
132
|
+
this.__disconnectPromise = Promise.resolve().then(async () => {
|
|
133
|
+
this.__connected = false;
|
|
134
|
+
|
|
135
|
+
if (this.io) {
|
|
136
|
+
this.io
|
|
137
|
+
.then(io => io.unsubscribe())
|
|
138
|
+
.catch(err => this.__debug('Error Disconnecting:', err));
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Delete the disconnecting Promise
|
|
143
|
+
this.__disconnectPromise
|
|
144
|
+
.catch(() => { })
|
|
145
|
+
.finally(() => {
|
|
146
|
+
delete this.__disconnectPromise;
|
|
147
|
+
// Delete this.io so connect can start new connections.
|
|
148
|
+
delete this.io;
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
await this.__disconnectPromise;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
onConnect() {
|
|
155
|
+
// Overload Me
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
onReconnect() {
|
|
159
|
+
// Overload Me
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
onDisconnect() {
|
|
163
|
+
// Overload Me
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
destroy() {
|
|
167
|
+
// Remove all event listeners
|
|
168
|
+
this.removeAllListeners();
|
|
169
|
+
|
|
170
|
+
// Disconnect from Socket.io
|
|
171
|
+
this.disconnect().catch(() => { });
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
static transform(item) {
|
|
175
|
+
return item;
|
|
176
|
+
}
|
|
6
177
|
|
|
7
178
|
}
|
|
8
179
|
|