@marcel2215/homebridge-supla-plugin 2.1.27 → 2.1.29

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.
Files changed (49) hide show
  1. package/README.md +43 -0
  2. package/config.schema.json +67 -71
  3. package/dist/Accesories/ActionTriggerAccessory.js.map +1 -1
  4. package/dist/Accesories/AirQualityAccessory.js +1 -2
  5. package/dist/Accesories/AirQualityAccessory.js.map +1 -1
  6. package/dist/Accesories/DimmerAccessory.js.map +1 -1
  7. package/dist/Accesories/DimmerRgbLightAccessory.js.map +1 -1
  8. package/dist/Accesories/DoorAccessory.js.map +1 -1
  9. package/dist/Accesories/ElectricityMeterAccessory.js.map +1 -1
  10. package/dist/Accesories/FacadeBlindAccessory.js +1 -1
  11. package/dist/Accesories/FacadeBlindAccessory.js.map +1 -1
  12. package/dist/Accesories/FrontGateFsm.d.ts +67 -67
  13. package/dist/Accesories/FrontGateFsm.d.ts.map +1 -1
  14. package/dist/Accesories/FrontGateFsm.js +499 -399
  15. package/dist/Accesories/FrontGateFsm.js.map +1 -1
  16. package/dist/Accesories/GarageDoorOpenerAccesory.js.map +1 -1
  17. package/dist/Accesories/GateAccessory.d.ts +6 -2
  18. package/dist/Accesories/GateAccessory.d.ts.map +1 -1
  19. package/dist/Accesories/GateAccessory.js +127 -82
  20. package/dist/Accesories/GateAccessory.js.map +1 -1
  21. package/dist/Accesories/GateLockAccessory.js.map +1 -1
  22. package/dist/Accesories/LightBulbAccesory.js.map +1 -1
  23. package/dist/Accesories/PressureAccessory.js.map +1 -1
  24. package/dist/Accesories/RollerShutterAccessory.d.ts.map +1 -1
  25. package/dist/Accesories/RollerShutterAccessory.js +6 -5
  26. package/dist/Accesories/RollerShutterAccessory.js.map +1 -1
  27. package/dist/Accesories/SwitchAccessory.js.map +1 -1
  28. package/dist/Accesories/TemperatureAccessory.js.map +1 -1
  29. package/dist/Accesories/TemperatureHumidityAccessory.js.map +1 -1
  30. package/dist/Accesories/ThermostatAccessory.js +2 -2
  31. package/dist/Accesories/ThermostatAccessory.js.map +1 -1
  32. package/dist/Heplers/ColorConverters.js +4 -5
  33. package/dist/Heplers/ColorConverters.js.map +1 -1
  34. package/dist/Heplers/SuplaChannelContext.d.ts.map +1 -1
  35. package/dist/Heplers/SuplaMqttClient.d.ts +2 -3
  36. package/dist/Heplers/SuplaMqttClient.d.ts.map +1 -1
  37. package/dist/Heplers/SuplaMqttClient.js +34 -28
  38. package/dist/Heplers/SuplaMqttClient.js.map +1 -1
  39. package/dist/Heplers/SuplaMqttClientContext.d.ts +5 -4
  40. package/dist/Heplers/SuplaMqttClientContext.d.ts.map +1 -1
  41. package/dist/Heplers/SuplaMqttClientContext.js +2 -1
  42. package/dist/Heplers/SuplaMqttClientContext.js.map +1 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/platform.d.ts +34 -34
  45. package/dist/platform.d.ts.map +1 -1
  46. package/dist/platform.js +228 -183
  47. package/dist/platform.js.map +1 -1
  48. package/package.json +9 -8
  49. package/.codex/environments/environment.toml +0 -31
@@ -1,9 +1,7 @@
1
1
  export type GateTarget = 'open' | 'closed';
2
2
  export type MotionDirection = 'opening' | 'closing';
