homebridge-smartthings-oauth 1.0.66-beta.6 → 1.0.66

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/CHANGELOG.md CHANGED
@@ -1,6 +1,32 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [1.0.66] - Samsung Frame & Tizen TV Control + Laundry/Dishwasher Countdown
5
+
6
+ > Consolidates the `1.0.66-beta.0`–`beta.7` work (see the beta entries below for full detail). Two themes: Samsung **Frame & Tizen TV** control over the local WebSocket (#46), and a working **remaining-time countdown** for Samsung washers, dryers, and dishwashers in Apple Home (#13). Does not include the in-progress air-purifier work (PR #48).
7
+
8
+ ### Added
9
+ - **Samsung Frame & Tizen TV Control** (#46) — the Apple TV Remote **D-pad** (arrows / Select / Back / Exit / Info) and the iPhone's **hardware volume buttons** drive paired Frame/Tizen TVs over the local `samsung.remote.control` WebSocket, and the **Info button is configurable** per TV (`KEY_INFO` / `KEY_AMBIENT` / `KEY_HOME` / `KEY_SOURCE` / `KEY_MENU` / `KEY_GUIDE`) from the settings UI. Works on The Frame and other Samsung Tizen TVs (OLED / QLED / Neo QLED / Crystal UHD). Thanks to @asafdav.
10
+ - **`SetDuration` and `IsConfigured` characteristics** on the washer/dryer/dishwasher Valve, matching the reference HomeKit valve plugins so Apple Home reliably renders the cycle countdown.
11
+
12
+ ### Fixed
13
+ - **Washer/Dryer/Dishwasher remaining-time countdown** (#13) — the appliance Valve now shows a live countdown in Apple Home's expanded tile while a cycle runs, for both webhook and polling setups. The countdown is seeded **once** at cycle start and decremented by Home itself; the previous per-poll push reset Home's client-side timer and left the tile stuck on "Waiting".
14
+ - **Art Mode status read on modern Samsung TVs** (#46) — the Art Mode switch reflects the TV's actual state on the modern art API (v5.x) instead of always showing off.
15
+
16
+ ### Changed
17
+ - **Renamed to "Samsung Frame & Tizen TV Control"** across the settings UI, config schema, README, and wiki — the local-WebSocket feature works on non-Frame Samsung Tizen TVs too. The `frameTvDevices` config key and wiki URL are unchanged, so existing configs keep working.
18
+ - **Quieter Art Mode polling** (#46) — the routine 30s art-status poll no longer logs per-cycle; only genuine errors and real state changes are logged.
19
+
20
+ ## [1.0.66-beta.7] - Washer/Dryer/Dishwasher countdown: seed-once Valve pattern
21
+
22
+ > Follow-up to beta.6 (#13). beta.6 pushed `RemainingDuration` on every poll, which kept **resetting Apple Home's client-side countdown** — so the tile stayed on "Waiting". This release adopts the pattern used by working HomeKit valve/irrigation plugins (RainBird, Orbit B-hyve, hap-nodejs `Sprinkler`): seed the countdown **once** at cycle start and let Home decrement it itself.
23
+
24
+ ### Fixed
25
+ - **Washer/Dryer/Dishwasher countdown now renders in polling mode** (#13) — the drifting per-characteristic polls and the 60s self-push timer are replaced by a single consolidated poll that pushes `Active`/`InUse` each cycle but seeds `RemainingDuration` (and `SetDuration`) **only once**, on the cycle-start transition. Re-reads (e.g. when the Home app reopens) are served by the `onGet` handler, which computes the live remaining time from `completionTime`. The same fix is applied to the dryer, which shares the identical Valve code.
26
+
27
+ ### Added
28
+ - **`SetDuration` and `IsConfigured` characteristics** on the washer/dryer/dishwasher Valve, matching the reference valve plugins so Apple Home reliably renders the countdown. `SetDuration` is read-only (the cycle can't be changed from HomeKit).
29
+
4
30
  ## [1.0.66-beta.6] - Washer/Dishwasher countdown for polling-mode users
5
31
 
6
32
  > Fixes the washer/dishwasher Valve tile showing **"Waiting"** instead of the remaining-time countdown for users without webhooks configured (#13). The Valve's `RemainingDuration` was only ever pushed to HomeKit from the webhook `processEvent` path — so polling-only setups (no `server_url`) never proactively pushed it, and Apple Home's tile stayed on "Waiting" (the value was still correct on demand, e.g. via the Swagger `/api/accessories` endpoint, but Home was never notified).
@@ -5,10 +5,15 @@ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
5
  import { ShortEvent } from '../webhook/subscriptionHandler';
6
6
  export declare class DishwasherService extends BaseService {
7
7
  private cachedCompletionTime;
8
- private countdownTimer;
8
+ private lastInUse;
9
+ private remainingSeeded;
9
10
  private contactSensorService;
10
11
  constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
11
12
  setActive(value: CharacteristicValue): Promise<void>;
13
+ setDuration(value: CharacteristicValue): Promise<void>;
14
+ pollValveState(): Promise<CharacteristicValue>;
15
+ private applyInUseTransition;
16
+ private seedRemainingDuration;
12
17
  getActive(): Promise<CharacteristicValue>;
13
18
  getInUse(): Promise<CharacteristicValue>;
14
19
  getContactSensorState(): Promise<CharacteristicValue>;
@@ -18,8 +23,6 @@ export declare class DishwasherService extends BaseService {
18
23
  private jobStateToContactSensor;
19
24
  private tryRemainingTimeFallback;
20
25
  private calculateRemainingSeconds;
21
- private startCountdownTimer;
22
- private stopCountdownTimer;
23
26
  processEvent(event: ShortEvent): void;
24
27
  }
25
28
  //# sourceMappingURL=dishwasherService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dishwasherService.d.ts","sourceRoot":"","sources":["../../src/services/dishwasherService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,iBAAkB,SAAQ,WAAW;IAEhD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IA0DtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAIpC,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA4B1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,kBAAkB;IAOnB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAkC7C"}
1
+ {"version":3,"file":"dishwasherService.d.ts","sourceRoot":"","sources":["../../src/services/dishwasherService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,iBAAkB,SAAQ,WAAW;IAEhD,OAAO,CAAC,oBAAoB,CAAuB;IAEnD,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAuEtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAKpC,WAAW,CAAC,KAAK,EAAE,mBAAmB;IAMtC,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6CpD,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,qBAAqB;IAYvB,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwB1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,yBAAyB;IAa1B,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAyC7C"}
@@ -6,12 +6,17 @@ class DishwasherService extends baseService_1.BaseService {
6
6
  constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
7
  super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
8
  this.cachedCompletionTime = null;
9
- this.countdownTimer = null;
9
+ // Tracks the last InUse value so we only seed the countdown on the OFF->ON (cycle-start) transition.
10
+ this.lastInUse = null;
11
+ // Whether a non-zero RemainingDuration has been seeded for the current cycle (seed-once guard).
12
+ this.remainingSeeded = false;
10
13
  this.setServiceType(platform.Service.Valve);
11
14
  this.log.debug(`Adding DishwasherService to ${this.name}`);
12
15
  // ValveType: GENERIC_VALVE so Apple Home shows it as a generic valve with countdown
13
16
  this.service.getCharacteristic(platform.Characteristic.ValveType)
14
17
  .updateValue(platform.Characteristic.ValveType.GENERIC_VALVE);
18
+ // IsConfigured: working valve/irrigation plugins set this; unconfigured valves don't render reliably
19
+ this.service.setCharacteristic(platform.Characteristic.IsConfigured, platform.Characteristic.IsConfigured.CONFIGURED);
15
20
  // Active: machine is running or paused
16
21
  this.service.getCharacteristic(platform.Characteristic.Active)
17
22
  .onGet(this.getActive.bind(this))
@@ -19,21 +24,30 @@ class DishwasherService extends baseService_1.BaseService {
19
24
  // InUse: dishwasher job is actively working (wash/rinse/drying/etc)
20
25
  this.service.getCharacteristic(platform.Characteristic.InUse)
21
26
  .onGet(this.getInUse.bind(this));
22
- // RemainingDuration: Apple Home auto-decrements the countdown display for Valve services
27
+ // SetDuration: read-only for an appliance, but Apple Home's countdown UI expects the
28
+ // SetDuration/RemainingDuration pair. onSet is a no-op (we can't change the wash cycle).
29
+ this.service.getCharacteristic(platform.Characteristic.SetDuration)
30
+ .setProps({ maxValue: 14400 })
31
+ .onGet(this.getRemainingDuration.bind(this))
32
+ .onSet(this.setDuration.bind(this));
33
+ // RemainingDuration: seeded ONCE at cycle start; Apple Home then decrements it client-side.
23
34
  this.service.getCharacteristic(platform.Characteristic.RemainingDuration)
24
35
  .setProps({ maxValue: 14400 })
25
36
  .onGet(this.getRemainingDuration.bind(this));
37
+ // Seed initial values so a stale cached value isn't shown after a restart (matches reference plugins).
38
+ this.service.updateCharacteristic(platform.Characteristic.RemainingDuration, 0);
39
+ this.service.updateCharacteristic(platform.Characteristic.SetDuration, 0);
26
40
  // Poll using switch/light interval (appliances change state infrequently)
27
41
  let pollSeconds = 10;
28
42
  if (this.platform.config.PollSwitchesAndLightsSeconds !== undefined) {
29
43
  pollSeconds = this.platform.config.PollSwitchesAndLightsSeconds;
30
44
  }
31
45
  if (pollSeconds > 0) {
32
- multiServiceAccessory.startPollingState(pollSeconds, this.getActive.bind(this), this.service, platform.Characteristic.Active);
33
- multiServiceAccessory.startPollingState(pollSeconds, this.getInUse.bind(this), this.service, platform.Characteristic.InUse);
34
- // RemainingDuration must be pushed proactively too: in polling mode (no webhooks) processEvent
35
- // never fires, so without this the Apple Home tile keeps showing "Waiting" instead of the countdown.
36
- multiServiceAccessory.startPollingState(pollSeconds, this.getRemainingDuration.bind(this), this.service, platform.Characteristic.RemainingDuration);
46
+ // Single consolidated poll: pollValveState pushes InUse and (only on the cycle-start transition)
47
+ // seeds SetDuration/RemainingDuration, then returns Active for startPollingState to push.
48
+ // RemainingDuration is deliberately NOT re-pushed every poll - doing so resets Apple Home's
49
+ // client-side countdown and leaves the tile stuck on "Waiting".
50
+ multiServiceAccessory.startPollingState(pollSeconds, this.pollValveState.bind(this), this.service, platform.Characteristic.Active);
37
51
  }
38
52
  // Optional Contact Sensor for Activity Notifications
39
53
  if (this.platform.config.ExposeContactSensorForDishwashers) {
@@ -51,6 +65,77 @@ class DishwasherService extends baseService_1.BaseService {
51
65
  async setActive(value) {
52
66
  this.log.debug(`DishwasherService setActive(${value}) ignored for ${this.name} (read-only)`);
53
67
  }
68
+ // No-op setter for SetDuration (read-only appliance; we can't change the wash cycle length)
69
+ async setDuration(value) {
70
+ this.log.debug(`DishwasherService setDuration(${value}) ignored for ${this.name} (read-only)`);
71
+ }
72
+ // Consolidated poll: reads status once, pushes InUse, seeds the countdown on the cycle-start
73
+ // transition only, and returns Active (pushed by startPollingState).
74
+ async pollValveState() {
75
+ var _a, _b;
76
+ const success = await this.getStatus();
77
+ if (!success) {
78
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
79
+ }
80
+ const operatingState = this.deviceStatus.status.dishwasherOperatingState;
81
+ if (!operatingState || !operatingState.machineState || !operatingState.dishwasherJobState) {
82
+ this.log.error(`Missing dishwasherOperatingState from ${this.name}`);
83
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
84
+ }
85
+ const machineState = operatingState.machineState.value;
86
+ const jobState = operatingState.dishwasherJobState.value;
87
+ this.log.debug(`Dishwasher machineState=${machineState} jobState=${jobState} for ${this.name}`);
88
+ // Refresh the cached completion time from the current status (or the samsungce fallback).
89
+ const completionTime = (_a = operatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
90
+ if (completionTime) {
91
+ this.cachedCompletionTime = completionTime;
92
+ }
93
+ else {
94
+ this.tryRemainingTimeFallback();
95
+ }
96
+ const active = this.machineStateToActive(machineState);
97
+ let inUse = this.jobStateToInUse(jobState);
98
+ // A stopped/off machine can't be "in use", even if the device leaves jobState stale at end of cycle.
99
+ if (active === this.platform.Characteristic.Active.INACTIVE) {
100
+ inUse = this.platform.Characteristic.InUse.NOT_IN_USE;
101
+ }
102
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
103
+ (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, inUse === this.platform.Characteristic.InUse.IN_USE
104
+ ? this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
105
+ : this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
106
+ this.applyInUseTransition(inUse);
107
+ return active;
108
+ }
109
+ // Seed the countdown ONCE per cycle, clear it on ON->OFF. While running, only (re)seeds if it
110
+ // hasn't been seeded yet - e.g. when completionTime becomes available a poll after the cycle started.
111
+ applyInUseTransition(inUse) {
112
+ const IN_USE = this.platform.Characteristic.InUse.IN_USE;
113
+ const wasInUse = this.lastInUse === IN_USE;
114
+ const nowInUse = inUse === IN_USE;
115
+ if (nowInUse && (!wasInUse || !this.remainingSeeded)) {
116
+ this.seedRemainingDuration();
117
+ }
118
+ else if (!nowInUse && wasInUse) {
119
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
120
+ this.remainingSeeded = false;
121
+ this.log.debug(`Dishwasher cycle ended for ${this.name}: RemainingDuration 0`);
122
+ }
123
+ this.lastInUse = inUse;
124
+ }
125
+ // Pushes SetDuration/RemainingDuration once. If completionTime isn't available yet (seconds == 0)
126
+ // it leaves remainingSeeded false so a later poll/event retries the seed.
127
+ seedRemainingDuration() {
128
+ const secs = this.calculateRemainingSeconds();
129
+ if (secs > 0) {
130
+ this.service.updateCharacteristic(this.platform.Characteristic.SetDuration, secs);
131
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
132
+ this.remainingSeeded = true;
133
+ this.log.debug(`Dishwasher countdown seeded for ${this.name}: ${secs}s`);
134
+ }
135
+ else {
136
+ this.log.debug(`Dishwasher in use but no completionTime yet for ${this.name}; will retry`);
137
+ }
138
+ }
54
139
  async getActive() {
55
140
  return new Promise((resolve, reject) => {
56
141
  this.getStatus().then(success => {
@@ -107,33 +192,31 @@ class DishwasherService extends baseService_1.BaseService {
107
192
  });
108
193
  });
109
194
  }
195
+ // onGet for RemainingDuration / SetDuration. Serves Home app re-reads (e.g. when the app is
196
+ // reopened) by computing the live remaining seconds from completionTime; it does not push.
110
197
  async getRemainingDuration() {
111
- return new Promise((resolve, reject) => {
198
+ return new Promise((resolve) => {
112
199
  this.getStatus().then(success => {
113
200
  var _a;
114
201
  if (!success) {
115
- reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
202
+ resolve(this.calculateRemainingSeconds());
116
203
  return;
117
204
  }
118
205
  try {
119
- // completionTime is an attribute of dishwasherOperatingState, not a separate capability
120
206
  const completionTime = (_a = this.deviceStatus.status.dishwasherOperatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
121
207
  if (completionTime) {
122
208
  this.cachedCompletionTime = completionTime;
123
- this.startCountdownTimer();
124
209
  }
125
210
  else {
126
- // Fallback: use samsungce.dishwasherOperatingState.remainingTime (integer minutes)
127
211
  this.tryRemainingTimeFallback();
128
212
  }
129
- const remainingSeconds = this.calculateRemainingSeconds();
130
- this.log.debug(`Dishwasher RemainingDuration for ${this.name}: ${remainingSeconds}s`);
131
- resolve(remainingSeconds);
132
213
  }
133
214
  catch (error) {
134
215
  this.log.debug(`No completionTime status available for ${this.name}`);
135
- resolve(0);
136
216
  }
217
+ const remainingSeconds = this.calculateRemainingSeconds();
218
+ this.log.debug(`Dishwasher RemainingDuration for ${this.name}: ${remainingSeconds}s`);
219
+ resolve(remainingSeconds);
137
220
  });
138
221
  });
139
222
  }
@@ -173,10 +256,9 @@ class DishwasherService extends baseService_1.BaseService {
173
256
  try {
174
257
  const remainingMin = (_b = (_a = this.deviceStatus.status['samsungce.dishwasherOperatingState']) === null || _a === void 0 ? void 0 : _a.remainingTime) === null || _b === void 0 ? void 0 : _b.value;
175
258
  if (typeof remainingMin === 'number' && remainingMin > 0) {
176
- // Convert relative minutes to an absolute completion timestamp for the countdown timer
259
+ // Convert relative minutes to an absolute completion timestamp for the countdown.
177
260
  this.cachedCompletionTime = new Date(Date.now() + remainingMin * 60 * 1000).toISOString();
178
261
  this.log.debug(`Dishwasher remainingTime fallback for ${this.name}: ${remainingMin} min`);
179
- this.startCountdownTimer();
180
262
  }
181
263
  }
182
264
  catch (_c) {
@@ -195,26 +277,6 @@ class DishwasherService extends baseService_1.BaseService {
195
277
  const remaining = Math.max(0, Math.floor((parsed - Date.now()) / 1000));
196
278
  return Math.min(remaining, 14400);
197
279
  }
198
- startCountdownTimer() {
199
- this.stopCountdownTimer();
200
- const remaining = this.calculateRemainingSeconds();
201
- if (remaining <= 0) {
202
- return;
203
- }
204
- this.countdownTimer = setInterval(() => {
205
- const secs = this.calculateRemainingSeconds();
206
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
207
- if (secs <= 0) {
208
- this.stopCountdownTimer();
209
- }
210
- }, 60 * 1000);
211
- }
212
- stopCountdownTimer() {
213
- if (this.countdownTimer) {
214
- clearInterval(this.countdownTimer);
215
- this.countdownTimer = null;
216
- }
217
- }
218
280
  processEvent(event) {
219
281
  var _a, _b;
220
282
  if (event.capability === 'dishwasherOperatingState') {
@@ -222,26 +284,33 @@ class DishwasherService extends baseService_1.BaseService {
222
284
  this.log.debug(`Event updating dishwasher machineState for ${this.name} to ${event.value}`);
223
285
  const active = this.machineStateToActive(event.value);
224
286
  this.service.updateCharacteristic(this.platform.Characteristic.Active, active);
225
- // If machine stopped, clear timer and set remaining to 0
287
+ // If machine stopped, clear the cached completion time and set remaining to 0.
226
288
  if (event.value === 'stop') {
227
289
  this.cachedCompletionTime = null;
228
- this.stopCountdownTimer();
290
+ this.lastInUse = this.platform.Characteristic.InUse.NOT_IN_USE;
291
+ this.remainingSeeded = false;
229
292
  this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
230
293
  (_a = this.contactSensorService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
231
294
  }
232
295
  }
233
296
  else if (event.attribute === 'dishwasherJobState') {
234
297
  this.log.debug(`Event updating dishwasher jobState for ${this.name} to ${event.value}`);
235
- this.service.updateCharacteristic(this.platform.Characteristic.InUse, this.jobStateToInUse(event.value));
298
+ const inUse = this.jobStateToInUse(event.value);
299
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
236
300
  (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.jobStateToContactSensor(event.value));
301
+ // Seed the countdown once on the cycle-start transition.
302
+ this.applyInUseTransition(inUse);
237
303
  }
238
304
  else if (event.attribute === 'completionTime') {
239
305
  // completionTime is an attribute of dishwasherOperatingState
240
306
  this.log.debug(`Event updating dishwasher completionTime for ${this.name} to ${event.value}`);
241
307
  this.cachedCompletionTime = event.value;
242
- const remaining = this.calculateRemainingSeconds();
243
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, remaining);
244
- this.startCountdownTimer();
308
+ // Refresh RemainingDuration when a cycle is running (real change / late-arriving completionTime).
309
+ if (this.lastInUse === this.platform.Characteristic.InUse.IN_USE) {
310
+ const secs = this.calculateRemainingSeconds();
311
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
312
+ this.remainingSeeded = secs > 0;
313
+ }
245
314
  }
246
315
  }
247
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dishwasherService.js","sourceRoot":"","sources":["../../src/services/dishwasherService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dishwasherService.js","sourceRoot":"","sources":["../../src/services/dishwasherService.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,15 @@ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
5
  import { ShortEvent } from '../webhook/subscriptionHandler';
6
6
  export declare class DryerService extends BaseService {
7
7
  private cachedCompletionTime;
8
- private countdownTimer;
8
+ private lastInUse;
9
+ private remainingSeeded;
9
10
  private contactSensorService;
10
11
  constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
11
12
  setActive(value: CharacteristicValue): Promise<void>;
13
+ setDuration(value: CharacteristicValue): Promise<void>;
14
+ pollValveState(): Promise<CharacteristicValue>;
15
+ private applyInUseTransition;
16
+ private seedRemainingDuration;
12
17
  getActive(): Promise<CharacteristicValue>;
13
18
  getInUse(): Promise<CharacteristicValue>;
14
19
  getContactSensorState(): Promise<CharacteristicValue>;
@@ -18,8 +23,6 @@ export declare class DryerService extends BaseService {
18
23
  private jobStateToContactSensor;
19
24
  private tryRemainingTimeFallback;
20
25
  private calculateRemainingSeconds;
21
- private startCountdownTimer;
22
- private stopCountdownTimer;
23
26
  processEvent(event: ShortEvent): void;
24
27
  }
25
28
  //# sourceMappingURL=dryerService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dryerService.d.ts","sourceRoot":"","sources":["../../src/services/dryerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,YAAa,SAAQ,WAAW;IAE3C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAsDtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAIpC,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA0B1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,kBAAkB;IAOnB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAkC7C"}
1
+ {"version":3,"file":"dryerService.d.ts","sourceRoot":"","sources":["../../src/services/dryerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,YAAa,SAAQ,WAAW;IAE3C,OAAO,CAAC,oBAAoB,CAAuB;IAEnD,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAuEtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAKpC,WAAW,CAAC,KAAK,EAAE,mBAAmB;IAMtC,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6CpD,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,qBAAqB;IAYvB,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwB1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,yBAAyB;IAa1B,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAyC7C"}
@@ -6,12 +6,17 @@ class DryerService extends baseService_1.BaseService {
6
6
  constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
7
  super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
8
  this.cachedCompletionTime = null;
9
- this.countdownTimer = null;
9
+ // Tracks the last InUse value so we only seed the countdown on the OFF->ON (cycle-start) transition.
10
+ this.lastInUse = null;
11
+ // Whether a non-zero RemainingDuration has been seeded for the current cycle (seed-once guard).
12
+ this.remainingSeeded = false;
10
13
  this.setServiceType(platform.Service.Valve);
11
14
  this.log.debug(`Adding DryerService to ${this.name}`);
12
15
  // ValveType: GENERIC_VALVE so Apple Home shows it as a generic valve with countdown
13
16
  this.service.getCharacteristic(platform.Characteristic.ValveType)
14
17
  .updateValue(platform.Characteristic.ValveType.GENERIC_VALVE);
18
+ // IsConfigured: working valve/irrigation plugins set this; unconfigured valves don't render reliably
19
+ this.service.setCharacteristic(platform.Characteristic.IsConfigured, platform.Characteristic.IsConfigured.CONFIGURED);
15
20
  // Active: machine is running or paused
16
21
  this.service.getCharacteristic(platform.Characteristic.Active)
17
22
  .onGet(this.getActive.bind(this))
@@ -19,18 +24,30 @@ class DryerService extends baseService_1.BaseService {
19
24
  // InUse: dryer job is actively working (drying/cooling/etc)
20
25
  this.service.getCharacteristic(platform.Characteristic.InUse)
21
26
  .onGet(this.getInUse.bind(this));
22
- // RemainingDuration: Apple Home auto-decrements the countdown display for Valve services
27
+ // SetDuration: read-only for an appliance, but Apple Home's countdown UI expects the
28
+ // SetDuration/RemainingDuration pair. onSet is a no-op (we can't change the dry cycle).
29
+ this.service.getCharacteristic(platform.Characteristic.SetDuration)
30
+ .setProps({ maxValue: 14400 })
31
+ .onGet(this.getRemainingDuration.bind(this))
32
+ .onSet(this.setDuration.bind(this));
33
+ // RemainingDuration: seeded ONCE at cycle start; Apple Home then decrements it client-side.
23
34
  this.service.getCharacteristic(platform.Characteristic.RemainingDuration)
24
35
  .setProps({ maxValue: 14400 })
25
36
  .onGet(this.getRemainingDuration.bind(this));
37
+ // Seed initial values so a stale cached value isn't shown after a restart (matches reference plugins).
38
+ this.service.updateCharacteristic(platform.Characteristic.RemainingDuration, 0);
39
+ this.service.updateCharacteristic(platform.Characteristic.SetDuration, 0);
26
40
  // Poll using switch/light interval (appliances change state infrequently)
27
41
  let pollSeconds = 10;
28
42
  if (this.platform.config.PollSwitchesAndLightsSeconds !== undefined) {
29
43
  pollSeconds = this.platform.config.PollSwitchesAndLightsSeconds;
30
44
  }
31
45
  if (pollSeconds > 0) {
32
- multiServiceAccessory.startPollingState(pollSeconds, this.getActive.bind(this), this.service, platform.Characteristic.Active);
33
- multiServiceAccessory.startPollingState(pollSeconds, this.getInUse.bind(this), this.service, platform.Characteristic.InUse);
46
+ // Single consolidated poll: pollValveState pushes InUse and (only on the cycle-start transition)
47
+ // seeds SetDuration/RemainingDuration, then returns Active for startPollingState to push.
48
+ // RemainingDuration is deliberately NOT re-pushed every poll - doing so resets Apple Home's
49
+ // client-side countdown and leaves the tile stuck on "Waiting".
50
+ multiServiceAccessory.startPollingState(pollSeconds, this.pollValveState.bind(this), this.service, platform.Characteristic.Active);
34
51
  }
35
52
  // Optional Contact Sensor for Activity Notifications
36
53
  if (this.platform.config.ExposeContactSensorForDryers) {
@@ -48,6 +65,77 @@ class DryerService extends baseService_1.BaseService {
48
65
  async setActive(value) {
49
66
  this.log.debug(`DryerService setActive(${value}) ignored for ${this.name} (read-only)`);
50
67
  }
68
+ // No-op setter for SetDuration (read-only appliance; we can't change the dry cycle length)
69
+ async setDuration(value) {
70
+ this.log.debug(`DryerService setDuration(${value}) ignored for ${this.name} (read-only)`);
71
+ }
72
+ // Consolidated poll: reads status once, pushes InUse, seeds the countdown on the cycle-start
73
+ // transition only, and returns Active (pushed by startPollingState).
74
+ async pollValveState() {
75
+ var _a, _b;
76
+ const success = await this.getStatus();
77
+ if (!success) {
78
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
79
+ }
80
+ const operatingState = this.deviceStatus.status.dryerOperatingState;
81
+ if (!operatingState || !operatingState.machineState || !operatingState.dryerJobState) {
82
+ this.log.error(`Missing dryerOperatingState from ${this.name}`);
83
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
84
+ }
85
+ const machineState = operatingState.machineState.value;
86
+ const jobState = operatingState.dryerJobState.value;
87
+ this.log.debug(`Dryer machineState=${machineState} jobState=${jobState} for ${this.name}`);
88
+ // Refresh the cached completion time from the current status (or the samsungce fallback).
89
+ const completionTime = (_a = operatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
90
+ if (completionTime) {
91
+ this.cachedCompletionTime = completionTime;
92
+ }
93
+ else {
94
+ this.tryRemainingTimeFallback();
95
+ }
96
+ const active = this.machineStateToActive(machineState);
97
+ let inUse = this.jobStateToInUse(jobState);
98
+ // A stopped/off machine can't be "in use", even if the device leaves jobState stale at end of cycle.
99
+ if (active === this.platform.Characteristic.Active.INACTIVE) {
100
+ inUse = this.platform.Characteristic.InUse.NOT_IN_USE;
101
+ }
102
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
103
+ (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, inUse === this.platform.Characteristic.InUse.IN_USE
104
+ ? this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
105
+ : this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
106
+ this.applyInUseTransition(inUse);
107
+ return active;
108
+ }
109
+ // Seed the countdown ONCE per cycle, clear it on ON->OFF. While running, only (re)seeds if it
110
+ // hasn't been seeded yet - e.g. when completionTime becomes available a poll after the cycle started.
111
+ applyInUseTransition(inUse) {
112
+ const IN_USE = this.platform.Characteristic.InUse.IN_USE;
113
+ const wasInUse = this.lastInUse === IN_USE;
114
+ const nowInUse = inUse === IN_USE;
115
+ if (nowInUse && (!wasInUse || !this.remainingSeeded)) {
116
+ this.seedRemainingDuration();
117
+ }
118
+ else if (!nowInUse && wasInUse) {
119
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
120
+ this.remainingSeeded = false;
121
+ this.log.debug(`Dryer cycle ended for ${this.name}: RemainingDuration 0`);
122
+ }
123
+ this.lastInUse = inUse;
124
+ }
125
+ // Pushes SetDuration/RemainingDuration once. If completionTime isn't available yet (seconds == 0)
126
+ // it leaves remainingSeeded false so a later poll/event retries the seed.
127
+ seedRemainingDuration() {
128
+ const secs = this.calculateRemainingSeconds();
129
+ if (secs > 0) {
130
+ this.service.updateCharacteristic(this.platform.Characteristic.SetDuration, secs);
131
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
132
+ this.remainingSeeded = true;
133
+ this.log.debug(`Dryer countdown seeded for ${this.name}: ${secs}s`);
134
+ }
135
+ else {
136
+ this.log.debug(`Dryer in use but no completionTime yet for ${this.name}; will retry`);
137
+ }
138
+ }
51
139
  async getActive() {
52
140
  return new Promise((resolve, reject) => {
53
141
  this.getStatus().then(success => {
@@ -104,31 +192,31 @@ class DryerService extends baseService_1.BaseService {
104
192
  });
105
193
  });
106
194
  }
195
+ // onGet for RemainingDuration / SetDuration. Serves Home app re-reads (e.g. when the app is
196
+ // reopened) by computing the live remaining seconds from completionTime; it does not push.
107
197
  async getRemainingDuration() {
108
- return new Promise((resolve, reject) => {
198
+ return new Promise((resolve) => {
109
199
  this.getStatus().then(success => {
110
200
  var _a;
111
201
  if (!success) {
112
- reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
202
+ resolve(this.calculateRemainingSeconds());
113
203
  return;
114
204
  }
115
205
  try {
116
- // completionTime is an attribute of dryerOperatingState, not a separate capability
117
206
  const completionTime = (_a = this.deviceStatus.status.dryerOperatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
118
207
  if (completionTime) {
119
208
  this.cachedCompletionTime = completionTime;
120
- this.startCountdownTimer();
121
209
  }
122
210
  else {
123
- // Fallback: use samsungce.dryerOperatingState.remainingTime (integer minutes)
124
211
  this.tryRemainingTimeFallback();
125
212
  }
126
- resolve(this.calculateRemainingSeconds());
127
213
  }
128
214
  catch (error) {
129
215
  this.log.debug(`No completionTime status available for ${this.name}`);
130
- resolve(0);
131
216
  }
217
+ const remainingSeconds = this.calculateRemainingSeconds();
218
+ this.log.debug(`Dryer RemainingDuration for ${this.name}: ${remainingSeconds}s`);
219
+ resolve(remainingSeconds);
132
220
  });
133
221
  });
134
222
  }
@@ -168,10 +256,9 @@ class DryerService extends baseService_1.BaseService {
168
256
  try {
169
257
  const remainingMin = (_b = (_a = this.deviceStatus.status['samsungce.dryerOperatingState']) === null || _a === void 0 ? void 0 : _a.remainingTime) === null || _b === void 0 ? void 0 : _b.value;
170
258
  if (typeof remainingMin === 'number' && remainingMin > 0) {
171
- // Convert relative minutes to an absolute completion timestamp for the countdown timer
259
+ // Convert relative minutes to an absolute completion timestamp for the countdown.
172
260
  this.cachedCompletionTime = new Date(Date.now() + remainingMin * 60 * 1000).toISOString();
173
261
  this.log.debug(`Dryer remainingTime fallback for ${this.name}: ${remainingMin} min`);
174
- this.startCountdownTimer();
175
262
  }
176
263
  }
177
264
  catch (_c) {
@@ -190,26 +277,6 @@ class DryerService extends baseService_1.BaseService {
190
277
  const remaining = Math.max(0, Math.floor((parsed - Date.now()) / 1000));
191
278
  return Math.min(remaining, 14400);
192
279
  }
193
- startCountdownTimer() {
194
- this.stopCountdownTimer();
195
- const remaining = this.calculateRemainingSeconds();
196
- if (remaining <= 0) {
197
- return;
198
- }
199
- this.countdownTimer = setInterval(() => {
200
- const secs = this.calculateRemainingSeconds();
201
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
202
- if (secs <= 0) {
203
- this.stopCountdownTimer();
204
- }
205
- }, 60 * 1000);
206
- }
207
- stopCountdownTimer() {
208
- if (this.countdownTimer) {
209
- clearInterval(this.countdownTimer);
210
- this.countdownTimer = null;
211
- }
212
- }
213
280
  processEvent(event) {
214
281
  var _a, _b;
215
282
  if (event.capability === 'dryerOperatingState') {
@@ -217,26 +284,33 @@ class DryerService extends baseService_1.BaseService {
217
284
  this.log.debug(`Event updating dryer machineState for ${this.name} to ${event.value}`);
218
285
  const active = this.machineStateToActive(event.value);
219
286
  this.service.updateCharacteristic(this.platform.Characteristic.Active, active);
220
- // If machine stopped, clear timer and set remaining to 0
287
+ // If machine stopped, clear the cached completion time and set remaining to 0.
221
288
  if (event.value === 'stop') {
222
289
  this.cachedCompletionTime = null;
223
- this.stopCountdownTimer();
290
+ this.lastInUse = this.platform.Characteristic.InUse.NOT_IN_USE;
291
+ this.remainingSeeded = false;
224
292
  this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
225
293
  (_a = this.contactSensorService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
226
294
  }
227
295
  }
228
296
  else if (event.attribute === 'dryerJobState') {
229
297
  this.log.debug(`Event updating dryer jobState for ${this.name} to ${event.value}`);
230
- this.service.updateCharacteristic(this.platform.Characteristic.InUse, this.jobStateToInUse(event.value));
298
+ const inUse = this.jobStateToInUse(event.value);
299
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
231
300
  (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.jobStateToContactSensor(event.value));
301
+ // Seed the countdown once on the cycle-start transition.
302
+ this.applyInUseTransition(inUse);
232
303
  }
233
304
  else if (event.attribute === 'completionTime') {
234
305
  // completionTime is an attribute of dryerOperatingState
235
306
  this.log.debug(`Event updating dryer completionTime for ${this.name} to ${event.value}`);
236
307
  this.cachedCompletionTime = event.value;
237
- const remaining = this.calculateRemainingSeconds();
238
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, remaining);
239
- this.startCountdownTimer();
308
+ // Refresh RemainingDuration when a cycle is running (real change / late-arriving completionTime).
309
+ if (this.lastInUse === this.platform.Characteristic.InUse.IN_USE) {
310
+ const secs = this.calculateRemainingSeconds();
311
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
312
+ this.remainingSeeded = secs > 0;
313
+ }
240
314
  }
241
315
  }
242
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dryerService.js","sourceRoot":"","sources":["../../src/services/dryerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dryerService.js","sourceRoot":"","sources":["../../src/services/dryerService.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,15 @@ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
5
  import { ShortEvent } from '../webhook/subscriptionHandler';
6
6
  export declare class WasherService extends BaseService {
7
7
  private cachedCompletionTime;
8
- private countdownTimer;
8
+ private lastInUse;
9
+ private remainingSeeded;
9
10
  private contactSensorService;
10
11
  constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
11
12
  setActive(value: CharacteristicValue): Promise<void>;
13
+ setDuration(value: CharacteristicValue): Promise<void>;
14
+ pollValveState(): Promise<CharacteristicValue>;
15
+ private applyInUseTransition;
16
+ private seedRemainingDuration;
12
17
  getActive(): Promise<CharacteristicValue>;
13
18
  getInUse(): Promise<CharacteristicValue>;
14
19
  getContactSensorState(): Promise<CharacteristicValue>;
@@ -18,8 +23,6 @@ export declare class WasherService extends BaseService {
18
23
  private jobStateToContactSensor;
19
24
  private tryRemainingTimeFallback;
20
25
  private calculateRemainingSeconds;
21
- private startCountdownTimer;
22
- private stopCountdownTimer;
23
26
  processEvent(event: ShortEvent): void;
24
27
  }
25
28
  //# sourceMappingURL=washerService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"washerService.d.ts","sourceRoot":"","sources":["../../src/services/washerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,aAAc,SAAQ,WAAW;IAE5C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IA0DtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAIpC,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA4B1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,kBAAkB;IAOnB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAkC7C"}
1
+ {"version":3,"file":"washerService.d.ts","sourceRoot":"","sources":["../../src/services/washerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,aAAc,SAAQ,WAAW;IAE5C,OAAO,CAAC,oBAAoB,CAAuB;IAEnD,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAsB;gBAEtC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAuEtB,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAKpC,WAAW,CAAC,KAAK,EAAE,mBAAmB;IAMtC,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6CpD,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,qBAAqB;IAYvB,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBxC,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoBrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwB1D,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,yBAAyB;IAa1B,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAyC7C"}
@@ -6,12 +6,17 @@ class WasherService extends baseService_1.BaseService {
6
6
  constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
7
  super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
8
  this.cachedCompletionTime = null;
9
- this.countdownTimer = null;
9
+ // Tracks the last InUse value so we only seed the countdown on the OFF->ON (cycle-start) transition.
10
+ this.lastInUse = null;
11
+ // Whether a non-zero RemainingDuration has been seeded for the current cycle (seed-once guard).
12
+ this.remainingSeeded = false;
10
13
  this.setServiceType(platform.Service.Valve);
11
14
  this.log.debug(`Adding WasherService to ${this.name}`);
12
15
  // ValveType: GENERIC_VALVE so Apple Home shows it as a generic valve with countdown
13
16
  this.service.getCharacteristic(platform.Characteristic.ValveType)
14
17
  .updateValue(platform.Characteristic.ValveType.GENERIC_VALVE);
18
+ // IsConfigured: working valve/irrigation plugins set this; unconfigured valves don't render reliably
19
+ this.service.setCharacteristic(platform.Characteristic.IsConfigured, platform.Characteristic.IsConfigured.CONFIGURED);
15
20
  // Active: machine is running or paused
16
21
  this.service.getCharacteristic(platform.Characteristic.Active)
17
22
  .onGet(this.getActive.bind(this))
@@ -19,21 +24,30 @@ class WasherService extends baseService_1.BaseService {
19
24
  // InUse: washer job is actively working (wash/rinse/spin)
20
25
  this.service.getCharacteristic(platform.Characteristic.InUse)
21
26
  .onGet(this.getInUse.bind(this));
22
- // RemainingDuration: Apple Home auto-decrements the countdown display for Valve services
27
+ // SetDuration: read-only for an appliance, but Apple Home's countdown UI expects the
28
+ // SetDuration/RemainingDuration pair. onSet is a no-op (we can't change the wash cycle).
29
+ this.service.getCharacteristic(platform.Characteristic.SetDuration)
30
+ .setProps({ maxValue: 14400 })
31
+ .onGet(this.getRemainingDuration.bind(this))
32
+ .onSet(this.setDuration.bind(this));
33
+ // RemainingDuration: seeded ONCE at cycle start; Apple Home then decrements it client-side.
23
34
  this.service.getCharacteristic(platform.Characteristic.RemainingDuration)
24
35
  .setProps({ maxValue: 14400 })
25
36
  .onGet(this.getRemainingDuration.bind(this));
37
+ // Seed initial values so a stale cached value isn't shown after a restart (matches reference plugins).
38
+ this.service.updateCharacteristic(platform.Characteristic.RemainingDuration, 0);
39
+ this.service.updateCharacteristic(platform.Characteristic.SetDuration, 0);
26
40
  // Poll using switch/light interval (appliances change state infrequently)
27
41
  let pollSeconds = 10;
28
42
  if (this.platform.config.PollSwitchesAndLightsSeconds !== undefined) {
29
43
  pollSeconds = this.platform.config.PollSwitchesAndLightsSeconds;
30
44
  }
31
45
  if (pollSeconds > 0) {
32
- multiServiceAccessory.startPollingState(pollSeconds, this.getActive.bind(this), this.service, platform.Characteristic.Active);
33
- multiServiceAccessory.startPollingState(pollSeconds, this.getInUse.bind(this), this.service, platform.Characteristic.InUse);
34
- // RemainingDuration must be pushed proactively too: in polling mode (no webhooks) processEvent
35
- // never fires, so without this the Apple Home tile keeps showing "Waiting" instead of the countdown.
36
- multiServiceAccessory.startPollingState(pollSeconds, this.getRemainingDuration.bind(this), this.service, platform.Characteristic.RemainingDuration);
46
+ // Single consolidated poll: pollValveState pushes InUse and (only on the cycle-start transition)
47
+ // seeds SetDuration/RemainingDuration, then returns Active for startPollingState to push.
48
+ // RemainingDuration is deliberately NOT re-pushed every poll - doing so resets Apple Home's
49
+ // client-side countdown and leaves the tile stuck on "Waiting".
50
+ multiServiceAccessory.startPollingState(pollSeconds, this.pollValveState.bind(this), this.service, platform.Characteristic.Active);
37
51
  }
38
52
  // Optional Contact Sensor for Activity Notifications
39
53
  if (this.platform.config.ExposeContactSensorForWashers) {
@@ -51,6 +65,77 @@ class WasherService extends baseService_1.BaseService {
51
65
  async setActive(value) {
52
66
  this.log.debug(`WasherService setActive(${value}) ignored for ${this.name} (read-only)`);
53
67
  }
68
+ // No-op setter for SetDuration (read-only appliance; we can't change the wash cycle length)
69
+ async setDuration(value) {
70
+ this.log.debug(`WasherService setDuration(${value}) ignored for ${this.name} (read-only)`);
71
+ }
72
+ // Consolidated poll: reads status once, pushes InUse, seeds the countdown on the cycle-start
73
+ // transition only, and returns Active (pushed by startPollingState).
74
+ async pollValveState() {
75
+ var _a, _b;
76
+ const success = await this.getStatus();
77
+ if (!success) {
78
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
79
+ }
80
+ const operatingState = this.deviceStatus.status.washerOperatingState;
81
+ if (!operatingState || !operatingState.machineState || !operatingState.washerJobState) {
82
+ this.log.error(`Missing washerOperatingState from ${this.name}`);
83
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
84
+ }
85
+ const machineState = operatingState.machineState.value;
86
+ const jobState = operatingState.washerJobState.value;
87
+ this.log.debug(`Washer machineState=${machineState} jobState=${jobState} for ${this.name}`);
88
+ // Refresh the cached completion time from the current status (or the samsungce fallback).
89
+ const completionTime = (_a = operatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
90
+ if (completionTime) {
91
+ this.cachedCompletionTime = completionTime;
92
+ }
93
+ else {
94
+ this.tryRemainingTimeFallback();
95
+ }
96
+ const active = this.machineStateToActive(machineState);
97
+ let inUse = this.jobStateToInUse(jobState);
98
+ // A stopped/off machine can't be "in use", even if the device leaves jobState stale at end of cycle.
99
+ if (active === this.platform.Characteristic.Active.INACTIVE) {
100
+ inUse = this.platform.Characteristic.InUse.NOT_IN_USE;
101
+ }
102
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
103
+ (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, inUse === this.platform.Characteristic.InUse.IN_USE
104
+ ? this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
105
+ : this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
106
+ this.applyInUseTransition(inUse);
107
+ return active;
108
+ }
109
+ // Seed the countdown ONCE per cycle, clear it on ON->OFF. While running, only (re)seeds if it
110
+ // hasn't been seeded yet - e.g. when completionTime becomes available a poll after the cycle started.
111
+ applyInUseTransition(inUse) {
112
+ const IN_USE = this.platform.Characteristic.InUse.IN_USE;
113
+ const wasInUse = this.lastInUse === IN_USE;
114
+ const nowInUse = inUse === IN_USE;
115
+ if (nowInUse && (!wasInUse || !this.remainingSeeded)) {
116
+ this.seedRemainingDuration();
117
+ }
118
+ else if (!nowInUse && wasInUse) {
119
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
120
+ this.remainingSeeded = false;
121
+ this.log.debug(`Washer cycle ended for ${this.name}: RemainingDuration 0`);
122
+ }
123
+ this.lastInUse = inUse;
124
+ }
125
+ // Pushes SetDuration/RemainingDuration once. If completionTime isn't available yet (seconds == 0)
126
+ // it leaves remainingSeeded false so a later poll/event retries the seed.
127
+ seedRemainingDuration() {
128
+ const secs = this.calculateRemainingSeconds();
129
+ if (secs > 0) {
130
+ this.service.updateCharacteristic(this.platform.Characteristic.SetDuration, secs);
131
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
132
+ this.remainingSeeded = true;
133
+ this.log.debug(`Washer countdown seeded for ${this.name}: ${secs}s`);
134
+ }
135
+ else {
136
+ this.log.debug(`Washer in use but no completionTime yet for ${this.name}; will retry`);
137
+ }
138
+ }
54
139
  async getActive() {
55
140
  return new Promise((resolve, reject) => {
56
141
  this.getStatus().then(success => {
@@ -107,33 +192,31 @@ class WasherService extends baseService_1.BaseService {
107
192
  });
108
193
  });
109
194
  }
195
+ // onGet for RemainingDuration / SetDuration. Serves Home app re-reads (e.g. when the app is
196
+ // reopened) by computing the live remaining seconds from completionTime; it does not push.
110
197
  async getRemainingDuration() {
111
- return new Promise((resolve, reject) => {
198
+ return new Promise((resolve) => {
112
199
  this.getStatus().then(success => {
113
200
  var _a;
114
201
  if (!success) {
115
- reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
202
+ resolve(this.calculateRemainingSeconds());
116
203
  return;
117
204
  }
118
205
  try {
119
- // completionTime is an attribute of washerOperatingState, not a separate capability
120
206
  const completionTime = (_a = this.deviceStatus.status.washerOperatingState.completionTime) === null || _a === void 0 ? void 0 : _a.value;
121
207
  if (completionTime) {
122
208
  this.cachedCompletionTime = completionTime;
123
- this.startCountdownTimer();
124
209
  }
125
210
  else {
126
- // Fallback: use samsungce.washerOperatingState.remainingTime (integer minutes)
127
211
  this.tryRemainingTimeFallback();
128
212
  }
129
- const remainingSeconds = this.calculateRemainingSeconds();
130
- this.log.debug(`Washer RemainingDuration for ${this.name}: ${remainingSeconds}s`);
131
- resolve(remainingSeconds);
132
213
  }
133
214
  catch (error) {
134
215
  this.log.debug(`No completionTime status available for ${this.name}`);
135
- resolve(0);
136
216
  }
217
+ const remainingSeconds = this.calculateRemainingSeconds();
218
+ this.log.debug(`Washer RemainingDuration for ${this.name}: ${remainingSeconds}s`);
219
+ resolve(remainingSeconds);
137
220
  });
138
221
  });
139
222
  }
@@ -170,10 +253,9 @@ class WasherService extends baseService_1.BaseService {
170
253
  try {
171
254
  const remainingMin = (_b = (_a = this.deviceStatus.status['samsungce.washerOperatingState']) === null || _a === void 0 ? void 0 : _a.remainingTime) === null || _b === void 0 ? void 0 : _b.value;
172
255
  if (typeof remainingMin === 'number' && remainingMin > 0) {
173
- // Convert relative minutes to an absolute completion timestamp for the countdown timer
256
+ // Convert relative minutes to an absolute completion timestamp for the countdown.
174
257
  this.cachedCompletionTime = new Date(Date.now() + remainingMin * 60 * 1000).toISOString();
175
258
  this.log.debug(`Washer remainingTime fallback for ${this.name}: ${remainingMin} min`);
176
- this.startCountdownTimer();
177
259
  }
178
260
  }
179
261
  catch (_c) {
@@ -192,26 +274,6 @@ class WasherService extends baseService_1.BaseService {
192
274
  const remaining = Math.max(0, Math.floor((parsed - Date.now()) / 1000));
193
275
  return Math.min(remaining, 14400);
194
276
  }
195
- startCountdownTimer() {
196
- this.stopCountdownTimer();
197
- const remaining = this.calculateRemainingSeconds();
198
- if (remaining <= 0) {
199
- return;
200
- }
201
- this.countdownTimer = setInterval(() => {
202
- const secs = this.calculateRemainingSeconds();
203
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
204
- if (secs <= 0) {
205
- this.stopCountdownTimer();
206
- }
207
- }, 60 * 1000);
208
- }
209
- stopCountdownTimer() {
210
- if (this.countdownTimer) {
211
- clearInterval(this.countdownTimer);
212
- this.countdownTimer = null;
213
- }
214
- }
215
277
  processEvent(event) {
216
278
  var _a, _b;
217
279
  if (event.capability === 'washerOperatingState') {
@@ -219,26 +281,33 @@ class WasherService extends baseService_1.BaseService {
219
281
  this.log.debug(`Event updating washer machineState for ${this.name} to ${event.value}`);
220
282
  const active = this.machineStateToActive(event.value);
221
283
  this.service.updateCharacteristic(this.platform.Characteristic.Active, active);
222
- // If machine stopped, clear timer and set remaining to 0
284
+ // If machine stopped, clear the cached completion time and set remaining to 0.
223
285
  if (event.value === 'stop') {
224
286
  this.cachedCompletionTime = null;
225
- this.stopCountdownTimer();
287
+ this.lastInUse = this.platform.Characteristic.InUse.NOT_IN_USE;
288
+ this.remainingSeeded = false;
226
289
  this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, 0);
227
290
  (_a = this.contactSensorService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED);
228
291
  }
229
292
  }
230
293
  else if (event.attribute === 'washerJobState') {
231
294
  this.log.debug(`Event updating washer jobState for ${this.name} to ${event.value}`);
232
- this.service.updateCharacteristic(this.platform.Characteristic.InUse, this.jobStateToInUse(event.value));
295
+ const inUse = this.jobStateToInUse(event.value);
296
+ this.service.updateCharacteristic(this.platform.Characteristic.InUse, inUse);
233
297
  (_b = this.contactSensorService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.ContactSensorState, this.jobStateToContactSensor(event.value));
298
+ // Seed the countdown once on the cycle-start transition.
299
+ this.applyInUseTransition(inUse);
234
300
  }
235
301
  else if (event.attribute === 'completionTime') {
236
302
  // completionTime is an attribute of washerOperatingState
237
303
  this.log.debug(`Event updating washer completionTime for ${this.name} to ${event.value}`);
238
304
  this.cachedCompletionTime = event.value;
239
- const remaining = this.calculateRemainingSeconds();
240
- this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, remaining);
241
- this.startCountdownTimer();
305
+ // Refresh RemainingDuration when a cycle is running (real change / late-arriving completionTime).
306
+ if (this.lastInUse === this.platform.Characteristic.InUse.IN_USE) {
307
+ const secs = this.calculateRemainingSeconds();
308
+ this.service.updateCharacteristic(this.platform.Characteristic.RemainingDuration, secs);
309
+ this.remainingSeeded = secs > 0;
310
+ }
242
311
  }
243
312
  }
244
313
  }
@@ -1 +1 @@
1
- {"version":3,"file":"washerService.js","sourceRoot":"","sources":["../../src/services/washerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"washerService.js","sourceRoot":"","sources":["../../src/services/washerService.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "displayName": "Homebridge Smartthings oAuth Plugin",
4
4
  "name": "homebridge-smartthings-oauth",
5
- "version": "1.0.66-beta.6",
5
+ "version": "1.0.66",
6
6
  "description": "Connects SmartThings devices to Homebridge. Automatically discovers devices.",
7
7
  "license": "Apache-2.0",
8
8
  "repository": {