@beenoco/homebridge-samsung-ac 0.1.0-beta.1

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.
@@ -0,0 +1,45 @@
1
+ /// <reference types="node" />
2
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
3
+ import { BeenocoSamsungACPlatform } from './platform';
4
+ import https = require('node:https');
5
+ /**
6
+ * Platform Accessory
7
+ * An instance of this class is created for each accessory your platform registers.
8
+ * Each accessory may expose multiple services of different service types.
9
+ */
10
+ export declare class BeenocoSamsungACPlatformAccessory {
11
+ private readonly platform;
12
+ private readonly accessory;
13
+ private service;
14
+ private fanService;
15
+ private tlsCA;
16
+ private tlsCert;
17
+ private tlsKey;
18
+ constructor(platform: BeenocoSamsungACPlatform, accessory: PlatformAccessory);
19
+ options(method: string, resource: string, contentLength: number): https.RequestOptions;
20
+ /**
21
+ * Send a request to the device
22
+ * @param method the HTTP method to use for the request
23
+ * @param resource the resource to be appended to the device URI
24
+ * @param json the JSON to send in the body of the request, may be empty
25
+ * @returns a promise resolving to the JSON result, may be empty
26
+ */
27
+ request(method: string, resource?: string, json?: {}): Promise<any>;
28
+ getDeviceJson(): Promise<any>;
29
+ handleTargetTemperatureGet(): Promise<CharacteristicValue>;
30
+ handleCurrentHeatingCoolingStateGet(): Promise<CharacteristicValue>;
31
+ handleTargetHeatingCoolingStateGet(): Promise<CharacteristicValue>;
32
+ handleTargetHeatingCoolingStateSet(value: CharacteristicValue): Promise<void>;
33
+ handleCurrentTemperatureGet(): Promise<CharacteristicValue>;
34
+ handleTargetTemperatureSet(value: CharacteristicValue): Promise<void>;
35
+ handleTemperatureDisplayUnitsGet(): Promise<CharacteristicValue>;
36
+ handleTemperatureDisplayUnitsSet(value: CharacteristicValue): Promise<void>;
37
+ fanActiveGet(): Promise<CharacteristicValue>;
38
+ fanSpeedGet(): Promise<CharacteristicValue>;
39
+ fanSpeedSet(value: CharacteristicValue): Promise<void>;
40
+ getCurrentState(jsonDevice: any): CharacteristicValue;
41
+ getTargetState(jsonDevice: any): CharacteristicValue;
42
+ getUnit(jsonTemperature: any): 0 | 1;
43
+ getFanRotationSpeed(jsonDevice: any): CharacteristicValue;
44
+ }
45
+ //# sourceMappingURL=platformAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.d.ts","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,KAAK,GAAG,QAAQ,YAAY,CAAC,CAAC;AAErC;;;;GAIG;AACH,qBAAa,iCAAiC;IAQ1C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAGJ,QAAQ,EAAE,wBAAwB,EAClC,SAAS,EAAE,iBAAiB;IA6E/C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAI,KAAK,CAAC,cAAc;IAsBvF;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAG,EAAE,IAAI,KAAG,GAAI,OAAO,CAAC,GAAG,CAAC;IAsCtD,aAAa,IAAK,OAAO,CAAC,GAAG,CAAC;IA2B9B,0BAA0B,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAa3D,mCAAmC,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAapE,kCAAkC,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAanE,kCAAkC,CAAC,KAAK,EAAE,mBAAmB;IAwB7D,2BAA2B,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAc5D,0BAA0B,CAAC,KAAK,EAAE,mBAAmB;IASrD,gCAAgC,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAajE,gCAAgC,CAAC,KAAK,EAAE,mBAAmB;IAe3D,YAAY,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAmB7C,WAAW,IAAK,OAAO,CAAC,mBAAmB,CAAC;IAe5C,WAAW,CAAC,KAAK,EAAE,mBAAmB;IA0C5C,eAAe,CAAC,UAAU,KAAA,GAAI,mBAAmB;IAcjD,cAAc,CAAC,UAAU,KAAA,GAAI,mBAAmB;IAYhD,OAAO,CAAC,eAAe,KAAA;IAMvB,mBAAmB,CAAC,UAAU,KAAA,GAAI,mBAAmB;CActD"}
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BeenocoSamsungACPlatformAccessory = void 0;
4
+ const fs = require("node:fs");
5
+ const https = require("node:https");
6
+ /**
7
+ * Platform Accessory
8
+ * An instance of this class is created for each accessory your platform registers.
9
+ * Each accessory may expose multiple services of different service types.
10
+ */
11
+ class BeenocoSamsungACPlatformAccessory {
12
+ constructor(platform, accessory) {
13
+ this.platform = platform;
14
+ this.accessory = accessory;
15
+ // set accessory information
16
+ this.accessory.getService(this.platform.Service.AccessoryInformation)
17
+ .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Samsung')
18
+ .setCharacteristic(this.platform.Characteristic.Model, this.platform.config.deviceModel)
19
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, this.platform.config.deviceMACAddress);
20
+ // get the Thermostat service if it exists, otherwise create a new Thermostat service
21
+ // you can create multiple services for each accessory
22
+ this.service = this.accessory.getService(this.platform.Service.Thermostat) ||
23
+ this.accessory.addService(this.platform.Service.Thermostat);
24
+ // set the service name, this is what is displayed as the default name on the Home app
25
+ // in this example we are using the name we stored in the `accessory.context` in the `discoverDevices` method.
26
+ this.service.setCharacteristic(this.platform.Characteristic.Name, this.platform.config.name || 'Air Conditioner');
27
+ // this.service.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState)
28
+ // .onGet(this.handleCurrentHeatingCoolingStateGet.bind(this));
29
+ this.service.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState)
30
+ .onGet(this.handleTargetHeatingCoolingStateGet.bind(this))
31
+ .onSet(this.handleTargetHeatingCoolingStateSet.bind(this));
32
+ this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
33
+ .onGet(this.handleCurrentTemperatureGet.bind(this));
34
+ this.service.getCharacteristic(this.platform.Characteristic.TargetTemperature)
35
+ .onGet(this.handleTargetTemperatureGet.bind(this))
36
+ .onSet(this.handleTargetTemperatureSet.bind(this));
37
+ this.service.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
38
+ .onGet(this.handleTemperatureDisplayUnitsGet.bind(this))
39
+ .onSet(this.handleTemperatureDisplayUnitsSet.bind(this));
40
+ // get the fan service if
41
+ this.fanService = this.accessory.getService(this.platform.Service.Fan) ||
42
+ this.accessory.addService(this.platform.Service.Fan);
43
+ this.fanService.setCharacteristic(this.platform.Characteristic.Name, 'Air Conditioner Fan');
44
+ this.fanService.getCharacteristic(this.platform.Characteristic.Active)
45
+ .onGet(this.fanActiveGet.bind(this));
46
+ this.fanService.getCharacteristic(this.platform.Characteristic.RotationSpeed)
47
+ .onGet(this.fanSpeedGet.bind(this))
48
+ .onSet(this.fanSpeedSet.bind(this));
49
+ const tlsDir = __dirname + '/../tls';
50
+ this.tlsCA = fs.readFileSync(tlsDir + '/ca.pem');
51
+ this.tlsCert = fs.readFileSync(tlsDir + '/cert.pem');
52
+ this.tlsKey = fs.readFileSync(tlsDir + '/key.pem');
53
+ // setInterval(async () => {
54
+ // try {
55
+ // const json = await this.request('GET');
56
+ // this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState,
57
+ // this.getCurrentState(json.Device));
58
+ // this.service.updateCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState,
59
+ // this.getTargetState(json.Device));
60
+ // this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature,
61
+ // json.Device.Temperatures[0].current);
62
+ // this.service.updateCharacteristic(this.platform.Characteristic.TargetTemperature,
63
+ // json.Device.Temperatures[0].desired);
64
+ // this.service.updateCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits,
65
+ // this.getUnit(json.Device.Temperatures[0]));
66
+ // } catch(e) {
67
+ // if (e instanceof Error) {
68
+ // this.platform.log.error('Error from periodic update.', e.message);
69
+ // }
70
+ // }
71
+ // }, this.platform.config.devicePollInterval * 1000);
72
+ }
73
+ options(method, resource, contentLength) {
74
+ return {
75
+ hostname: this.platform.config.deviceIPAddress,
76
+ port: 8888,
77
+ path: '/devices/' + this.accessory.context.device.id + resource,
78
+ method: method,
79
+ rejectUnauthorized: false,
80
+ secureProtocol: 'TLSv1_method',
81
+ agent: new https.Agent({
82
+ ca: this.tlsCA,
83
+ cert: this.tlsCert,
84
+ key: this.tlsKey,
85
+ ciphers: 'DEFAULT:@SECLEVEL=0',
86
+ }),
87
+ headers: {
88
+ 'Content-Type': 'application/json',
89
+ 'Content-Length': contentLength,
90
+ 'Authorization': 'Bearer ' + this.platform.config.deviceToken,
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Send a request to the device
96
+ * @param method the HTTP method to use for the request
97
+ * @param resource the resource to be appended to the device URI
98
+ * @param json the JSON to send in the body of the request, may be empty
99
+ * @returns a promise resolving to the JSON result, may be empty
100
+ */
101
+ request(method, resource = '', json = {}) {
102
+ let content = '';
103
+ if (Object.keys(json).length) {
104
+ content = JSON.stringify(json);
105
+ }
106
+ return new Promise((resolve, reject) => {
107
+ const request = https.request(this.options(method, resource, content.length), (response) => {
108
+ response.setEncoding('utf8');
109
+ if (response.statusCode && (response.statusCode < 200 || response.statusCode > 299)) {
110
+ reject(new Error('Request error status code: ' + response.statusCode));
111
+ }
112
+ let rawData = '';
113
+ response.on('data', (chunk) => {
114
+ rawData += chunk;
115
+ });
116
+ response.on('end', () => {
117
+ try {
118
+ this.platform.log.debug('Received:', rawData);
119
+ resolve(rawData.length > 0 ? JSON.parse(rawData) : {});
120
+ }
121
+ catch (e) {
122
+ reject(new Error('Error processing raw data: ' + rawData));
123
+ }
124
+ });
125
+ });
126
+ // try {
127
+ if (content.length > 0) {
128
+ this.platform.log.debug('Sending:', content);
129
+ request.write(content);
130
+ }
131
+ request.on('error', e => {
132
+ // this.platform.log.error('Error', e);
133
+ reject(e);
134
+ });
135
+ request.end();
136
+ });
137
+ }
138
+ async getDeviceJson() {
139
+ try {
140
+ const json = await this.request('GET');
141
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState, this.getCurrentState(json.Device));
142
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState, this.getTargetState(json.Device));
143
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, json.Device.Temperatures[0].current);
144
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetTemperature, json.Device.Temperatures[0].desired);
145
+ this.service.updateCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits, this.getUnit(json.Device.Temperatures[0]));
146
+ this.fanService.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getFanRotationSpeed(json.Device));
147
+ return json;
148
+ }
149
+ catch (e) {
150
+ if (e instanceof Error) {
151
+ this.platform.log.error('Error from periodic update.', e.message);
152
+ }
153
+ }
154
+ }
155
+ async handleTargetTemperatureGet() {
156
+ try {
157
+ const json = await this.request('GET', '/temperatures/0');
158
+ return json.Temperature.desired;
159
+ }
160
+ catch (e) {
161
+ if (e instanceof Error) {
162
+ this.platform.log.error('Get target temperature failed.', e.message);
163
+ }
164
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
165
+ }
166
+ }
167
+ async handleCurrentHeatingCoolingStateGet() {
168
+ try {
169
+ const json = await this.request('GET');
170
+ return this.getCurrentState(json.Device);
171
+ }
172
+ catch (e) {
173
+ if (e instanceof Error) {
174
+ this.platform.log.error('Get current heating/cooling state failed.', e.message);
175
+ }
176
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
177
+ }
178
+ }
179
+ async handleTargetHeatingCoolingStateGet() {
180
+ try {
181
+ const json = await this.request('GET');
182
+ return this.getTargetState(json.Device);
183
+ }
184
+ catch (e) {
185
+ if (e instanceof Error) {
186
+ this.platform.log.error('Get target heating/cooling state failed.', e.message);
187
+ }
188
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
189
+ }
190
+ }
191
+ async handleTargetHeatingCoolingStateSet(value) {
192
+ try {
193
+ if (value === this.platform.Characteristic.TargetHeatingCoolingState.OFF) {
194
+ await this.request('PUT', '/operation', { 'Operation': { 'power': 'Off' } })
195
+ .catch((reason) => this.platform.log.error('reason:', reason));
196
+ }
197
+ else {
198
+ let mode = 'Opmode_Auto';
199
+ if (value === this.platform.Characteristic.TargetHeatingCoolingState.COOL) {
200
+ mode = 'Opmode_Cool';
201
+ }
202
+ else if (value === this.platform.Characteristic.TargetHeatingCoolingState.HEAT) {
203
+ mode = 'Opmode_Heat';
204
+ }
205
+ await this.request('PUT', '/operation', { 'Operation': { 'power': 'On' } });
206
+ await this.request('PUT', '/mode', { 'Mode': { 'modes': [mode] } });
207
+ }
208
+ }
209
+ catch (e) {
210
+ if (e instanceof Error) {
211
+ this.platform.log.error('Set target heating/cooling state failed.', e.message);
212
+ }
213
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
214
+ }
215
+ }
216
+ async handleCurrentTemperatureGet() {
217
+ try {
218
+ const json = await this.request('GET', '/temperatures/0');
219
+ // this.exampleStates.CurrentTemperature = json.Temperature.current;
220
+ return json.Temperature.current;
221
+ }
222
+ catch (e) {
223
+ if (e instanceof Error) {
224
+ this.platform.log.error('Get current temperature failed.', e.message);
225
+ }
226
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
227
+ }
228
+ }
229
+ async handleTargetTemperatureSet(value) {
230
+ try {
231
+ await this.request('PUT', '/temperatures/0', { 'Temperature': { 'desired': value } });
232
+ }
233
+ catch (_a) {
234
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
235
+ }
236
+ }
237
+ async handleTemperatureDisplayUnitsGet() {
238
+ try {
239
+ const json = await this.request('GET', '/temperatures/0');
240
+ return this.getUnit(json.Temperature);
241
+ }
242
+ catch (e) {
243
+ if (e instanceof Error) {
244
+ this.platform.log.error('Get temperature units failed.', e.message);
245
+ }
246
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
247
+ }
248
+ }
249
+ async handleTemperatureDisplayUnitsSet(value) {
250
+ try {
251
+ const unit = value === this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS ?
252
+ 'Celsius' : 'Fahrenheit';
253
+ await this.request('PUT', '/temperatures', { 'Temperature': { 'unit': unit } })
254
+ .catch((e) => this.platform.log.error(e));
255
+ }
256
+ catch (e) {
257
+ if (e instanceof Error) {
258
+ this.platform.log.error('Set temperature units failed.', e.message);
259
+ }
260
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
261
+ }
262
+ }
263
+ async fanActiveGet() {
264
+ try {
265
+ const json = await this.request('GET');
266
+ // if (this.getCurrentState(json) === ''
267
+ // this.platform.log.debug('Fan active result: ', json);
268
+ if (json.Device.Operation.power === 'On') {
269
+ return this.platform.api.hap.Characteristic.Active.ACTIVE;
270
+ }
271
+ else {
272
+ return this.platform.api.hap.Characteristic.Active.INACTIVE;
273
+ }
274
+ }
275
+ catch (e) {
276
+ if (e instanceof Error) {
277
+ this.platform.log.error('Get fan active failed');
278
+ }
279
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
280
+ }
281
+ }
282
+ async fanSpeedGet() {
283
+ try {
284
+ const json = await this.request('GET');
285
+ return this.getFanRotationSpeed(json.Device);
286
+ // this.platform.log.debug();
287
+ // this.platform.log.debug('Speed level', json.Wind.speedLevel);
288
+ }
289
+ catch (e) {
290
+ if (e instanceof Error) {
291
+ this.platform.log.error('Get fan speed failed', e);
292
+ }
293
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
294
+ }
295
+ }
296
+ async fanSpeedSet(value) {
297
+ try {
298
+ value = value;
299
+ if (value < 5) {
300
+ this.service.setCharacteristic(this.platform.api.hap.Characteristic.TargetHeatingCoolingState, this.platform.Characteristic.TargetHeatingCoolingState.OFF);
301
+ this.fanService.setCharacteristic(this.platform.api.hap.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
302
+ }
303
+ else {
304
+ if (this.service.getCharacteristic(this.platform.api.hap.Characteristic.CurrentHeatingCoolingState).value ===
305
+ this.platform.Characteristic.CurrentHeatingCoolingState.OFF &&
306
+ this.fanService.getCharacteristic(this.platform.api.hap.Characteristic.Active).value ===
307
+ this.platform.Characteristic.Active.INACTIVE) {
308
+ await this.request('PUT', '/operation', { 'Operation': { 'power': 'On' } });
309
+ await this.request('PUT', '/mode', { 'Mode': { 'modes': ['Opmode_Fan'] } });
310
+ }
311
+ let speedLevel;
312
+ if (value < 35) {
313
+ speedLevel = 4; // low
314
+ }
315
+ else if (value < 65) {
316
+ speedLevel = 3; // medium
317
+ }
318
+ else if (value < 95) {
319
+ speedLevel = 2; // high
320
+ }
321
+ else {
322
+ speedLevel = 0; // auto
323
+ }
324
+ // this.platform.log.debug('Set speed level', speedLevel);
325
+ await this.request('PUT', '/wind', { 'Wind': { 'speedLevel': speedLevel } });
326
+ this.fanService.updateCharacteristic(this.platform.api.hap.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
327
+ }
328
+ }
329
+ catch (_a) {
330
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
331
+ }
332
+ }
333
+ getCurrentState(jsonDevice) {
334
+ if (jsonDevice.Operation.power === 'On' && (jsonDevice.Mode.modes[0] === 'Opmode_Cool' ||
335
+ (jsonDevice.Mode.modes[0] === 'Opmode_Auto' &&
336
+ jsonDevice.Temperatures[0].desired < jsonDevice.Temperatures[0].current))) {
337
+ return this.platform.Characteristic.CurrentHeatingCoolingState.COOL;
338
+ }
339
+ else if (jsonDevice.Operation.power === 'On' && (jsonDevice.Mode.modes[0] === 'Opmode_Heat' ||
340
+ (jsonDevice.Mode.modes[0] === 'Opmode_Auto' &&
341
+ jsonDevice.Temperatures[0].desired > jsonDevice.Temperatures[0].current))) {
342
+ return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT;
343
+ }
344
+ else {
345
+ return this.platform.Characteristic.CurrentHeatingCoolingState.OFF;
346
+ }
347
+ }
348
+ getTargetState(jsonDevice) {
349
+ if (jsonDevice.Operation.power === 'On' && jsonDevice.Mode.modes[0] === 'Opmode_Cool') {
350
+ return this.platform.Characteristic.TargetHeatingCoolingState.COOL;
351
+ }
352
+ else if (jsonDevice.Operation.power === 'On' && jsonDevice.Mode.modes[0] === 'Opmode_Heat') {
353
+ return this.platform.Characteristic.TargetHeatingCoolingState.HEAT;
354
+ }
355
+ else if (jsonDevice.Operation.power === 'On' && jsonDevice.Mode.modes[0] === 'Opmode_Auto') {
356
+ return this.platform.Characteristic.TargetHeatingCoolingState.AUTO;
357
+ }
358
+ else {
359
+ return this.platform.Characteristic.TargetHeatingCoolingState.OFF;
360
+ }
361
+ }
362
+ getUnit(jsonTemperature) {
363
+ return jsonTemperature.unit === 'Celsius' ?
364
+ this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS :
365
+ this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT;
366
+ }
367
+ getFanRotationSpeed(jsonDevice) {
368
+ if (jsonDevice.Operation.power === 'Off') {
369
+ return 0; // off
370
+ }
371
+ else if (jsonDevice.Wind.speedLevel === 4) {
372
+ return 25; // low
373
+ }
374
+ else if (jsonDevice.Wind.speedLevel === 3) {
375
+ return 50; // medium
376
+ }
377
+ else if (jsonDevice.Wind.speedLevel === 2) {
378
+ return 75; //high
379
+ }
380
+ else {
381
+ return 100; // auto
382
+ }
383
+ }
384
+ }
385
+ exports.BeenocoSamsungACPlatformAccessory = BeenocoSamsungACPlatformAccessory;
386
+ //# sourceMappingURL=platformAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const PLATFORM_NAME = "BeenocoSamsungAC";
2
+ export declare const PLUGIN_NAME = "@beenoco/homebridge-samsung-ac";
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAChD,eAAO,MAAM,WAAW,mCAAmC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
4
+ exports.PLATFORM_NAME = 'BeenocoSamsungAC';
5
+ exports.PLUGIN_NAME = '@beenoco/homebridge-samsung-ac';
6
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,kBAAkB,CAAC;AACnC,QAAA,WAAW,GAAG,gCAAgC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "private": false,
3
+ "displayName": "Beenoco Samsung AC",
4
+ "name": "@beenoco/homebridge-samsung-ac",
5
+ "version": "0.1.0-beta.1",
6
+ "description": "Samsung air conditioner plugin for Homebridge by Beenoco.",
7
+ "license": "Apache-2.0",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/beenoco/homebridge-samsung-ac.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/beenoco/homebridge-samsung-ac/issues"
14
+ },
15
+ "engines": {
16
+ "node": "^20.11.0 || ^21.3.0",
17
+ "homebridge": "^1.7.0"
18
+ },
19
+ "main": "dist/index.js",
20
+ "scripts": {
21
+ "lint": "eslint src/**.ts --max-warnings=0",
22
+ "watch": "npm run build && npm link && nodemon",
23
+ "build": "rimraf ./dist && tsc",
24
+ "prepublishOnly": "npm run lint && npm run build"
25
+ },
26
+ "keywords": [
27
+ "air-conditioner",
28
+ "homebridge-plugin",
29
+ "samsung"
30
+ ],
31
+ "dependencies": {},
32
+ "devDependencies": {
33
+ "@types/node": "^18.16.20",
34
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
35
+ "@typescript-eslint/parser": "^5.62.0",
36
+ "eslint": "^8.45.0",
37
+ "homebridge": "^1.6.0",
38
+ "nodemon": "^2.0.22",
39
+ "rimraf": "^3.0.2",
40
+ "ts-node": "^10.9.1",
41
+ "typescript": "^4.9.5"
42
+ }
43
+ }
Binary file
package/tls/ca.pem ADDED
@@ -0,0 +1,72 @@
1
+ Bag Attributes
2
+ friendlyName: CN=RemoteAccessCA(CE),O=Samsung Electronics,C=KR
3
+ subject=/C=KR/O=Samsung Electronics/CN=RemoteAccessCA(CE)
4
+ issuer=/C=KR/O=Samsung Electronics/CN=CECA
5
+ -----BEGIN CERTIFICATE-----
6
+ MIIDUTCCAjmgAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJLUjEc
7
+ MBoGA1UECgwTU2Ftc3VuZyBFbGVjdHJvbmljczENMAsGA1UEAwwEQ0VDQTAiGA8x
8
+ OTYwMDEwMTAwMDAwMFoYDzIwNjAwMTAxMDAwMDAwWjBIMQswCQYDVQQGEwJLUjEc
9
+ MBoGA1UECgwTU2Ftc3VuZyBFbGVjdHJvbmljczEbMBkGA1UEAwwSUmVtb3RlQWNj
10
+ ZXNzQ0EoQ0UpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtatz9GvV
11
+ qbV395Whnad9MC9TEOiXuwnw37QHvQUwOTFgc6AenX5SORfb4UTw+0ApFNba9DlY
12
+ Xx/K9E5b5DGasDVGGTn+z+6MPB7GuAjkP+WSRwHMjrHRNqrBOr1YJUw3SIbMkRoT
13
+ 460k9AD9DQDBORRtGBGwcBw6BvdasA+/L3Q63aJ7pDoj3qxocdcgk/zFq0OrxFDL
14
+ PMTL7a+a9DS8G10K73XGgES0RBwwhlXXVuLUprD6RgbeLHFsPpIq5vzzEpAYMCF6
15
+ vkZKjDGEW7JVTgUu0E37niN3NQv1gIXlJusDH6RWfFQxENZsdFkT/l+kTuY283Ga
16
+ 2Ei1HsW3Xpt88QIDAQABo1AwTjAdBgNVHQ4EFgQU/12TkC/BOF7xDaZZWJ+DGN6n
17
+ MxcwHwYDVR0jBBgwFoAURwF9jkihypJa2u6zRwKrZwRlACswDAYDVR0TBAUwAwEB
18
+ /zANBgkqhkiG9w0BAQUFAAOCAQEAZkjxN4O92e1RTaXx1mpazyT98sJVl46R51s1
19
+ CTPq35HVfTiBOAu0C5MR6a9vIIFJScy5h69VN4OwDDbMhe/k3m6EfAutlL7lRrre
20
+ OT853HJahxdavzaXJ7tcrI/yDJI0X5GbQ8W74mmDt2/5rXsaB+h+NrToGqf6Hvf/
21
+ m7ZhUnCAt0hhLmltxTVYS25s9KoiIH0rXOb9cqUFsmBMEG2pHWC5AiSc0cXJm+kU
22
+ 3z0B2GS+4IjGdVr3FTPzzTXrpqq/X1cIVKAum5WfsFMS0CRvqTVNVwYg52n69T2B
23
+ NPCCEpp9rsIieZ58jsnc506Uc+1Vp+NmBI2A/ecypZxSb6v9gg==
24
+ -----END CERTIFICATE-----
25
+ Bag Attributes
26
+ friendlyName: CN=CECA,O=Samsung Electronics,C=KR
27
+ subject=/C=KR/O=Samsung Electronics/CN=CECA
28
+ issuer=/C=KR/O=Samsung Electronics/CN=ROOTCA
29
+ -----BEGIN CERTIFICATE-----
30
+ MIIDRTCCAi2gAwIBAgIBBDANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJLUjEc
31
+ MBoGA1UECgwTU2Ftc3VuZyBFbGVjdHJvbmljczEPMA0GA1UEAwwGUk9PVENBMCIY
32
+ DzE5NjAwMTAxMDAwMDAwWhgPMjA2MDAxMDEwMDAwMDBaMDoxCzAJBgNVBAYTAktS
33
+ MRwwGgYDVQQKDBNTYW1zdW5nIEVsZWN0cm9uaWNzMQ0wCwYDVQQDDARDRUNBMIIB
34
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtv1WJJ7tTs/aa1ZZRjMPPLeb
35
+ n/Ev0Y28CSBj/6P031/veZSg/2z65QZUvPjv8MZnIgNoMpxMGbPPO4Dxj+QJthBk
36
+ WydWRPguPyE+w3U4SdayZXWpLZTpKfHco3CklFwEqZtG/wTxHD1oOvtT0e2g5c79
37
+ hNQt9lQ4Wwzqa3MvQd0JyeB4syy2zRLo5NjJZl1BVn2oTt4xGCjjtAXtAqqHEbEf
38
+ pcvB3hPdIpFe6M8zuN22kROKaQ5i4XP4CyEpbFlgKRcWBGQFX3I5f5TdD3Yw1Ril
39
+ OLLL9wFsJ+iWLka9tAIcJKCNOf48p7aXm6COFwmjtCNu4wjQozwi6cycKUgxNQID
40
+ AQABo1AwTjAdBgNVHQ4EFgQURwF9jkihypJa2u6zRwKrZwRlACswHwYDVR0jBBgw
41
+ FoAU7andrmFFrxYM8+93lrn/Fq47sXMwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
42
+ AQUFAAOCAQEATexseQBXSfUR7fFTFxq6aAvHWIN+h3QLeN1sq8KCM4fbdkH3lOUP
43
+ rKW3w1ag62bnJVNjT4xPtzH/DyrqlzQUPTb7S0PfIXt2mu/VURnrmuXidS2grNwv
44
+ eu10gURZaz9N2UZEhY7E80tUZwcjAV+YP8+x3/iRQSrWvcMma/r01eUnwrF4xaE9
45
+ EYtJ/jTRre8MpEH/lg06m+rZf9Lk/yhG6at0YnUAIytThqFV4Cj8T8jBX+KG8BCo
46
+ VyUsFyrO+D6X98gMdTZnLqC1P1iWuxyrOWZTgsf44f5GXzmLqe5KLPvkDb4MywTa
47
+ nXrSOPSkcIgvS6WYw2Rii+e6lfVzqmhAmg==
48
+ -----END CERTIFICATE-----
49
+ Bag Attributes
50
+ friendlyName: CN=ROOTCA,O=Samsung Electronics,C=KR
51
+ subject=/C=KR/O=Samsung Electronics/CN=ROOTCA
52
+ issuer=/C=KR/O=Samsung Electronics/CN=ROOTCA
53
+ -----BEGIN CERTIFICATE-----
54
+ MIIDRzCCAi+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJLUjEc
55
+ MBoGA1UECgwTU2Ftc3VuZyBFbGVjdHJvbmljczEPMA0GA1UEAwwGUk9PVENBMCIY
56
+ DzE5NjAwMTAxMDAwMDAwWhgPMjA2MDAxMDEwMDAwMDBaMDwxCzAJBgNVBAYTAktS
57
+ MRwwGgYDVQQKDBNTYW1zdW5nIEVsZWN0cm9uaWNzMQ8wDQYDVQQDDAZST09UQ0Ew
58
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd67g2hzhbIeSBoFfeqbXi
59
+ tzbO4dCWeCigVfmwEDhR1SDA0MfHOVlFpvuFr3WyFPvQZ0ccNrsTpBs5YieI/jZi
60
+ FYWO0ktbqQorL1CIFqBL9kAF+34BYtpl98PgJ1grLOH5T3GugJA7Irw0plEFmOfs
61
+ IydlUIQHl3oqyMIWPa2nIZ/FGi3hAquEPrvzHZB+QO4c+6tV1WLIaCjn88xkYuwz
62
+ uGYxaqJpnGdqhjZRIuHb2DEZPlP1VGdTTAttno36CyWqeHrSC8fXCSu55Zk+1rbC
63
+ Py/phOJjSyce2qk0IebETAYLCLqU7ABJxUxrolMrP37OB+Kqe4RWovaeMcdcNOOt
64
+ AgMBAAGjUDBOMB0GA1UdDgQWBBTtqd2uYUWvFgzz73eWuf8WrjuxczAfBgNVHSME
65
+ GDAWgBTtqd2uYUWvFgzz73eWuf8WrjuxczAMBgNVHRMEBTADAQH/MA0GCSqGSIb3
66
+ DQEBBQUAA4IBAQBkwK95x8JCAnY0F2bMwG5+7QfY+ci8s8m1ODi3v19HECS6nG9j
67
+ SXgwihEtQ3HqvUler+n7aOeAZlgm+BymM2GvuicveYN/nevIvzlpMOn2L6xU19/H
68
+ zM2eoDVfS49+i/cwoi/A7fcZmIYggZho2UJR/GvKc79g6EAhT7/i5alBZF0enMsA
69
+ 9okzakb/aohQE9SzsEHnhVKpGAjvu0/TJK9WwX6mkiIEJY+mzQMWgEeQt6WWIgAb
70
+ gSX9NueH80tpZ9KqFnqnOoLxTAa7k0RPBRwyUO9CDhSnlWIEcsD9sqR2M+niOFnT
71
+ KBHcLDDiEU3llprD8FRV3unYrl0F0B2GGdRk
72
+ -----END CERTIFICATE-----
package/tls/cert.pem ADDED
@@ -0,0 +1,27 @@
1
+ Bag Attributes
2
+ friendlyName: ac14k_m
3
+ localKeyID: 54 69 6D 65 20 31 34 35 35 34 39 32 33 35 32 36 39 36
4
+ subject=/C=KR/O=Samsung Electronics/CN=AC14K_M/emailAddress=AC14K_M@samsung.com
5
+ issuer=/C=KR/O=Samsung Electronics/CN=RemoteAccessCA(CE)
6
+ -----BEGIN CERTIFICATE-----
7
+ MIIDmzCCAoOgAwIBAgIBCTANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJLUjEc
8
+ MBoGA1UECgwTU2Ftc3VuZyBFbGVjdHJvbmljczEbMBkGA1UEAwwSUmVtb3RlQWNj
9
+ ZXNzQ0EoQ0UpMCIYDzE5NjAwMTAxMDAwMDAwWhgPMjA2MDAxMDEwMDAwMDBaMGEx
10
+ CzAJBgNVBAYTAktSMRwwGgYDVQQKExNTYW1zdW5nIEVsZWN0cm9uaWNzMRAwDgYD
11
+ VQQDFAdBQzE0S19NMSIwIAYJKoZIhvcNAQkBFhNBQzE0S19NQHNhbXN1bmcuY29t
12
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3l74XLKkRVn0LUK9kxlv
13
+ njyc6ykFTTmZghhV6wZjimtoHGb16g3u9bqZApm18Q2W7KlNZxaMelrSss2viRNR
14
+ GliI1RVfw9IZ5xfggOevOdaxYwMe2GFbXfU8CWFdZUnyWkAVP3nFMrNEl5SmSbYy
15
+ KCfz8i0RBO/U4zqk8VzF5w6YgLd6IsAKWTMHiec9kFYqrUXqZCN9xg4GHC82piHp
16
+ 4EhulmZBFK9q6GNIpeGlV39yEVUV/uXCdi+eOtpBTypv1J6160rKy8GxfZbUpTQP
17
+ BYKRzd3fWcqgdzAeOqBmMsWGFO2vv0d0QMdI6DX1TxXvK4kF0HKDRIGpW3PH+zeB
18
+ zwIDAQABo3MwcTAdBgNVHQ4EFgQUXzEjosLzA6xbR1KAqnmAp3BNM6MwHwYDVR0j
19
+ BBgwFoAU/12TkC/BOF7xDaZZWJ+DGN6nMxcwDAYDVR0TBAUwAwEB/zAhBgNVHREE
20
+ GjAYggtzYW1zdW5nLmNvbYIJbG9jYWxob3N0MA0GCSqGSIb3DQEBBQUAA4IBAQBW
21
+ 0mStlbdvrHqDJ+KOKVf0C/y9FKTODqo/6/wJNZeZ+8ezPza4nFq70MwQYTpSbZhz
22
+ 5w8bQP9fwSAoa2Vki8ZwcSd85Vi2tHz9O4C7d7zBA3FU8AL3NoEMFv6OGWGPnTY5
23
+ mG/Hn+LxuwQddlysfbRDds1LBY8DBUJNAmIeeWqA5Eg8DW6xJUwHeXUElJpSXHW6
24
+ XGvpWgAhXqoIf6TirdCrPY6+IzV/FcuVtBDGi+JoxgrMfMLgLEVjeSY96DJinHgZ
25
+ RT0FkA5e06Z+fqHh9Btu+aed+kuGSmya/A5wStOkGeKEbezbbN2gtW07lN6VxX3J
26
+ OCgygA+hmnBVnRDA8Jzu
27
+ -----END CERTIFICATE-----