3
- export type MotionCertainty = 'known' | 'goalOnly';
4
- export type MotionSource = 'homekit' | 'external' | 'recovery';
5
- export type IdleNotClosedMode = 'openKnown' | 'openishUnknown';
6
- export type NextPulseDirection = MotionDirection | 'unknown';
3
+ export type UnknownOpenPolicy = 'reject' | 'accept_non_closed';
4
+ export type UnknownClosePolicy = 'reject' | 'single_pulse_best_effort' | 'seek_closed';
7
5
  export declare const enum DoorCurrentState {
8
6
  OPEN = 0,
9
7
  CLOSED = 1,
@@ -15,30 +13,37 @@ export declare const enum DoorTargetState {
15
13
  OPEN = 0,
16
14
  CLOSED = 1
17
15
  }
18
- export interface FrontGateTimingConfig {
16
+ export interface FrontGateConfig {
19
17
  fullTravelMs: number;
20
18
  reversePauseMs: number;
21
- wrongDirectionRunMs: number;
22
19
  minimumPulseGapMs: number;
23
- closeRetryLimit: number;
20
+ unknownOpenPolicy: UnknownOpenPolicy;
21
+ unknownClosePolicy: UnknownClosePolicy;
22
+ seekClosedMaxPulses: number;
23
+ assumeOpenAfterTravel: boolean;
24
24
  }
25
- export declare const DEFAULT_FRONT_GATE_TIMINGS: FrontGateTimingConfig;
26
- export interface PersistedFrontGateState {
25
+ export declare const DEFAULT_FRONT_GATE_CONFIG: FrontGateConfig;
26
+ export type FrontGateErrorCode = 'unavailable' | 'not_allowed' | 'resource_busy' | 'communication_failure' | 'operation_timed_out';
27
+ export declare class FrontGateError extends Error {
28
+ readonly code: FrontGateErrorCode;
29
+ constructor(code: FrontGateErrorCode, message: string, options?: ErrorOptions);
27
30
  }
31
+ export type PositionEstimateKind = 'closed' | 'openingKnown' | 'closingKnown' | 'reversalPause' | 'notClosedUnknown' | 'openAssumed';
32
+ export type FrontGateOperationKind = 'none' | 'scheduledPulse' | 'reversalPause' | 'seekClosed';
28
33
  export interface FrontGateSnapshot {
29
34
  available: boolean;
35
+ transportConnected: boolean;
30
36
  controlConnected: boolean | null;
31
37
  sensorConnected: boolean | null;
32
38
  closedSensor: boolean | null;
33
- sensorFreshSinceOnline: boolean;
39
+ observationEpoch: number;
40
+ sensorSampleEpoch: number | null;
34
41
  currentDoorState?: DoorCurrentState;
35
42
  targetDoorState?: DoorTargetState;
36
- requestedTarget: GateTarget | null;
43
+ desiredTarget: GateTarget | null;
44
+ positionEstimate: PositionEstimateKind;
37
45
  motionDirection: MotionDirection | 'none';
38
- motionCertainty: MotionCertainty | 'none';
39
- planKind: Plan['kind'];
40
- idleNotClosedMode: IdleNotClosedMode;
41
- nextPulseDirection: NextPulseDirection;
46
+ operationKind: FrontGateOperationKind;
42
47
  note: string;
43
48
  }
44
49
  export interface FrontGateLogger {
@@ -51,81 +56,76 @@ export interface FrontGateIo {
51
56
  publishSnapshot(snapshot: FrontGateSnapshot): void;
52
57
  log: FrontGateLogger;
53
58
  }
54
- type Plan = {
55
- kind: 'idle';
56
- } | {
57
- kind: 'moving';
58
- direction: MotionDirection;
59
- certainty: MotionCertainty;
60
- source: MotionSource;
61
- startedAt: number;
62
- deadlineAt: number;
63
- } | {
64
- kind: 'waitingSecondPulse';
65
- stoppedFrom: MotionDirection;
66
- finalDirection: MotionDirection;
67
- source: MotionSource;
68
- dueAt: number;
69
- deadlineAt: number;
70
- reason: 'reverseToOpen' | 'reverseToClose';
71
- };
59
+ export interface FrontGateScheduler {
60
+ now(): number;
61
+ schedule(callback: () => void, delayMs: number): () => void;
62
+ }
72
63
  export declare class FrontGateFsm {
73
64
  private readonly io;
74
- private readonly travelMs;
75
- private readonly pulseGapMs;
65
+ private readonly config;
66
+ private readonly scheduler;
76
67
  private facts;
77
- private sensorFreshSinceOnline;
78
- private requestedTarget;
79
- private idleNotClosedMode;
80
- private idleNextPulseDirection;
81
- private plan;
82
- private lastPulseLikeActivityAt;
83
- private movementTimer?;
84
- private movementTimerToken;
85
- private phaseTimer?;
86
- private phaseTimerToken;
68
+ private observationEpoch;
69
+ private sensorSampleEpoch;
70
+ private previousSensorInEpoch;
71
+ private desiredTarget;
72
+ private position;
73
+ private positionGeneration;
74
+ private operation;
75
+ private nextOperationId;
76
+ private lastPublishedPulseAt;
77
+ private cancelMovementTimer?;
78
+ private cancelOperationTimer?;
87
79
  private sequence;
88
80
  private disposed;
89
- constructor(io: FrontGateIo, timings?: FrontGateTimingConfig, _persisted?: PersistedFrontGateState);
81
+ constructor(io: FrontGateIo, config?: Partial<FrontGateConfig>, scheduler?: FrontGateScheduler);
90
82
  dispose(): void;
91
- handleConnectedChange(connected: boolean): void;
83
+ handleTransportConnectedChange(connected: boolean): void;
92
84
  handleControlConnectedChange(connected: boolean): void;
93
85
  handleSensorConnectedChange(connected: boolean): void;
94
86
  handleClosedSensorChange(closed: boolean): void;
95
87
  handleObservedExternalPulse(reason?: string): void;
96
88
  requestHomeKitTarget(target: GateTarget): Promise<void>;
97
89
  getSnapshot(): FrontGateSnapshot;
90
+ whenIdle(): Promise<void>;
98
91
  private enqueue;
92
+ private applyTransportConnectedChange;
99
93
  private applyControlConnectedChange;
100
94
  private applySensorConnectedChange;
101
95
  private applyClosedSensorChange;
102
96
  private applyHomeKitTarget;
103
- private handleOpenRequest;
104
- private handleCloseRequest;
105
- private startOpeningFromClosed;
106
- private startOpeningFromStoppedState;
107
- private startKnownCloseFromIdle;
108
- private startAmbiguousCloseAttempt;
109
- private reverseKnownMotion;
110
- private startOpeningMotion;
111
- private startClosingMotion;
112
- private scheduleMovementTimer;
113
- private schedulePhaseTimer;
114
- private clearMovementTimer;
115
- private clearPhaseTimer;
116
- private clearTimers;
117
- private handlePhaseTimer;
118
- private handleMovementTimeout;
97
+ private acceptOpenRequest;
98
+ private acceptCloseRequest;
99
+ private acceptUnknownCloseRequest;
100
+ private acceptPulse;
101
+ private executeScheduledPulse;
102
+ private applySuccessfulPulse;
103
+ private startReversalPause;
104
+ private startSeekClosedWait;
105
+ private scheduleOperationTimer;
106
+ private handleOperationTimer;
107
+ private executeReversalPulse;
108
+ private advanceSeekClosed;
109
+ private validateScheduledPulse;
110
+ private validateOperationContext;
111
+ private hasCurrentOperation;
112
+ private cancelConflictingOperation;
113
+ private cancelInvalidOperation;
119
114
  private applyObservedExternalPulse;
120
- private enterUnavailable;
115
+ private advanceObservationEpoch;
116
+ private setKnownMovement;
117
+ private setPosition;
118
+ private handleMovementTimeout;
119
+ private setOperation;
120
+ private clearOperation;
121
+ private clearMovementTimer;
122
+ private clearOperationTimer;
121
123
  private isAvailableForHomeKit;
122
- private pulseMotor;
123
124
  private emitSnapshot;
124
125
  private buildSnapshot;
125
126
  private getMotionDirection;
126
- private getMotionCertainty;
127
127
  private computeCurrentDoorState;
128
128
  private computeTargetDoorState;
129
+ private errorMessage;
129
130
  }
130
- export {};
131
131
  //# sourceMappingURL=FrontGateFsm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FrontGateFsm.d.ts","sourceRoot":"","sources":["../../src/Accesories/FrontGateFsm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrontGateFsm.d.ts","sourceRoot":"","sources":["../../src/Accesories/FrontGateFsm.ts"],"names":[],"mappings":"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"}