@o-lukas/homebridge-smartthings-tv 2.1.3 → 2.2.0

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,127 @@
1
+ import { PlatformAccessory, Logger } from 'homebridge';
2
+ import { SmartThingsPlatform } from './smartThingsPlatform.js';
3
+ import { SmartThingsClient, Device, Component } from '@smartthings/core-sdk';
4
+ import { SmartThingsAccessory } from './smartThingsAccessory.js';
5
+ /**
6
+ * Class implements a SmartThings soundbar accessory.
7
+ */
8
+ export declare class SoundbarAccessory extends SmartThingsAccessory {
9
+ private readonly logCapabilities;
10
+ private readonly pollingInterval;
11
+ private readonly cyclicCallsLogging;
12
+ private readonly macAddress;
13
+ private readonly ipAddress;
14
+ private readonly inputSources;
15
+ private service;
16
+ private speakerService;
17
+ private inputSourceServices;
18
+ private capabilities;
19
+ private activeIdentifierChangeTime;
20
+ private activeIdentifierChangeValue;
21
+ constructor(name: string, device: Device, component: Component, client: SmartThingsClient, log: Logger, platform: SmartThingsPlatform, accessory: PlatformAccessory, logCapabilities: boolean, pollingInterval: number | undefined, cyclicCallsLogging: boolean, macAddress?: string | undefined, ipAddress?: string | undefined, inputSources?: [{
22
+ name: string;
23
+ id: string;
24
+ }] | undefined);
25
+ /**
26
+ * Registers all available capabilities of the SmartThings Component.
27
+ */
28
+ registerCapabilities(): Promise<void>;
29
+ /**
30
+ * Registers the SmartThings Capablity if it's functionality is implemented.
31
+ *
32
+ * @param capability the Capability
33
+ */
34
+ private registerCapability;
35
+ /**
36
+ * Setter for Homebridge accessory Active property.
37
+ *
38
+ * @param value the CharacteristicValue
39
+ */
40
+ private setActive;
41
+ /**
42
+ * Getter for Homebridge accessory Active property.
43
+ *
44
+ * @param log flag to turn logging on/off
45
+ * @returns the CharacteristicValue
46
+ */
47
+ private getActive;
48
+ /**
49
+ * Setter for Homebridge accessory VolumeSelector property.
50
+ *
51
+ * @param value the CharacteristicValue
52
+ */
53
+ private setVolumeSelector;
54
+ /**
55
+ * Setter for Homebridge accessory Volume property.
56
+ *
57
+ * @param value the CharacteristicValue
58
+ */
59
+ private setVolume;
60
+ /**
61
+ * Getter for Homebridge accessory Volume property.
62
+ *
63
+ * @param log flag to turn logging on/off
64
+ * @returns the CharacteristicValue
65
+ */
66
+ private getVolume;
67
+ /**
68
+ * Setter for Homebridge accessory Mute property.
69
+ *
70
+ * @param value the CharacteristicValue
71
+ */
72
+ private setMute;
73
+ /**
74
+ * Getter for Homebridge accessory Mute property.
75
+ *
76
+ * @param log flag to turn logging on/off
77
+ * @returns the CharacteristicValue
78
+ */
79
+ private getMute;
80
+ /**
81
+ * Setter for Homebridge accessory ActiveIdentifier property.
82
+ *
83
+ * @param value the CharacteristicValue
84
+ */
85
+ private setActiveIdentifier;
86
+ /**
87
+ * Getter for Homebridge accessory ActiveIdentifier property.
88
+ *
89
+ * @param log flag to turn logging on/off
90
+ * @returns the CharacteristicValue
91
+ */
92
+ private getActiveIdentifier;
93
+ /**
94
+ * Setter for Homebridge accessory RemoteKey property.
95
+ *
96
+ * @param value the CharacteristicValue
97
+ */
98
+ private setRemoteKey;
99
+ /**
100
+ * Validates that the SmartThings Capability needed to execute the remote key is available.
101
+ *
102
+ * @param capabilityId the identifier of the SmartThings Capablity
103
+ * @param remoteKey the remote key
104
+ * @returns TRUE in case capability is available - FALSE otherwise
105
+ */
106
+ private validateRemoteKeyCapability;
107
+ /**
108
+ * Registers all available media input sources (e.g. HDMI inputs).
109
+ */
110
+ private registerAvailableInputSources;
111
+ /**
112
+ * Registers a Homebridge input source.
113
+ *
114
+ * @param id the input source id
115
+ * @param name the input source display name
116
+ * @param inputSource the InputSourceType or @code undefined @endcode to use @link guessInputSourceType @endlink
117
+ * to determine InputSourceType
118
+ */
119
+ private registerInputSource;
120
+ /**
121
+ * Guesses the InputSourceType from the identifier of the input source.
122
+ *
123
+ * @param inputSourceId the identifier of the input source
124
+ * @returns the InputSourceType (HDMI|TUNER|OTHER)
125
+ */
126
+ private guessInputSourceType;
127
+ }
@@ -0,0 +1,353 @@
1
+ import { wake } from 'wol';
2
+ import ping from 'ping';
3
+ import { SmartThingsAccessory } from './smartThingsAccessory.js';
4
+ /**
5
+ * Class implements a SmartThings soundbar accessory.
6
+ */
7
+ export class SoundbarAccessory extends SmartThingsAccessory {
8
+ logCapabilities;
9
+ pollingInterval;
10
+ cyclicCallsLogging;
11
+ macAddress;
12
+ ipAddress;
13
+ inputSources;
14
+ service;
15
+ speakerService;
16
+ inputSourceServices = [];
17
+ capabilities = [];
18
+ activeIdentifierChangeTime = 0;
19
+ activeIdentifierChangeValue = 0;
20
+ constructor(name, device, component, client, log, platform, accessory, logCapabilities, pollingInterval, cyclicCallsLogging, macAddress = undefined, ipAddress = undefined, inputSources = undefined) {
21
+ super(device, component, client, platform, accessory, log);
22
+ this.logCapabilities = logCapabilities;
23
+ this.pollingInterval = pollingInterval;
24
+ this.cyclicCallsLogging = cyclicCallsLogging;
25
+ this.macAddress = macAddress;
26
+ this.ipAddress = ipAddress;
27
+ this.inputSources = inputSources;
28
+ this.accessory.getService(this.platform.Service.AccessoryInformation)
29
+ .setCharacteristic(this.platform.Characteristic.Name, name);
30
+ this.service = this.accessory.getService(this.platform.Service.Television)
31
+ ?? this.accessory.addService(this.platform.Service.Television);
32
+ this.service
33
+ .setCharacteristic(this.platform.Characteristic.SleepDiscoveryMode, this.platform.Characteristic.SleepDiscoveryMode.ALWAYS_DISCOVERABLE)
34
+ .setCharacteristic(this.platform.Characteristic.ConfiguredName, name);
35
+ this.service.getCharacteristic(this.platform.Characteristic.RemoteKey)
36
+ .onSet(this.setRemoteKey.bind(this));
37
+ this.speakerService = this.accessory.getService(this.platform.Service.TelevisionSpeaker)
38
+ ?? this.accessory.addService(this.platform.Service.TelevisionSpeaker);
39
+ this.service.addLinkedService(this.speakerService);
40
+ }
41
+ /**
42
+ * Registers all available capabilities of the SmartThings Component.
43
+ */
44
+ async registerCapabilities() {
45
+ this.logInfo('Registering capabilities for component %s', this.component.id);
46
+ for (const reference of this.component.capabilities) {
47
+ await this.registerCapability(await this.client.capabilities.get(reference.id, reference.version ?? 0));
48
+ }
49
+ }
50
+ /**
51
+ * Registers the SmartThings Capablity if it's functionality is implemented.
52
+ *
53
+ * @param capability the Capability
54
+ */
55
+ async registerCapability(capability) {
56
+ let inputSourcePollingStarted = false;
57
+ if (this.logCapabilities) {
58
+ this.logDebug('Available capability: %s', JSON.stringify(capability, null, 2));
59
+ }
60
+ if (capability.id && !this.capabilities.includes(capability.id)) {
61
+ this.capabilities.push(capability.id);
62
+ }
63
+ switch (capability.id) {
64
+ case 'switch':
65
+ this.logCapabilityRegistration(capability);
66
+ this.service.getCharacteristic(this.platform.Characteristic.Active)
67
+ .onSet(this.setActive.bind(this))
68
+ .onGet(this.getActive.bind(this));
69
+ this.startStatusPolling(capability.name, this.service, this.platform.Characteristic.Active, this.getActive.bind(this, this.cyclicCallsLogging), this.pollingInterval);
70
+ break;
71
+ case 'audioVolume':
72
+ this.logCapabilityRegistration(capability);
73
+ this.speakerService
74
+ .setCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
75
+ this.speakerService
76
+ .setCharacteristic(this.platform.Characteristic.VolumeControlType, this.platform.Characteristic.VolumeControlType.ABSOLUTE);
77
+ this.speakerService
78
+ .getCharacteristic(this.platform.Characteristic.Volume)
79
+ .onGet(this.getVolume.bind(this))
80
+ .onSet(this.setVolume.bind(this));
81
+ this.speakerService.getCharacteristic(this.platform.Characteristic.VolumeSelector)
82
+ .onSet(this.setVolumeSelector.bind(this));
83
+ this.startStatusPolling(capability.name, this.speakerService, this.platform.Characteristic.Volume, this.getVolume.bind(this, this.cyclicCallsLogging), this.pollingInterval);
84
+ break;
85
+ case 'audioMute':
86
+ this.logCapabilityRegistration(capability);
87
+ this.speakerService.getCharacteristic(this.platform.Characteristic.Mute)
88
+ .onSet(this.setMute.bind(this))
89
+ .onGet(this.getMute.bind(this));
90
+ this.startStatusPolling(capability.name, this.speakerService, this.platform.Characteristic.Mute, this.getMute.bind(this, this.cyclicCallsLogging), this.pollingInterval);
91
+ break;
92
+ case 'samsungvd.audioInputSource':
93
+ this.logCapabilityRegistration(capability);
94
+ await this.registerAvailableInputSources();
95
+ if (this.inputSourceServices.length > 0) {
96
+ this.service.getCharacteristic(this.platform.Characteristic.ActiveIdentifier)
97
+ .onSet(this.setActiveIdentifier.bind(this))
98
+ .onGet(this.getActiveIdentifier.bind(this));
99
+ if (!inputSourcePollingStarted) {
100
+ inputSourcePollingStarted = true;
101
+ this.startStatusPolling('activeIdentifier', this.service, this.platform.Characteristic.ActiveIdentifier, this.getActiveIdentifier.bind(this, this.cyclicCallsLogging), this.pollingInterval);
102
+ }
103
+ }
104
+ break;
105
+ }
106
+ }
107
+ /**
108
+ * Setter for Homebridge accessory Active property.
109
+ *
110
+ * @param value the CharacteristicValue
111
+ */
112
+ async setActive(value) {
113
+ this.logDebug('Set active to: %s', value);
114
+ if (value) {
115
+ if (this.macAddress) {
116
+ this.logDebug('Use wake-on-lan functionality because mac-address has been configured');
117
+ if (await wake(this.macAddress)) {
118
+ this.logDebug('Successfully woke device');
119
+ }
120
+ else {
121
+ this.logError('Could not wake device - if this error keeps occuring try to disable wake-on-lan functionality');
122
+ }
123
+ }
124
+ else {
125
+ await this.executeCommand('switch', 'on');
126
+ }
127
+ }
128
+ else {
129
+ await this.executeCommand('switch', 'off');
130
+ }
131
+ }
132
+ /**
133
+ * Getter for Homebridge accessory Active property.
134
+ *
135
+ * @param log flag to turn logging on/off
136
+ * @returns the CharacteristicValue
137
+ */
138
+ async getActive(log = true) {
139
+ if (this.ipAddress) {
140
+ try {
141
+ const status = await ping.promise.probe(this.ipAddress);
142
+ if (log) {
143
+ this.logDebug('ping status: %s', status);
144
+ }
145
+ return status?.alive;
146
+ }
147
+ catch (exc) {
148
+ this.logError('error when pinging device: %s\n\
149
+ ping command fails mostly because of permission issues - falling back to SmartThings API for getting active state', exc);
150
+ return false;
151
+ }
152
+ }
153
+ const status = await this.getCapabilityStatus('switch', log);
154
+ return status?.switch.value === 'on' ? true : false;
155
+ }
156
+ /**
157
+ * Setter for Homebridge accessory VolumeSelector property.
158
+ *
159
+ * @param value the CharacteristicValue
160
+ */
161
+ async setVolumeSelector(value) {
162
+ const increment = value === this.platform.Characteristic.VolumeSelector.INCREMENT;
163
+ this.logDebug('%s volume', increment ? 'Increasing' : 'Decreasing');
164
+ await this.executeCommand('audioVolume', increment ? 'volumeUp' : 'volumeDown');
165
+ }
166
+ /**
167
+ * Setter for Homebridge accessory Volume property.
168
+ *
169
+ * @param value the CharacteristicValue
170
+ */
171
+ async setVolume(value) {
172
+ this.logDebug('Set volume to: %s', value);
173
+ await this.executeCommand('audioVolume', 'setVolume', [value]);
174
+ }
175
+ /**
176
+ * Getter for Homebridge accessory Volume property.
177
+ *
178
+ * @param log flag to turn logging on/off
179
+ * @returns the CharacteristicValue
180
+ */
181
+ async getVolume(log = true) {
182
+ const status = await this.getCapabilityStatus('audioVolume', log);
183
+ return status?.volume.value;
184
+ }
185
+ /**
186
+ * Setter for Homebridge accessory Mute property.
187
+ *
188
+ * @param value the CharacteristicValue
189
+ */
190
+ async setMute(value) {
191
+ this.logDebug('Set mute to: %s', value);
192
+ await this.executeCommand('audioMute', value ? 'mute' : 'unmute');
193
+ }
194
+ /**
195
+ * Getter for Homebridge accessory Mute property.
196
+ *
197
+ * @param log flag to turn logging on/off
198
+ * @returns the CharacteristicValue
199
+ */
200
+ async getMute(log = true) {
201
+ const status = await this.getCapabilityStatus('audioMute', log);
202
+ return status?.mute.value === 'muted' ? true : false;
203
+ }
204
+ /**
205
+ * Setter for Homebridge accessory ActiveIdentifier property.
206
+ *
207
+ * @param value the CharacteristicValue
208
+ */
209
+ async setActiveIdentifier(value) {
210
+ this.logDebug('Set active identifier to: %s', value);
211
+ const inputSource = this.inputSourceServices[value];
212
+ this.activeIdentifierChangeTime = Date.now();
213
+ this.activeIdentifierChangeValue = value;
214
+ // HACK: because samsungvd.audioInputSource does not support setting input source use
215
+ // mediaInputSource samsungvd.audioInputSource to get list of supported sources
216
+ await this.executeCommand('mediaInputSource', 'setInputSource', [inputSource.name ?? '']);
217
+ }
218
+ /**
219
+ * Getter for Homebridge accessory ActiveIdentifier property.
220
+ *
221
+ * @param log flag to turn logging on/off
222
+ * @returns the CharacteristicValue
223
+ */
224
+ async getActiveIdentifier(log = true) {
225
+ const status = await this.getCapabilityStatus('samsungvd.audioInputSource', log);
226
+ if (Date.parse(status?.inputSource.timestamp ?? '') > this.activeIdentifierChangeTime) {
227
+ const id = this.inputSourceServices.findIndex(inputSource => inputSource.name === status?.inputSource.value);
228
+ if (log) {
229
+ this.logDebug('ActiveIdentifier has been changed on the device - using API result: %s', id);
230
+ }
231
+ if (id < 0) {
232
+ this.logWarn('Could not find input source for name \'%s\' - using first input source \'%s\' as active identifier', status?.inputSource.value, this.inputSourceServices[0].name);
233
+ return 0;
234
+ }
235
+ return id;
236
+ }
237
+ else {
238
+ if (log) {
239
+ this.logDebug('ActiveIdentifier has not been changed on the device - using temporary result: %s', this.activeIdentifierChangeValue);
240
+ }
241
+ return this.activeIdentifierChangeValue;
242
+ }
243
+ }
244
+ /**
245
+ * Setter for Homebridge accessory RemoteKey property.
246
+ *
247
+ * @param value the CharacteristicValue
248
+ */
249
+ async setRemoteKey(value) {
250
+ switch (value) {
251
+ case this.platform.Characteristic.RemoteKey.REWIND:
252
+ if (this.validateRemoteKeyCapability('mediaPlayback', 'REWIND')) {
253
+ await this.executeCommand('mediaPlayback', 'rewind');
254
+ }
255
+ break;
256
+ case this.platform.Characteristic.RemoteKey.FAST_FORWARD:
257
+ if (this.validateRemoteKeyCapability('mediaPlayback', 'FAST_FORWARD')) {
258
+ await this.executeCommand('mediaPlayback', 'fastForward');
259
+ }
260
+ break;
261
+ case this.platform.Characteristic.RemoteKey.PLAY_PAUSE:
262
+ if (this.validateRemoteKeyCapability('mediaPlayback', 'PLAY_PAUSE')) {
263
+ await this.executeCommand('mediaPlayback', 'play');
264
+ }
265
+ break;
266
+ case this.platform.Characteristic.RemoteKey.EXIT:
267
+ if (this.validateRemoteKeyCapability('mediaPlayback', 'EXIT')) {
268
+ await this.executeCommand('mediaPlayback', 'stop');
269
+ }
270
+ break;
271
+ case this.platform.Characteristic.RemoteKey.BACK:
272
+ if (this.validateRemoteKeyCapability('mediaPlayback', 'BACK')) {
273
+ await this.executeCommand('mediaPlayback', 'stop');
274
+ }
275
+ break;
276
+ }
277
+ }
278
+ /**
279
+ * Validates that the SmartThings Capability needed to execute the remote key is available.
280
+ *
281
+ * @param capabilityId the identifier of the SmartThings Capablity
282
+ * @param remoteKey the remote key
283
+ * @returns TRUE in case capability is available - FALSE otherwise
284
+ */
285
+ validateRemoteKeyCapability(capabilityId, remoteKey) {
286
+ if (this.capabilities.includes(capabilityId)) {
287
+ return true;
288
+ }
289
+ else {
290
+ this.logError('can\'t handle RemoteKey %s because %s capability is not available', remoteKey, capabilityId);
291
+ return false;
292
+ }
293
+ }
294
+ /**
295
+ * Registers all available media input sources (e.g. HDMI inputs).
296
+ */
297
+ async registerAvailableInputSources() {
298
+ const status = await this.client.devices.getCapabilityStatus(this.device.deviceId, this.component.id, 'samsungvd.audioInputSource');
299
+ const supportedInputSources = [...new Set(status.supportedInputSources.value)].map((s) => {
300
+ return {
301
+ name: s,
302
+ id: s,
303
+ };
304
+ });
305
+ if (this.inputSources) {
306
+ this.logInfo('Overriding default input sources map "%s" with custom map "%s"', JSON.stringify(supportedInputSources, null, 2), JSON.stringify(this.inputSources, null, 2));
307
+ }
308
+ for (const inputSource of this.inputSources ?? supportedInputSources) {
309
+ this.registerInputSource(inputSource.id, inputSource.name);
310
+ }
311
+ }
312
+ /**
313
+ * Registers a Homebridge input source.
314
+ *
315
+ * @param id the input source id
316
+ * @param name the input source display name
317
+ * @param inputSource the InputSourceType or @code undefined @endcode to use @link guessInputSourceType @endlink
318
+ * to determine InputSourceType
319
+ */
320
+ registerInputSource(id, name, inputSource = undefined) {
321
+ this.logInfo('Registering input source: %s (%s)', name, id);
322
+ let inputSourceType = inputSource;
323
+ if (inputSourceType === undefined) {
324
+ inputSourceType = this.guessInputSourceType(id);
325
+ this.logDebug('Guessed input source type for %s is: %i', name, inputSourceType);
326
+ }
327
+ const inputSourceService = this.accessory.getService(id)
328
+ ?? this.accessory.addService(this.platform.Service.InputSource, id, id);
329
+ inputSourceService.name = id;
330
+ inputSourceService
331
+ .setCharacteristic(this.platform.Characteristic.Identifier, this.inputSourceServices.length)
332
+ .setCharacteristic(this.platform.Characteristic.ConfiguredName, name)
333
+ .setCharacteristic(this.platform.Characteristic.IsConfigured, this.platform.Characteristic.IsConfigured.CONFIGURED)
334
+ .setCharacteristic(this.platform.Characteristic.InputSourceType, inputSourceType);
335
+ this.service.addLinkedService(inputSourceService);
336
+ this.inputSourceServices.push(inputSourceService);
337
+ }
338
+ /**
339
+ * Guesses the InputSourceType from the identifier of the input source.
340
+ *
341
+ * @param inputSourceId the identifier of the input source
342
+ * @returns the InputSourceType (HDMI|TUNER|OTHER)
343
+ */
344
+ guessInputSourceType(inputSourceId) {
345
+ if (inputSourceId.startsWith('HDMI')) {
346
+ return this.platform.Characteristic.InputSourceType.HDMI;
347
+ }
348
+ else {
349
+ return this.platform.Characteristic.InputSourceType.OTHER;
350
+ }
351
+ }
352
+ }
353
+ //# sourceMappingURL=soundbarAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soundbarAccessory.js","sourceRoot":"","sources":["../src/soundbarAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { PlatformAccessory, Logger } from 'homebridge';
2
- import { SmartThingsPlatform } from './smartThingsPlatform';
2
+ import { SmartThingsPlatform } from './smartThingsPlatform.js';
3
3
  import { SmartThingsClient, Device, Component } from '@smartthings/core-sdk';
4
- import { SmartThingsAccessory } from './smartThingsAccessory';
4
+ import { SmartThingsAccessory } from './smartThingsAccessory.js';
5
5
  /**
6
6
  * Class implements a stateless switch accessory to execute a capability commmand.
7
7
  */
@@ -14,4 +14,3 @@ export declare class SwitchAccessory extends SmartThingsAccessory {
14
14
  private handleGet;
15
15
  private handleSet;
16
16
  }
17
- //# sourceMappingURL=switchAccessory.d.ts.map
@@ -1,18 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SwitchAccessory = void 0;
4
- const smartThingsAccessory_1 = require("./smartThingsAccessory");
1
+ import { SmartThingsAccessory } from './smartThingsAccessory.js';
5
2
  /**
6
3
  * Class implements a stateless switch accessory to execute a capability commmand.
7
4
  */
8
- class SwitchAccessory extends smartThingsAccessory_1.SmartThingsAccessory {
5
+ export class SwitchAccessory extends SmartThingsAccessory {
6
+ capability;
7
+ command;
8
+ value;
9
+ service;
9
10
  constructor(device, component, client, log, platform, accessory, capability, command, value) {
10
- var _a;
11
11
  super(device, component, client, platform, accessory, log);
12
12
  this.capability = capability;
13
13
  this.command = command;
14
14
  this.value = value;
15
- this.service = (_a = this.accessory.getService(this.platform.Service.Switch)) !== null && _a !== void 0 ? _a : this.accessory.addService(this.platform.Service.Switch);
15
+ this.service = this.accessory.getService(this.platform.Service.Switch) ??
16
+ this.accessory.addService(this.platform.Service.Switch);
16
17
  this.service.getCharacteristic(this.platform.Characteristic.On)
17
18
  .onGet(this.handleGet.bind(this))
18
19
  .onSet(this.handleSet.bind(this));
@@ -30,5 +31,4 @@ class SwitchAccessory extends smartThingsAccessory_1.SmartThingsAccessory {
30
31
  }
31
32
  }
32
33
  }
33
- exports.SwitchAccessory = SwitchAccessory;
34
34
  //# sourceMappingURL=switchAccessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switchAccessory.js","sourceRoot":"","sources":["../src/switchAccessory.ts"],"names":[],"mappings":";;;AAIA,iEAA8D;AAE9D;;GAEG;AACH,MAAa,eAAgB,SAAQ,2CAAoB;IAGvD,YACE,MAAc,EACd,SAAoB,EACpB,MAAyB,EACzB,GAAW,EACX,QAA6B,EAC7B,SAA4B,EACX,UAAkB,EAClB,OAAe,EACf,KAAa;;QAE9B,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAJ1C,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAQ;QAI9B,IAAI,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,mCACpE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAC5D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,SAAS;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAA0B;QAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAEvE,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF;AArCD,0CAqCC"}
1
+ {"version":3,"file":"switchAccessory.js","sourceRoot":"","sources":["../src/switchAccessory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,oBAAoB;IAUpC;IACA;IACA;IAXF,OAAO,CAAU;IAElC,YACE,MAAc,EACd,SAAoB,EACpB,MAAyB,EACzB,GAAW,EACX,QAA6B,EAC7B,SAA4B,EACX,UAAkB,EAClB,OAAe,EACf,KAAa;QAE9B,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAJ1C,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAQ;QAI9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAC5D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,SAAS;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAA0B;QAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAEvE,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  import { PlatformAccessory, Logger } from 'homebridge';
2
- import { SmartThingsPlatform } from './smartThingsPlatform';
2
+ import { SmartThingsPlatform } from './smartThingsPlatform.js';
3
3
  import { SmartThingsClient, Device, Component } from '@smartthings/core-sdk';
4
- import { SmartThingsAccessory } from './smartThingsAccessory';
4
+ import { SmartThingsAccessory } from './smartThingsAccessory.js';
5
5
  /**
6
6
  * Class implements a SmartThings TV accessory.
7
7
  */
@@ -173,4 +173,3 @@ export declare class TvAccessory extends SmartThingsAccessory {
173
173
  */
174
174
  private guessInputSourceType;
175
175
  }
176
- //# sourceMappingURL=tvAccessory.d.ts.map