@switchbot/homebridge-switchbot 1.15.1-beta.10 → 1.15.1-beta.12
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/device/bot.js +1 -1
- package/dist/device/bot.js.map +1 -1
- package/dist/device/colorbulb.d.ts +1 -1
- package/dist/device/colorbulb.d.ts.map +1 -1
- package/dist/device/colorbulb.js +78 -68
- package/dist/device/colorbulb.js.map +1 -1
- package/dist/device/contact.js +1 -1
- package/dist/device/contact.js.map +1 -1
- package/dist/device/curtain.js +1 -1
- package/dist/device/curtain.js.map +1 -1
- package/dist/device/humidifier.js +1 -1
- package/dist/device/humidifier.js.map +1 -1
- package/dist/device/meter.js +1 -1
- package/dist/device/meter.js.map +1 -1
- package/dist/device/meterplus.js +1 -1
- package/dist/device/meterplus.js.map +1 -1
- package/dist/device/motion.js +1 -1
- package/dist/device/motion.js.map +1 -1
- package/dist/device/plug.js +1 -1
- package/dist/device/plug.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +1 -1
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js +35 -32
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +1 -1
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js +30 -28
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +1 -1
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js +28 -26
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +1 -1
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js +47 -45
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/light.d.ts +1 -1
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js +40 -38
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +1 -1
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js +28 -26
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +1 -1
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js +82 -80
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js +24 -22
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +1 -1
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js +28 -26
- package/dist/irdevice/waterheater.js.map +1 -1
- package/package.json +1 -1
- package/src/device/bot.ts +1 -1
- package/src/device/colorbulb.ts +81 -71
- package/src/device/contact.ts +1 -1
- package/src/device/curtain.ts +1 -1
- package/src/device/humidifier.ts +1 -1
- package/src/device/meter.ts +1 -1
- package/src/device/meterplus.ts +1 -1
- package/src/device/motion.ts +1 -1
- package/src/device/plug.ts +1 -1
- package/src/irdevice/airconditioner.ts +35 -40
- package/src/irdevice/airpurifier.ts +30 -37
- package/src/irdevice/camera.ts +28 -33
- package/src/irdevice/fan.ts +47 -52
- package/src/irdevice/light.ts +40 -45
- package/src/irdevice/other.ts +28 -33
- package/src/irdevice/tv.ts +82 -87
- package/src/irdevice/vacuumcleaner.ts +24 -29
- package/src/irdevice/waterheater.ts +28 -33
|
@@ -158,23 +158,23 @@ export class AirPurifier {
|
|
|
158
158
|
*/
|
|
159
159
|
async pushAirPurifierOnChanges(): Promise<void> {
|
|
160
160
|
if (this.Active !== 1) {
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
parameter: 'default',
|
|
164
|
-
|
|
165
|
-
};
|
|
166
|
-
await this.pushChanges(
|
|
161
|
+
const body = JSON.stringify({
|
|
162
|
+
'command': 'turnOn',
|
|
163
|
+
'parameter': 'default',
|
|
164
|
+
'commandType': 'command',
|
|
165
|
+
});
|
|
166
|
+
await this.pushChanges(body);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
async pushAirPurifierOffChanges(): Promise<void> {
|
|
171
171
|
if (this.Active !== 0) {
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
parameter: 'default',
|
|
175
|
-
|
|
176
|
-
};
|
|
177
|
-
await this.pushChanges(
|
|
172
|
+
const body = JSON.stringify({
|
|
173
|
+
'command': 'turnOff',
|
|
174
|
+
'parameter': 'default',
|
|
175
|
+
'commandType': 'command',
|
|
176
|
+
});
|
|
177
|
+
await this.pushChanges(body);
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
|
|
@@ -195,12 +195,11 @@ export class AirPurifier {
|
|
|
195
195
|
this.CurrentAPFanSpeed = this.CurrentFanSpeed || 1;
|
|
196
196
|
this.APActive = this.Active === 1 ? 'on' : 'off';
|
|
197
197
|
const parameter = `${this.CurrentAPTemp},${this.CurrentAPMode},${this.CurrentAPFanSpeed},${this.APActive}`;
|
|
198
|
-
const
|
|
198
|
+
const body = JSON.stringify({
|
|
199
199
|
'command': 'setAll',
|
|
200
200
|
'parameter': `${parameter}`,
|
|
201
201
|
'commandType': 'command',
|
|
202
202
|
});
|
|
203
|
-
|
|
204
203
|
if (this.Active === 1) {
|
|
205
204
|
if ((this.CurrentTemperature || 24) < (this.LastTemperature || 30)) {
|
|
206
205
|
this.CurrentHeaterCoolerState = this.platform.Characteristic.CurrentHeaterCoolerState.COOLING;
|
|
@@ -210,53 +209,47 @@ export class AirPurifier {
|
|
|
210
209
|
} else {
|
|
211
210
|
this.CurrentHeaterCoolerState = this.platform.Characteristic.CurrentHeaterCoolerState.INACTIVE;
|
|
212
211
|
}
|
|
213
|
-
|
|
214
|
-
await this.pushChanges(payload);
|
|
212
|
+
await this.pushChanges(body);
|
|
215
213
|
}
|
|
216
214
|
|
|
217
|
-
async pushChanges(
|
|
215
|
+
async pushChanges(body): Promise<void> {
|
|
218
216
|
try {
|
|
219
|
-
|
|
220
|
-
`Air Purifier: ${this.accessory.displayName} Sending request to SwitchBot API. command: ${payload.command},` +
|
|
221
|
-
` parameter: ${payload.parameter}, commandType: ${payload.commandType}`,
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
// Make the API request
|
|
217
|
+
// Make Push On request to the API
|
|
225
218
|
const t = Date.now();
|
|
226
219
|
const nonce = 'requestID';
|
|
227
220
|
const data = this.platform.config.credentials?.token + t + nonce;
|
|
228
|
-
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
221
|
+
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
222
|
+
.update(Buffer.from(data, 'utf-8'))
|
|
223
|
+
.digest();
|
|
229
224
|
const sign = signTerm.toString('base64');
|
|
230
225
|
this.debugLog(`Air Purifier: ${this.accessory.displayName} sign: ${sign}`);
|
|
226
|
+
this.infoLog(`Air Purifier: ${this.accessory.displayName} Sending request to SwitchBot API. body: ${body},`);
|
|
231
227
|
const options = {
|
|
232
228
|
hostname: HostDomain,
|
|
233
229
|
port: 443,
|
|
234
230
|
path: `${DevicePath}/${this.device.deviceId}/commands`,
|
|
235
231
|
method: 'POST',
|
|
236
232
|
headers: {
|
|
237
|
-
Authorization: this.platform.config.credentials?.token,
|
|
238
|
-
sign: sign,
|
|
239
|
-
nonce: nonce,
|
|
240
|
-
t: t,
|
|
233
|
+
'Authorization': this.platform.config.credentials?.token,
|
|
234
|
+
'sign': sign,
|
|
235
|
+
'nonce': nonce,
|
|
236
|
+
't': t,
|
|
241
237
|
'Content-Type': 'application/json',
|
|
238
|
+
'Content-Length': body.length,
|
|
242
239
|
},
|
|
243
240
|
};
|
|
244
|
-
|
|
245
|
-
const req = https.request(options, (res) => {
|
|
241
|
+
const req = https.request(options, res => {
|
|
246
242
|
this.debugLog(`Air Purifier: ${this.accessory.displayName} statusCode: ${res.statusCode}`);
|
|
247
243
|
this.statusCode({ res });
|
|
248
|
-
res.on('data',
|
|
244
|
+
res.on('data', d => {
|
|
249
245
|
this.debugLog(`Air Purifier: ${this.accessory.displayName} d: ${d}`);
|
|
250
246
|
});
|
|
251
247
|
});
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
this.errorLog(`Air Purifier: ${this.accessory.displayName} error: ${error}`);
|
|
248
|
+
req.on('error', (e: any) => {
|
|
249
|
+
this.errorLog(`Air Purifier: ${this.accessory.displayName} error message: ${e.message}`);
|
|
255
250
|
});
|
|
256
|
-
|
|
257
|
-
req.write(payload);
|
|
251
|
+
req.write(body);
|
|
258
252
|
req.end();
|
|
259
|
-
|
|
260
253
|
this.debugLog(`Air Purifier: ${this.accessory.displayName} pushchanges: ${JSON.stringify(req)}`);
|
|
261
254
|
this.updateHomeKitCharacteristics();
|
|
262
255
|
this.CurrentTemperatureCached = this.CurrentTemperature;
|
package/src/irdevice/camera.ts
CHANGED
|
@@ -86,69 +86,64 @@ export class Camera {
|
|
|
86
86
|
*/
|
|
87
87
|
async pushOnChanges(): Promise<void> {
|
|
88
88
|
if (this.On) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
parameter: 'default',
|
|
92
|
-
|
|
93
|
-
};
|
|
94
|
-
await this.pushChanges(
|
|
89
|
+
const body = JSON.stringify({
|
|
90
|
+
'command': 'turnOn',
|
|
91
|
+
'parameter': 'default',
|
|
92
|
+
'commandType': 'command',
|
|
93
|
+
});
|
|
94
|
+
await this.pushChanges(body);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
async pushOffChanges(): Promise<void> {
|
|
99
99
|
if (!this.On) {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
parameter: 'default',
|
|
103
|
-
|
|
104
|
-
};
|
|
105
|
-
await this.pushChanges(
|
|
100
|
+
const body = JSON.stringify({
|
|
101
|
+
'command': 'turnOff',
|
|
102
|
+
'parameter': 'default',
|
|
103
|
+
'commandType': 'command',
|
|
104
|
+
});
|
|
105
|
+
await this.pushChanges(body);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
async pushChanges(
|
|
109
|
+
async pushChanges(body): Promise<void> {
|
|
110
110
|
try {
|
|
111
|
-
|
|
112
|
-
`Camera: ${this.accessory.displayName} Sending request to SwitchBot API. command: ${payload.command},` +
|
|
113
|
-
` parameter: ${payload.parameter}, commandType: ${payload.commandType}`,
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
// Make the API request
|
|
111
|
+
// Make Push On request to the API
|
|
117
112
|
const t = Date.now();
|
|
118
113
|
const nonce = 'requestID';
|
|
119
114
|
const data = this.platform.config.credentials?.token + t + nonce;
|
|
120
|
-
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
115
|
+
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
116
|
+
.update(Buffer.from(data, 'utf-8'))
|
|
117
|
+
.digest();
|
|
121
118
|
const sign = signTerm.toString('base64');
|
|
122
119
|
this.debugLog(`Camera: ${this.accessory.displayName} sign: ${sign}`);
|
|
120
|
+
this.infoLog(`Camera: ${this.accessory.displayName} Sending request to SwitchBot API. body: ${body},`);
|
|
123
121
|
const options = {
|
|
124
122
|
hostname: HostDomain,
|
|
125
123
|
port: 443,
|
|
126
124
|
path: `${DevicePath}/${this.device.deviceId}/commands`,
|
|
127
125
|
method: 'POST',
|
|
128
126
|
headers: {
|
|
129
|
-
Authorization: this.platform.config.credentials?.token,
|
|
130
|
-
sign: sign,
|
|
131
|
-
nonce: nonce,
|
|
132
|
-
t: t,
|
|
127
|
+
'Authorization': this.platform.config.credentials?.token,
|
|
128
|
+
'sign': sign,
|
|
129
|
+
'nonce': nonce,
|
|
130
|
+
't': t,
|
|
133
131
|
'Content-Type': 'application/json',
|
|
132
|
+
'Content-Length': body.length,
|
|
134
133
|
},
|
|
135
134
|
};
|
|
136
|
-
|
|
137
|
-
const req = https.request(options, (res) => {
|
|
135
|
+
const req = https.request(options, res => {
|
|
138
136
|
this.debugLog(`Camera: ${this.accessory.displayName} statusCode: ${res.statusCode}`);
|
|
139
137
|
this.statusCode({ res });
|
|
140
|
-
res.on('data',
|
|
138
|
+
res.on('data', d => {
|
|
141
139
|
this.debugLog(`Camera: ${this.accessory.displayName} d: ${d}`);
|
|
142
140
|
});
|
|
143
141
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.errorLog(`Camera: ${this.accessory.displayName} error: ${error}`);
|
|
142
|
+
req.on('error', (e: any) => {
|
|
143
|
+
this.errorLog(`Camera: ${this.accessory.displayName} error message: ${e.message}`);
|
|
147
144
|
});
|
|
148
|
-
|
|
149
|
-
req.write(payload);
|
|
145
|
+
req.write(body);
|
|
150
146
|
req.end();
|
|
151
|
-
|
|
152
147
|
this.debugLog(`Camera: ${this.accessory.displayName} pushchanges: ${JSON.stringify(req)}`);
|
|
153
148
|
this.updateHomeKitCharacteristics();
|
|
154
149
|
this.OnCached = this.On;
|
package/src/irdevice/fan.ts
CHANGED
|
@@ -188,94 +188,89 @@ export class Fan {
|
|
|
188
188
|
*/
|
|
189
189
|
async pushFanOnChanges(): Promise<void> {
|
|
190
190
|
if (this.Active !== 1) {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
parameter: 'default',
|
|
194
|
-
|
|
195
|
-
};
|
|
196
|
-
await this.pushTVChanges(
|
|
191
|
+
const body = JSON.stringify({
|
|
192
|
+
'command': 'turnOn',
|
|
193
|
+
'parameter': 'default',
|
|
194
|
+
'commandType': 'command',
|
|
195
|
+
});
|
|
196
|
+
await this.pushTVChanges(body);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
async pushFanOffChanges(): Promise<void> {
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
parameter: 'default',
|
|
204
|
-
|
|
205
|
-
};
|
|
206
|
-
await this.pushTVChanges(
|
|
201
|
+
const body = JSON.stringify({
|
|
202
|
+
'command': 'turnOff',
|
|
203
|
+
'parameter': 'default',
|
|
204
|
+
'commandType': 'command',
|
|
205
|
+
});
|
|
206
|
+
await this.pushTVChanges(body);
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
async pushFanSpeedUpChanges(): Promise<void> {
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
parameter: 'default',
|
|
213
|
-
|
|
214
|
-
};
|
|
215
|
-
await this.pushTVChanges(
|
|
210
|
+
const body = JSON.stringify({
|
|
211
|
+
'command': 'highSpeed',
|
|
212
|
+
'parameter': 'default',
|
|
213
|
+
'commandType': 'command',
|
|
214
|
+
});
|
|
215
|
+
await this.pushTVChanges(body);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
async pushFanSpeedDownChanges(): Promise<void> {
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
parameter: 'default',
|
|
222
|
-
|
|
223
|
-
};
|
|
224
|
-
await this.pushTVChanges(
|
|
219
|
+
const body = JSON.stringify({
|
|
220
|
+
'command': 'lowSpeed',
|
|
221
|
+
'parameter': 'default',
|
|
222
|
+
'commandType': 'command',
|
|
223
|
+
});
|
|
224
|
+
await this.pushTVChanges(body);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
async pushFanSwingChanges(): Promise<void> {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
parameter: 'default',
|
|
231
|
-
|
|
232
|
-
};
|
|
233
|
-
await this.pushTVChanges(
|
|
228
|
+
const body = JSON.stringify({
|
|
229
|
+
'command': 'swing',
|
|
230
|
+
'parameter': 'default',
|
|
231
|
+
'commandType': 'command',
|
|
232
|
+
});
|
|
233
|
+
await this.pushTVChanges(body);
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
async pushTVChanges(
|
|
236
|
+
async pushTVChanges(body): Promise<void> {
|
|
237
237
|
try {
|
|
238
|
-
|
|
239
|
-
`Fan: ${this.accessory.displayName} Sending request to SwitchBot API. command: ${payload.command},` +
|
|
240
|
-
` parameter: ${payload.parameter}, commandType: ${payload.commandType}`,
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
// Make the API request
|
|
238
|
+
// Make Push On request to the API
|
|
244
239
|
const t = Date.now();
|
|
245
240
|
const nonce = 'requestID';
|
|
246
241
|
const data = this.platform.config.credentials?.token + t + nonce;
|
|
247
|
-
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
242
|
+
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
243
|
+
.update(Buffer.from(data, 'utf-8'))
|
|
244
|
+
.digest();
|
|
248
245
|
const sign = signTerm.toString('base64');
|
|
249
246
|
this.debugLog(`Fan: ${this.accessory.displayName} sign: ${sign}`);
|
|
247
|
+
this.infoLog(`Fan: ${this.accessory.displayName} Sending request to SwitchBot API. body: ${body},`);
|
|
250
248
|
const options = {
|
|
251
249
|
hostname: HostDomain,
|
|
252
250
|
port: 443,
|
|
253
251
|
path: `${DevicePath}/${this.device.deviceId}/commands`,
|
|
254
252
|
method: 'POST',
|
|
255
253
|
headers: {
|
|
256
|
-
Authorization: this.platform.config.credentials?.token,
|
|
257
|
-
sign: sign,
|
|
258
|
-
nonce: nonce,
|
|
259
|
-
t: t,
|
|
254
|
+
'Authorization': this.platform.config.credentials?.token,
|
|
255
|
+
'sign': sign,
|
|
256
|
+
'nonce': nonce,
|
|
257
|
+
't': t,
|
|
260
258
|
'Content-Type': 'application/json',
|
|
259
|
+
'Content-Length': body.length,
|
|
261
260
|
},
|
|
262
261
|
};
|
|
263
|
-
|
|
264
|
-
const req = https.request(options, (res) => {
|
|
262
|
+
const req = https.request(options, res => {
|
|
265
263
|
this.debugLog(`Fan: ${this.accessory.displayName} statusCode: ${res.statusCode}`);
|
|
266
264
|
this.statusCode({ res });
|
|
267
|
-
res.on('data',
|
|
268
|
-
this.debugLog(`
|
|
265
|
+
res.on('data', d => {
|
|
266
|
+
this.debugLog(`Fan: ${this.accessory.displayName} d: ${d}`);
|
|
269
267
|
});
|
|
270
268
|
});
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
this.errorLog(`Fan: ${this.accessory.displayName} error: ${error}`);
|
|
269
|
+
req.on('error', (e: any) => {
|
|
270
|
+
this.errorLog(`Fan: ${this.accessory.displayName} error message: ${e.message}`);
|
|
274
271
|
});
|
|
275
|
-
|
|
276
|
-
req.write(payload);
|
|
272
|
+
req.write(body);
|
|
277
273
|
req.end();
|
|
278
|
-
|
|
279
274
|
this.debugLog(`Fan: ${this.accessory.displayName} pushchanges: ${JSON.stringify(req)}`);
|
|
280
275
|
this.updateHomeKitCharacteristics();
|
|
281
276
|
} catch (e: any) {
|
package/src/irdevice/light.ts
CHANGED
|
@@ -101,87 +101,82 @@ export class Light {
|
|
|
101
101
|
*/
|
|
102
102
|
async pushLightOnChanges(): Promise<void> {
|
|
103
103
|
if (this.On) {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
parameter: 'default',
|
|
107
|
-
|
|
108
|
-
};
|
|
109
|
-
await this.pushChanges(
|
|
104
|
+
const body = JSON.stringify({
|
|
105
|
+
'command': 'turnOn',
|
|
106
|
+
'parameter': 'default',
|
|
107
|
+
'commandType': 'command',
|
|
108
|
+
});
|
|
109
|
+
await this.pushChanges(body);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
async pushLightOffChanges(): Promise<void> {
|
|
114
114
|
if (!this.On) {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
parameter: 'default',
|
|
118
|
-
|
|
119
|
-
};
|
|
120
|
-
await this.pushChanges(
|
|
115
|
+
const body = JSON.stringify({
|
|
116
|
+
'command': 'turnOff',
|
|
117
|
+
'parameter': 'default',
|
|
118
|
+
'commandType': 'command',
|
|
119
|
+
});
|
|
120
|
+
await this.pushChanges(body);
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
async pushLightBrightnessUpChanges(): Promise<void> {
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
parameter: 'default',
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
await this.pushChanges(
|
|
125
|
+
const body = JSON.stringify({
|
|
126
|
+
'command': 'brightnessUp',
|
|
127
|
+
'parameter': 'default',
|
|
128
|
+
'commandType': 'command',
|
|
129
|
+
});
|
|
130
|
+
await this.pushChanges(body);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
async pushLightBrightnessDownChanges(): Promise<void> {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
parameter: 'default',
|
|
137
|
-
|
|
138
|
-
};
|
|
139
|
-
await this.pushChanges(
|
|
134
|
+
const body = JSON.stringify({
|
|
135
|
+
'command': 'brightnessDown',
|
|
136
|
+
'parameter': 'default',
|
|
137
|
+
'commandType': 'command',
|
|
138
|
+
});
|
|
139
|
+
await this.pushChanges(body);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
async pushChanges(
|
|
142
|
+
async pushChanges(body): Promise<void> {
|
|
143
143
|
try {
|
|
144
|
-
|
|
145
|
-
`Light: ${this.accessory.displayName} Sending request to SwitchBot API. command: ${payload.command},` +
|
|
146
|
-
` parameter: ${payload.parameter}, commandType: ${payload.commandType}`,
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
// Make the API request
|
|
144
|
+
// Make Push On request to the API
|
|
150
145
|
const t = Date.now();
|
|
151
146
|
const nonce = 'requestID';
|
|
152
147
|
const data = this.platform.config.credentials?.token + t + nonce;
|
|
153
|
-
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
148
|
+
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
149
|
+
.update(Buffer.from(data, 'utf-8'))
|
|
150
|
+
.digest();
|
|
154
151
|
const sign = signTerm.toString('base64');
|
|
155
152
|
this.debugLog(`Light: ${this.accessory.displayName} sign: ${sign}`);
|
|
153
|
+
this.infoLog(`Light: ${this.accessory.displayName} Sending request to SwitchBot API. body: ${body},`);
|
|
156
154
|
const options = {
|
|
157
155
|
hostname: HostDomain,
|
|
158
156
|
port: 443,
|
|
159
157
|
path: `${DevicePath}/${this.device.deviceId}/commands`,
|
|
160
158
|
method: 'POST',
|
|
161
159
|
headers: {
|
|
162
|
-
Authorization: this.platform.config.credentials?.token,
|
|
163
|
-
sign: sign,
|
|
164
|
-
nonce: nonce,
|
|
165
|
-
t: t,
|
|
160
|
+
'Authorization': this.platform.config.credentials?.token,
|
|
161
|
+
'sign': sign,
|
|
162
|
+
'nonce': nonce,
|
|
163
|
+
't': t,
|
|
166
164
|
'Content-Type': 'application/json',
|
|
165
|
+
'Content-Length': body.length,
|
|
167
166
|
},
|
|
168
167
|
};
|
|
169
|
-
|
|
170
|
-
const req = https.request(options, (res) => {
|
|
168
|
+
const req = https.request(options, res => {
|
|
171
169
|
this.debugLog(`Light: ${this.accessory.displayName} statusCode: ${res.statusCode}`);
|
|
172
170
|
this.statusCode({ res });
|
|
173
|
-
res.on('data',
|
|
171
|
+
res.on('data', d => {
|
|
174
172
|
this.debugLog(`Light: ${this.accessory.displayName} d: ${d}`);
|
|
175
173
|
});
|
|
176
174
|
});
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
this.errorLog(`Light: ${this.accessory.displayName} error: ${error}`);
|
|
175
|
+
req.on('error', (e: any) => {
|
|
176
|
+
this.errorLog(`Light: ${this.accessory.displayName} error message: ${e.message}`);
|
|
180
177
|
});
|
|
181
|
-
|
|
182
|
-
req.write(payload);
|
|
178
|
+
req.write(body);
|
|
183
179
|
req.end();
|
|
184
|
-
|
|
185
180
|
this.debugLog(`Light: ${this.accessory.displayName} pushchanges: ${JSON.stringify(req)}`);
|
|
186
181
|
this.OnCached = this.On;
|
|
187
182
|
this.accessory.context.On = this.OnCached;
|
package/src/irdevice/other.ts
CHANGED
|
@@ -99,12 +99,12 @@ export class Others {
|
|
|
99
99
|
if (this.device.other) {
|
|
100
100
|
if (this.device.other.commandOn) {
|
|
101
101
|
if (!this.Active) {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
parameter: 'default',
|
|
105
|
-
|
|
106
|
-
};
|
|
107
|
-
await this.pushChanges(
|
|
102
|
+
const body = JSON.stringify({
|
|
103
|
+
'command': `${this.device.other.commandOn}`,
|
|
104
|
+
'parameter': 'default',
|
|
105
|
+
'commandType': 'customize',
|
|
106
|
+
});
|
|
107
|
+
await this.pushChanges(body);
|
|
108
108
|
}
|
|
109
109
|
} else {
|
|
110
110
|
this.errorLog(`Other: ${this.accessory.displayName} On Command not set, commandOn: ${this.device.other.commandOn}`);
|
|
@@ -122,12 +122,12 @@ export class Others {
|
|
|
122
122
|
if (this.device.other) {
|
|
123
123
|
if (this.device.other.commandOff) {
|
|
124
124
|
if (this.Active) {
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
parameter: 'default',
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
await this.pushChanges(
|
|
125
|
+
const body = JSON.stringify({
|
|
126
|
+
'command': `${this.device.other.commandOff}`,
|
|
127
|
+
'parameter': 'default',
|
|
128
|
+
'commandType': 'customize',
|
|
129
|
+
});
|
|
130
|
+
await this.pushChanges(body);
|
|
131
131
|
}
|
|
132
132
|
} else {
|
|
133
133
|
this.errorLog(`Other: ${this.accessory.displayName} Off Command not set, commandOff: ${this.device.other.commandOff}`);
|
|
@@ -140,49 +140,44 @@ export class Others {
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
async pushChanges(
|
|
143
|
+
async pushChanges(body): Promise<void> {
|
|
144
144
|
try {
|
|
145
|
-
|
|
146
|
-
`Other: ${this.accessory.displayName} Sending request to SwitchBot API. command: ${payload.command},` +
|
|
147
|
-
` parameter: ${payload.parameter}, commandType: ${payload.commandType}`,
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
// Make the API request
|
|
145
|
+
// Make Push On request to the API
|
|
151
146
|
const t = Date.now();
|
|
152
147
|
const nonce = 'requestID';
|
|
153
148
|
const data = this.platform.config.credentials?.token + t + nonce;
|
|
154
|
-
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
149
|
+
const signTerm = crypto.createHmac('sha256', this.platform.config.credentials?.secret)
|
|
150
|
+
.update(Buffer.from(data, 'utf-8'))
|
|
151
|
+
.digest();
|
|
155
152
|
const sign = signTerm.toString('base64');
|
|
156
153
|
this.debugLog(`Other: ${this.accessory.displayName} sign: ${sign}`);
|
|
154
|
+
this.infoLog(`Other: ${this.accessory.displayName} Sending request to SwitchBot API. body: ${body},`);
|
|
157
155
|
const options = {
|
|
158
156
|
hostname: HostDomain,
|
|
159
157
|
port: 443,
|
|
160
158
|
path: `${DevicePath}/${this.device.deviceId}/commands`,
|
|
161
159
|
method: 'POST',
|
|
162
160
|
headers: {
|
|
163
|
-
Authorization: this.platform.config.credentials?.token,
|
|
164
|
-
sign: sign,
|
|
165
|
-
nonce: nonce,
|
|
166
|
-
t: t,
|
|
161
|
+
'Authorization': this.platform.config.credentials?.token,
|
|
162
|
+
'sign': sign,
|
|
163
|
+
'nonce': nonce,
|
|
164
|
+
't': t,
|
|
167
165
|
'Content-Type': 'application/json',
|
|
166
|
+
'Content-Length': body.length,
|
|
168
167
|
},
|
|
169
168
|
};
|
|
170
|
-
|
|
171
|
-
const req = https.request(options, (res) => {
|
|
169
|
+
const req = https.request(options, res => {
|
|
172
170
|
this.debugLog(`Other: ${this.accessory.displayName} statusCode: ${res.statusCode}`);
|
|
173
171
|
this.statusCode({ res });
|
|
174
|
-
res.on('data',
|
|
172
|
+
res.on('data', d => {
|
|
175
173
|
this.debugLog(`Other: ${this.accessory.displayName} d: ${d}`);
|
|
176
174
|
});
|
|
177
175
|
});
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.errorLog(`Other: ${this.accessory.displayName} error: ${error}`);
|
|
176
|
+
req.on('error', (e: any) => {
|
|
177
|
+
this.errorLog(`Other: ${this.accessory.displayName} error message: ${e.message}`);
|
|
181
178
|
});
|
|
182
|
-
|
|
183
|
-
req.write(payload);
|
|
179
|
+
req.write(body);
|
|
184
180
|
req.end();
|
|
185
|
-
|
|
186
181
|
this.debugLog(`Other: ${this.accessory.displayName} pushchanges: ${JSON.stringify(req)}`);
|
|
187
182
|
this.updateHomeKitCharacteristics();
|
|
188
183
|
} catch (e: any) {
|