@marcel2215/homebridge-supla-plugin 2.1.19 → 2.1.22

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.
@@ -9,7 +9,6 @@ export declare class GateAccessory {
9
9
  private currentState;
10
10
  private targetState;
11
11
  private connected;
12
- private hasFault;
13
12
  private obstructionDetected;
14
13
  private isClosedSensorActive;
15
14
  private isPartialSensorActive;
@@ -22,6 +21,14 @@ export declare class GateAccessory {
22
21
  private readonly baseTopic;
23
22
  private reverseToggleTimer?;
24
23
  private readonly reverseToggleDelayMs;
24
+ private openArrivalDebounceTimer?;
25
+ private readonly openArrivalDebounceMs;
26
+ private lastCommandTarget?;
27
+ private lastCommandAt;
28
+ private readonly duplicateSetWindowMs;
29
+ private sawPartialMotionDuringPending;
30
+ private lastClosedReleaseAt;
31
+ private readonly externalDirectionHintWindowMs;
25
32
  constructor(platform: SuplaPlatform, accessory: PlatformAccessory, context: SuplaChannelContext);
26
33
  handleCurrentDoorStateGet(): Promise<CharacteristicValue>;
27
34
  handleTargetDoorStateGet(): Promise<CharacteristicValue>;
@@ -32,17 +39,30 @@ export declare class GateAccessory {
32
39
  private applyDoorState;
33
40
  private setCurrentState;
34
41
  private setTargetState;
35
- private maybeSetIdleOpenTarget;
36
42
  private isKnownNotClosed;
37
43
  private updateStatusFault;
38
44
  private clearFaults;
39
45
  private armTransitionTimer;
40
46
  private clearTransitionTimer;
41
47
  private clearReverseToggleTimer;
48
+ private clearOpenArrivalDebounceTimer;
42
49
  private touchTransitionTimer;
43
50
  private resolveMovingState;
44
51
  private getMotionTarget;
52
+ private isOpenArrivalSignal;
53
+ private shouldDebounceOpenArrival;
54
+ private scheduleOpenArrivalDebounce;
55
+ private resolveTerminalStateFromSensors;
56
+ private oppositeTarget;
57
+ private markCommand;
58
+ private setPendingTarget;
59
+ private isLikelyDuplicateSet;
45
60
  private publishGateAction;
46
61
  private scheduleReverseToggle;
62
+ private shouldScheduleReverseFollowUp;
63
+ private isOpenCloseExecuteActionPair;
64
+ private shouldPublishExecuteActionReverseFollowUp;
65
+ private resolveExternalMotionTarget;
66
+ private wasClosedReleasedRecently;
47
67
  }
48
68
  //# sourceMappingURL=GateAccessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GateAccessory.d.ts","sourceRoot":"","sources":["../../src/Accesories/GateAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,qBAAa,aAAa;IAoBtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IArB1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,WAAW,CAAuD;IAC1E,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;gBAG1B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,mBAAmB;IAwEzC,yBAAyB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIzD,wBAAwB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIxD,wBAAwB,CAAC,KAAK,EAAE,mBAAmB;IAiEnD,4BAA4B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIlE,OAAO,CAAC,uBAAuB;IAoF/B,OAAO,CAAC,UAAU;IAsClB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,qBAAqB;CAa9B"}
1
+ {"version":3,"file":"GateAccessory.d.ts","sourceRoot":"","sources":["../../src/Accesories/GateAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAQrE,qBAAa,aAAa;IA2BtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IA5B1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,WAAW,CAAuD;IAC1E,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,wBAAwB,CAAC,CAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAO;IAC7C,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAC5C,OAAO,CAAC,6BAA6B,CAAS;IAC9C,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAQ;gBAGnC,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,mBAAmB;IA4FzC,yBAAyB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIzD,wBAAwB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIxD,wBAAwB,CAAC,KAAK,EAAE,mBAAmB;IAyDnD,4BAA4B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIlE,OAAO,CAAC,uBAAuB;IAqE/B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,2BAA2B;IAyBnC,OAAO,CAAC,+BAA+B;IAiBvC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,yCAAyC;IAUjD,OAAO,CAAC,2BAA2B;IAsCnC,OAAO,CAAC,yBAAyB;CAMlC"}
@@ -9,7 +9,6 @@ class GateAccessory {
9
9
  this.currentState = this.platform.Characteristic.CurrentDoorState.CLOSED;
10
10
  this.targetState = this.platform.Characteristic.TargetDoorState.CLOSED;
11
11
  this.connected = true;
12
- this.hasFault = false;
13
12
  this.obstructionDetected = false;
14
13
  this.isClosedSensorActive = false;
15
14
  this.isPartialSensorActive = false;
@@ -17,6 +16,12 @@ class GateAccessory {
17
16
  this.hasPartialSensorState = false;
18
17
  this.transitionTimeoutMs = 60000;
19
18
  this.reverseToggleDelayMs = 1200;
19
+ this.openArrivalDebounceMs = 450;
20
+ this.lastCommandAt = 0;
21
+ this.duplicateSetWindowMs = 350;
22
+ this.sawPartialMotionDuringPending = false;
23
+ this.lastClosedReleaseAt = 0;
24
+ this.externalDirectionHintWindowMs = 2500;
20
25
  this.accessory.getService(this.platform.Service.AccessoryInformation)
21
26
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Supla')
22
27
  .setCharacteristic(this.platform.Characteristic.Model, 'GateController');
@@ -38,29 +43,50 @@ class GateAccessory {
38
43
  this.platform.registerOwnerCleanup(this.accessory.UUID, () => {
39
44
  this.clearTransitionTimer();
40
45
  this.clearReverseToggleTimer();
46
+ this.clearOpenArrivalDebounceTimer();
41
47
  });
42
48
  this.partialHiMode = this.platform.getGatePartialHiMode();
43
49
  this.baseTopic = this.platform.normalizeTopicBase(this.context.topic);
44
50
  this.platform.registerMqttHandler(`${this.baseTopic}/state/hi`, (message) => {
51
+ const previous = this.hasClosedSensorState ? this.isClosedSensorActive : undefined;
45
52
  const next = this.platform.parseBoolean(message.toString());
46
53
  const changed = !this.hasClosedSensorState || next !== this.isClosedSensorActive;
54
+ if (previous === true && next === false) {
55
+ this.lastClosedReleaseAt = Date.now();
56
+ }
57
+ else if (next) {
58
+ this.lastClosedReleaseAt = 0;
59
+ }
47
60
  this.isClosedSensorActive = next;
48
61
  this.hasClosedSensorState = true;
49
- this.updateStatesFromSensors(changed);
62
+ this.updateStatesFromSensors({
63
+ closedPrevious: changed ? previous : undefined,
64
+ });
50
65
  }, this.accessory.UUID);
51
66
  this.platform.registerMqttHandler(`${this.baseTopic}/state/partial_hi`, (message) => {
67
+ const previous = this.hasPartialSensorState ? this.isPartialSensorActive : undefined;
52
68
  const next = this.platform.parseBoolean(message.toString());
53
69
  const changed = !this.hasPartialSensorState || next !== this.isPartialSensorActive;
70
+ if (previous === true && next === false) {
71
+ this.lastClosedReleaseAt = 0;
72
+ }
54
73
  this.isPartialSensorActive = next;
55
74
  this.hasPartialSensorState = true;
56
- this.updateStatesFromSensors(changed);
75
+ if (this.pendingTarget !== undefined && this.isPartialSensorActive) {
76
+ this.sawPartialMotionDuringPending = true;
77
+ }
78
+ this.updateStatesFromSensors({
79
+ partialPrevious: changed ? previous : undefined,
80
+ });
57
81
  }, this.accessory.UUID);
58
82
  this.platform.registerMqttHandler(`${this.baseTopic}/state/connected`, (message) => {
59
83
  this.connected = this.platform.parseBoolean(message.toString());
60
84
  this.updateStatusFault();
61
85
  if (!this.connected) {
62
- this.pendingTarget = undefined;
86
+ this.setPendingTarget(undefined);
63
87
  this.clearTransitionTimer();
88
+ this.clearReverseToggleTimer();
89
+ this.clearOpenArrivalDebounceTimer();
64
90
  }
65
91
  }, this.accessory.UUID);
66
92
  this.updateStatusFault();
@@ -75,19 +101,13 @@ class GateAccessory {
75
101
  const requestedTarget = value;
76
102
  const mode = this.platform.getGateControlMode();
77
103
  const motionTarget = this.getMotionTarget();
78
- const isMoving = this.currentState === this.platform.Characteristic.CurrentDoorState.OPENING
79
- || this.currentState === this.platform.Characteristic.CurrentDoorState.CLOSING;
104
+ const isMoving = motionTarget !== undefined;
80
105
  let target = requestedTarget;
81
- if (!isMoving
82
- && requestedTarget === this.platform.Characteristic.TargetDoorState.OPEN
83
- && this.isKnownNotClosed()) {
84
- target = this.platform.Characteristic.TargetDoorState.CLOSED;
85
- }
86
- // HomeKit can resend the same target while moving; treat it as a reverse for toggle gates.
87
- if (mode === 'toggle' && isMoving && motionTarget !== undefined && requestedTarget === motionTarget) {
88
- target = requestedTarget === this.platform.Characteristic.TargetDoorState.OPEN
89
- ? this.platform.Characteristic.TargetDoorState.CLOSED
90
- : this.platform.Characteristic.TargetDoorState.OPEN;
106
+ if (isMoving && motionTarget !== undefined && requestedTarget === motionTarget) {
107
+ if (this.isLikelyDuplicateSet(requestedTarget)) {
108
+ return;
109
+ }
110
+ target = this.oppositeTarget(requestedTarget);
91
111
  }
92
112
  const previousTarget = this.targetState;
93
113
  this.setTargetState(target);
@@ -98,7 +118,7 @@ class GateAccessory {
98
118
  this.updateStatusFault();
99
119
  return;
100
120
  }
101
- if (mode === 'toggle' && this.isAtTarget(target)) {
121
+ if (!isMoving && this.isAtTarget(target)) {
102
122
  return;
103
123
  }
104
124
  if (this.pendingTarget === target) {
@@ -119,90 +139,70 @@ class GateAccessory {
119
139
  return;
120
140
  }
121
141
  const isReversing = motionTarget !== undefined && motionTarget !== target;
122
- this.publishGateAction(action, isReversing && mode === 'toggle' ? 'reverse' : undefined);
123
- if (mode === 'toggle' && isReversing) {
124
- this.scheduleReverseToggle(action, target);
142
+ this.publishGateAction(action, isReversing ? 'reverse' : undefined);
143
+ if (isReversing && this.shouldScheduleReverseFollowUp(mode)) {
144
+ this.scheduleReverseToggle(action, target, mode);
125
145
  }
126
146
  this.clearFaults();
127
- this.pendingTarget = target;
147
+ this.setPendingTarget(target);
148
+ this.markCommand(target);
128
149
  this.armTransitionTimer();
129
- const nextState = target === this.platform.Characteristic.TargetDoorState.OPEN
130
- ? this.platform.Characteristic.CurrentDoorState.OPENING
131
- : this.platform.Characteristic.CurrentDoorState.CLOSING;
132
- this.setCurrentState(nextState);
150
+ this.setCurrentState(this.resolveMovingState(target));
133
151
  }
134
152
  async handleObstructionDetectedGet() {
135
153
  return this.obstructionDetected;
136
154
  }
137
- updateStatesFromSensors(changed) {
155
+ updateStatesFromSensors(context) {
156
+ const changed = ((context.closedPrevious !== undefined && context.closedPrevious !== this.isClosedSensorActive)
157
+ || (context.partialPrevious !== undefined && context.partialPrevious !== this.isPartialSensorActive));
138
158
  this.clearFaults();
139
159
  if (changed) {
140
160
  this.touchTransitionTimer();
141
161
  }
142
162
  if (this.isClosedSensorActive) {
143
163
  if (this.pendingTarget === this.platform.Characteristic.TargetDoorState.OPEN) {
164
+ this.setTargetState(this.platform.Characteristic.TargetDoorState.OPEN);
144
165
  this.setCurrentState(this.platform.Characteristic.CurrentDoorState.OPENING);
145
166
  return;
146
167
  }
147
- this.pendingTarget = undefined;
168
+ this.setPendingTarget(undefined);
148
169
  this.clearTransitionTimer();
149
170
  this.clearReverseToggleTimer();
171
+ this.clearOpenArrivalDebounceTimer();
150
172
  this.applyDoorState(this.platform.Characteristic.CurrentDoorState.CLOSED, this.platform.Characteristic.TargetDoorState.CLOSED);
151
173
  return;
152
174
  }
153
- if (this.partialHiMode === 'moving') {
154
- if (this.isPartialSensorActive) {
155
- this.setCurrentState(this.resolveMovingState());
156
- this.maybeSetIdleOpenTarget();
157
- return;
158
- }
159
- this.setCurrentState(this.platform.Characteristic.CurrentDoorState.STOPPED);
160
- this.maybeSetIdleOpenTarget();
161
- return;
162
- }
163
- if (this.partialHiMode === 'open_endstop') {
164
- if (this.isPartialSensorActive) {
165
- this.pendingTarget = undefined;
166
- this.clearTransitionTimer();
167
- this.clearReverseToggleTimer();
168
- this.applyDoorState(this.platform.Characteristic.CurrentDoorState.OPEN, this.platform.Characteristic.TargetDoorState.OPEN);
169
- return;
170
- }
171
- if (this.pendingTarget !== undefined) {
172
- this.setCurrentState(this.resolveMovingState());
173
- return;
174
- }
175
- this.setCurrentState(this.platform.Characteristic.CurrentDoorState.STOPPED);
176
- this.maybeSetIdleOpenTarget();
175
+ if (this.pendingTarget === this.platform.Characteristic.TargetDoorState.OPEN
176
+ && this.shouldDebounceOpenArrival()) {
177
+ this.scheduleOpenArrivalDebounce();
177
178
  return;
178
179
  }
179
- if (this.partialHiMode === 'pedestrian_endstop') {
180
- if (this.isPartialSensorActive) {
181
- this.pendingTarget = undefined;
182
- this.clearTransitionTimer();
183
- this.clearReverseToggleTimer();
184
- this.setCurrentState(this.platform.Characteristic.CurrentDoorState.STOPPED);
185
- this.maybeSetIdleOpenTarget();
186
- return;
187
- }
188
- if (this.pendingTarget !== undefined) {
189
- this.setCurrentState(this.resolveMovingState());
190
- return;
191
- }
192
- this.pendingTarget = undefined;
180
+ if (this.pendingTarget === this.platform.Characteristic.TargetDoorState.OPEN
181
+ && this.isOpenArrivalSignal()) {
182
+ this.setPendingTarget(undefined);
193
183
  this.clearTransitionTimer();
194
184
  this.clearReverseToggleTimer();
185
+ this.clearOpenArrivalDebounceTimer();
195
186
  this.applyDoorState(this.platform.Characteristic.CurrentDoorState.OPEN, this.platform.Characteristic.TargetDoorState.OPEN);
196
187
  return;
197
188
  }
198
189
  if (this.pendingTarget !== undefined) {
199
- this.setCurrentState(this.resolveMovingState());
190
+ this.setTargetState(this.pendingTarget);
191
+ this.setCurrentState(this.resolveMovingState(this.pendingTarget));
192
+ return;
193
+ }
194
+ const inferredExternalMotionTarget = this.resolveExternalMotionTarget(context);
195
+ if (inferredExternalMotionTarget !== undefined) {
196
+ this.clearTransitionTimer();
197
+ this.clearOpenArrivalDebounceTimer();
198
+ this.setTargetState(inferredExternalMotionTarget);
199
+ this.setCurrentState(this.resolveMovingState(inferredExternalMotionTarget));
200
200
  return;
201
201
  }
202
202
  this.clearTransitionTimer();
203
203
  this.clearReverseToggleTimer();
204
- this.setCurrentState(this.platform.Characteristic.CurrentDoorState.STOPPED);
205
- this.maybeSetIdleOpenTarget();
204
+ this.clearOpenArrivalDebounceTimer();
205
+ this.applyDoorState(this.platform.Characteristic.CurrentDoorState.OPEN, this.platform.Characteristic.TargetDoorState.OPEN);
206
206
  }
207
207
  isAtTarget(target) {
208
208
  if (target === this.platform.Characteristic.TargetDoorState.CLOSED) {
@@ -212,32 +212,8 @@ class GateAccessory {
212
212
  return this.isClosedSensorActive;
213
213
  }
214
214
  if (target === this.platform.Characteristic.TargetDoorState.OPEN) {
215
- if (this.partialHiMode === 'moving') {
216
- return false;
217
- }
218
- if (this.partialHiMode === 'open_endstop') {
219
- if (!this.hasPartialSensorState) {
220
- return false;
221
- }
222
- return this.isPartialSensorActive;
223
- }
224
- if (this.partialHiMode === 'pedestrian_endstop') {
225
- if (!this.hasClosedSensorState && !this.hasPartialSensorState) {
226
- return false;
227
- }
228
- if (this.hasClosedSensorState && this.isClosedSensorActive) {
229
- return false;
230
- }
231
- if (this.hasPartialSensorState && this.isPartialSensorActive) {
232
- return false;
233
- }
234
- return true;
235
- }
236
- if (!this.hasClosedSensorState) {
237
- return false;
238
- }
239
- return this.currentState === this.platform.Characteristic.CurrentDoorState.OPEN
240
- && !this.isClosedSensorActive;
215
+ return this.isKnownNotClosed()
216
+ && this.currentState === this.platform.Characteristic.CurrentDoorState.OPEN;
241
217
  }
242
218
  return false;
243
219
  }
@@ -259,15 +235,6 @@ class GateAccessory {
259
235
  this.targetState = next;
260
236
  this.service.updateCharacteristic(this.platform.Characteristic.TargetDoorState, this.targetState);
261
237
  }
262
- maybeSetIdleOpenTarget() {
263
- if (this.pendingTarget !== undefined) {
264
- return;
265
- }
266
- if (!this.isKnownNotClosed()) {
267
- return;
268
- }
269
- this.setTargetState(this.platform.Characteristic.TargetDoorState.OPEN);
270
- }
271
238
  isKnownNotClosed() {
272
239
  if (this.hasClosedSensorState) {
273
240
  return !this.isClosedSensorActive;
@@ -275,41 +242,43 @@ class GateAccessory {
275
242
  if (this.hasPartialSensorState && this.isPartialSensorActive) {
276
243
  return true;
277
244
  }
278
- if (this.currentState === this.platform.Characteristic.CurrentDoorState.OPEN) {
279
- return true;
280
- }
281
- return this.currentState === this.platform.Characteristic.CurrentDoorState.STOPPED
282
- && this.targetState === this.platform.Characteristic.TargetDoorState.OPEN;
245
+ return this.currentState !== this.platform.Characteristic.CurrentDoorState.CLOSED;
283
246
  }
284
247
  updateStatusFault() {
285
- const fault = !this.connected || this.hasFault;
248
+ const fault = !this.connected;
286
249
  this.service.updateCharacteristic(this.platform.Characteristic.StatusFault, fault
287
250
  ? this.platform.Characteristic.StatusFault.GENERAL_FAULT
288
251
  : this.platform.Characteristic.StatusFault.NO_FAULT);
289
252
  }
290
253
  clearFaults() {
291
- if (this.hasFault) {
292
- this.hasFault = false;
293
- }
294
254
  if (this.obstructionDetected) {
295
255
  this.obstructionDetected = false;
296
256
  this.service.updateCharacteristic(this.platform.Characteristic.ObstructionDetected, false);
297
257
  }
298
- if (this.connected) {
299
- this.updateStatusFault();
300
- }
258
+ this.updateStatusFault();
301
259
  }
302
260
  armTransitionTimer() {
303
261
  this.clearTransitionTimer();
304
262
  this.transitionTimer = setTimeout(() => {
305
263
  this.transitionTimer = undefined;
306
- this.pendingTarget = undefined;
307
- this.hasFault = true;
308
- this.obstructionDetected = true;
309
- this.updateStatusFault();
310
- this.service.updateCharacteristic(this.platform.Characteristic.ObstructionDetected, true);
311
- this.setCurrentState(this.platform.Characteristic.CurrentDoorState.STOPPED);
312
- this.platform.log.warn(`Gate ${this.accessory.displayName} did not reach target within ${this.transitionTimeoutMs}ms.`);
264
+ const target = this.pendingTarget;
265
+ this.setPendingTarget(undefined);
266
+ this.clearReverseToggleTimer();
267
+ this.clearOpenArrivalDebounceTimer();
268
+ if (target === undefined) {
269
+ return;
270
+ }
271
+ const settled = this.resolveTerminalStateFromSensors();
272
+ if (settled !== undefined) {
273
+ this.applyDoorState(settled.current, settled.target);
274
+ return;
275
+ }
276
+ const assumedCurrent = target === this.platform.Characteristic.TargetDoorState.OPEN
277
+ ? this.platform.Characteristic.CurrentDoorState.OPEN
278
+ : this.platform.Characteristic.CurrentDoorState.CLOSED;
279
+ this.applyDoorState(assumedCurrent, target);
280
+ this.platform.log.warn(`Gate ${this.accessory.displayName} did not confirm target within ${this.transitionTimeoutMs}ms; assuming ` +
281
+ `${target === this.platform.Characteristic.TargetDoorState.OPEN ? 'open' : 'closed'}.`);
313
282
  }, this.transitionTimeoutMs);
314
283
  }
315
284
  clearTransitionTimer() {
@@ -324,20 +293,26 @@ class GateAccessory {
324
293
  this.reverseToggleTimer = undefined;
325
294
  }
326
295
  }
296
+ clearOpenArrivalDebounceTimer() {
297
+ if (this.openArrivalDebounceTimer) {
298
+ clearTimeout(this.openArrivalDebounceTimer);
299
+ this.openArrivalDebounceTimer = undefined;
300
+ }
301
+ }
327
302
  touchTransitionTimer() {
328
303
  if (this.pendingTarget === undefined) {
329
304
  return;
330
305
  }
331
306
  this.armTransitionTimer();
332
307
  }
333
- resolveMovingState() {
334
- if (this.pendingTarget === this.platform.Characteristic.TargetDoorState.OPEN) {
308
+ resolveMovingState(target) {
309
+ if (target === this.platform.Characteristic.TargetDoorState.OPEN) {
335
310
  return this.platform.Characteristic.CurrentDoorState.OPENING;
336
311
  }
337
- if (this.pendingTarget === this.platform.Characteristic.TargetDoorState.CLOSED) {
312
+ if (target === this.platform.Characteristic.TargetDoorState.CLOSED) {
338
313
  return this.platform.Characteristic.CurrentDoorState.CLOSING;
339
314
  }
340
- return this.platform.Characteristic.CurrentDoorState.STOPPED;
315
+ return this.currentState;
341
316
  }
342
317
  getMotionTarget() {
343
318
  if (this.pendingTarget !== undefined) {
@@ -351,12 +326,99 @@ class GateAccessory {
351
326
  }
352
327
  return undefined;
353
328
  }
329
+ isOpenArrivalSignal() {
330
+ if (this.partialHiMode === 'moving') {
331
+ if (!this.hasPartialSensorState) {
332
+ return true;
333
+ }
334
+ return this.hasPartialSensorState
335
+ && this.sawPartialMotionDuringPending
336
+ && !this.isPartialSensorActive;
337
+ }
338
+ if (!this.hasPartialSensorState) {
339
+ return false;
340
+ }
341
+ if (this.partialHiMode === 'open_endstop') {
342
+ return this.isPartialSensorActive;
343
+ }
344
+ if (this.partialHiMode === 'pedestrian_endstop') {
345
+ return this.isPartialSensorActive;
346
+ }
347
+ return false;
348
+ }
349
+ shouldDebounceOpenArrival() {
350
+ return this.partialHiMode === 'moving'
351
+ && !this.hasPartialSensorState
352
+ && !this.isClosedSensorActive;
353
+ }
354
+ scheduleOpenArrivalDebounce() {
355
+ if (this.openArrivalDebounceTimer) {
356
+ return;
357
+ }
358
+ this.openArrivalDebounceTimer = setTimeout(() => {
359
+ this.openArrivalDebounceTimer = undefined;
360
+ if (!this.connected) {
361
+ return;
362
+ }
363
+ if (this.pendingTarget !== this.platform.Characteristic.TargetDoorState.OPEN) {
364
+ return;
365
+ }
366
+ if (this.isClosedSensorActive) {
367
+ return;
368
+ }
369
+ this.setPendingTarget(undefined);
370
+ this.clearTransitionTimer();
371
+ this.clearReverseToggleTimer();
372
+ this.applyDoorState(this.platform.Characteristic.CurrentDoorState.OPEN, this.platform.Characteristic.TargetDoorState.OPEN);
373
+ }, this.openArrivalDebounceMs);
374
+ }
375
+ resolveTerminalStateFromSensors() {
376
+ if (!this.hasClosedSensorState) {
377
+ return undefined;
378
+ }
379
+ if (this.isClosedSensorActive) {
380
+ return {
381
+ current: this.platform.Characteristic.CurrentDoorState.CLOSED,
382
+ target: this.platform.Characteristic.TargetDoorState.CLOSED,
383
+ };
384
+ }
385
+ return {
386
+ current: this.platform.Characteristic.CurrentDoorState.OPEN,
387
+ target: this.platform.Characteristic.TargetDoorState.OPEN,
388
+ };
389
+ }
390
+ oppositeTarget(target) {
391
+ return target === this.platform.Characteristic.TargetDoorState.OPEN
392
+ ? this.platform.Characteristic.TargetDoorState.CLOSED
393
+ : this.platform.Characteristic.TargetDoorState.OPEN;
394
+ }
395
+ markCommand(target) {
396
+ this.lastCommandTarget = target;
397
+ this.lastCommandAt = Date.now();
398
+ }
399
+ setPendingTarget(target) {
400
+ this.pendingTarget = target;
401
+ if (target !== this.platform.Characteristic.TargetDoorState.OPEN) {
402
+ this.clearOpenArrivalDebounceTimer();
403
+ }
404
+ if (target === undefined) {
405
+ this.sawPartialMotionDuringPending = false;
406
+ return;
407
+ }
408
+ this.sawPartialMotionDuringPending = this.hasPartialSensorState && this.isPartialSensorActive;
409
+ }
410
+ isLikelyDuplicateSet(target) {
411
+ if (this.lastCommandTarget !== target) {
412
+ return false;
413
+ }
414
+ return Date.now() - this.lastCommandAt <= this.duplicateSetWindowMs;
415
+ }
354
416
  publishGateAction(action, note) {
355
417
  const suffix = note ? ` (${note})` : '';
356
418
  this.platform.log.debug(`Publishing ${this.baseTopic}/execute_action = ${action}${suffix}`);
357
419
  this.platform.publishCommand(`${this.baseTopic}/execute_action`, action);
358
420
  }
359
- scheduleReverseToggle(action, expectedTarget) {
421
+ scheduleReverseToggle(action, expectedTarget, mode) {
360
422
  this.clearReverseToggleTimer();
361
423
  this.reverseToggleTimer = setTimeout(() => {
362
424
  this.reverseToggleTimer = undefined;
@@ -366,9 +428,71 @@ class GateAccessory {
366
428
  if (this.pendingTarget !== expectedTarget) {
367
429
  return;
368
430
  }
431
+ if (mode === 'execute_action' && !this.shouldPublishExecuteActionReverseFollowUp()) {
432
+ return;
433
+ }
369
434
  this.publishGateAction(action, 'reverse-2');
370
435
  }, this.reverseToggleDelayMs);
371
436
  }
437
+ shouldScheduleReverseFollowUp(mode) {
438
+ if (mode === 'toggle') {
439
+ return true;
440
+ }
441
+ return this.isOpenCloseExecuteActionPair();
442
+ }
443
+ isOpenCloseExecuteActionPair() {
444
+ const normalize = (value) => value.trim().toLowerCase();
445
+ return normalize(this.platform.getGateExecuteActionOpen()) === 'open'
446
+ && normalize(this.platform.getGateExecuteActionClose()) === 'close';
447
+ }
448
+ shouldPublishExecuteActionReverseFollowUp() {
449
+ if (this.partialHiMode !== 'moving') {
450
+ return true;
451
+ }
452
+ if (!this.hasPartialSensorState) {
453
+ return true;
454
+ }
455
+ return !this.isPartialSensorActive;
456
+ }
457
+ resolveExternalMotionTarget(context) {
458
+ if (this.partialHiMode !== 'moving') {
459
+ return undefined;
460
+ }
461
+ if (!this.hasPartialSensorState || !this.isPartialSensorActive) {
462
+ return undefined;
463
+ }
464
+ if (this.hasClosedSensorState && this.isClosedSensorActive) {
465
+ return undefined;
466
+ }
467
+ const closedJustOpened = context.closedPrevious !== undefined
468
+ && context.closedPrevious
469
+ && !this.isClosedSensorActive;
470
+ if (closedJustOpened) {
471
+ return this.platform.Characteristic.TargetDoorState.OPEN;
472
+ }
473
+ if (this.wasClosedReleasedRecently()) {
474
+ return this.platform.Characteristic.TargetDoorState.OPEN;
475
+ }
476
+ const existingMotionTarget = this.getMotionTarget();
477
+ if (existingMotionTarget !== undefined) {
478
+ return existingMotionTarget;
479
+ }
480
+ if (this.currentState === this.platform.Characteristic.CurrentDoorState.CLOSED) {
481
+ return this.platform.Characteristic.TargetDoorState.OPEN;
482
+ }
483
+ if (this.currentState === this.platform.Characteristic.CurrentDoorState.OPEN) {
484
+ return this.platform.Characteristic.TargetDoorState.CLOSED;
485
+ }
486
+ return this.targetState === this.platform.Characteristic.TargetDoorState.OPEN
487
+ ? this.platform.Characteristic.TargetDoorState.CLOSED
488
+ : this.platform.Characteristic.TargetDoorState.OPEN;
489
+ }
490
+ wasClosedReleasedRecently() {
491
+ if (!this.lastClosedReleaseAt) {
492
+ return false;
493
+ }
494
+ return Date.now() - this.lastClosedReleaseAt <= this.externalDirectionHintWindowMs;
495
+ }
372
496
  }
373
497
  exports.GateAccessory = GateAccessory;
374
498
  //# sourceMappingURL=GateAccessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GateAccessory.js","sourceRoot":"","sources":["../../src/Accesories/GateAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GateAccessory.js","sourceRoot":"","sources":["../../src/Accesories/GateAccessory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Supla Plugin",
3
3
  "name": "@marcel2215/homebridge-supla-plugin",
4
- "version": "2.1.19",
4
+ "version": "2.1.22",
5
5
  "description": "Plugin for Homebridge to control Supla devices",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -17,7 +17,12 @@
17
17
  "lint": "eslint src/**.ts --max-warnings=0",
18
18
  "watch": "npm run build && npm link && nodemon",
19
19
  "build": "rimraf ./dist && tsc",
20
- "prepublishOnly": "npm run lint && npm run build"
20
+ "prepublishOnly": "npm run lint && npm run build",
21
+ "version:bump:major": "npm version major",
22
+ "version:bump:minor": "npm version minor",
23
+ "version:bump:revision": "npm version patch",
24
+ "publish:plugin": "bash ./scripts/publish.sh",
25
+ "publish:plugin:dry-run": "bash ./scripts/publish.sh --dry-run"
21
26
  },
22
27
  "keywords": [
23
28
  "homebridge-plugin",
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ usage() {
6
+ cat <<'EOF'
7
+ Usage: scripts/publish.sh [options]
8
+
9
+ Options:
10
+ --tag <tag> npm dist-tag to publish with (default: latest)
11
+ --dry-run Run npm publish in dry-run mode
12
+ --allow-dirty Allow publishing with uncommitted git changes
13
+ --skip-checks Skip lint/build checks
14
+ --otp <code> npm 2FA one-time password
15
+ -h, --help Show this help
16
+ EOF
17
+ }
18
+
19
+ TAG="latest"
20
+ DRY_RUN=false
21
+ ALLOW_DIRTY=false
22
+ SKIP_CHECKS=false
23
+ OTP=""
24
+
25
+ while [[ $# -gt 0 ]]; do
26
+ case "$1" in
27
+ --tag)
28
+ shift
29
+ if [[ $# -eq 0 || -z "${1:-}" ]]; then
30
+ echo "Missing value for --tag" >&2
31
+ usage
32
+ exit 1
33
+ fi
34
+ TAG="$1"
35
+ ;;
36
+ --dry-run)
37
+ DRY_RUN=true
38
+ ;;
39
+ --allow-dirty)
40
+ ALLOW_DIRTY=true
41
+ ;;
42
+ --skip-checks)
43
+ SKIP_CHECKS=true
44
+ ;;
45
+ --otp)
46
+ shift
47
+ if [[ $# -eq 0 || -z "${1:-}" ]]; then
48
+ echo "Missing value for --otp" >&2
49
+ usage
50
+ exit 1
51
+ fi
52
+ OTP="$1"
53
+ ;;
54
+ -h|--help)
55
+ usage
56
+ exit 0
57
+ ;;
58
+ *)
59
+ echo "Unknown option: $1" >&2
60
+ usage
61
+ exit 1
62
+ ;;
63
+ esac
64
+ shift
65
+ done
66
+
67
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
68
+ REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
69
+ cd "${REPO_ROOT}"
70
+
71
+ if ! command -v npm >/dev/null 2>&1; then
72
+ echo "npm is required but was not found in PATH." >&2
73
+ exit 1
74
+ fi
75
+
76
+ if ! command -v git >/dev/null 2>&1; then
77
+ echo "git is required but was not found in PATH." >&2
78
+ exit 1
79
+ fi
80
+
81
+ if ! ${ALLOW_DIRTY}; then
82
+ if [[ -n "$(git status --porcelain)" ]]; then
83
+ echo "Working tree is not clean. Commit/stash changes or use --allow-dirty." >&2
84
+ exit 1
85
+ fi
86
+ fi
87
+
88
+ if ! npm whoami >/dev/null 2>&1; then
89
+ echo "Not logged in to npm. Run 'npm login' first." >&2
90
+ exit 1
91
+ fi
92
+
93
+ if ! ${SKIP_CHECKS}; then
94
+ echo "Running pre-publish checks (lint + build)..."
95
+ npm run lint
96
+ npm run build
97
+ fi
98
+
99
+ echo "Previewing package contents..."
100
+ npm pack --dry-run >/dev/null
101
+
102
+ PUBLISH_CMD=(npm publish --access public --tag "${TAG}")
103
+ if ${DRY_RUN}; then
104
+ PUBLISH_CMD+=(--dry-run)
105
+ fi
106
+ if [[ -n "${OTP}" ]]; then
107
+ PUBLISH_CMD+=(--otp "${OTP}")
108
+ fi
109
+
110
+ echo "Publishing with command: ${PUBLISH_CMD[*]}"
111
+ "${PUBLISH_CMD[@]}"
112
+
113
+ if ${DRY_RUN}; then
114
+ echo "Dry-run publish completed."
115
+ else
116
+ echo "Publish completed successfully."
117
+ fi