homebridge-securitysystem 10.1.0-beta.2 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +1 -3
- package/dist/homekit/service-factory.js +1 -1
- package/dist/homekit/service-factory.js.map +1 -1
- package/dist/tests/trip-handler.test.js +68 -0
- package/dist/tests/trip-handler.test.js.map +1 -1
- package/package.json +1 -1
- package/src/homekit/service-factory.ts +1 -1
- package/src/tests/trip-handler.test.ts +86 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v10.1.0-beta.3 - 2026-04-18
|
|
4
|
+
|
|
5
|
+
<!-- Release notes generated using configuration in .github/release.yml at v10.1.0-beta.3 -->
|
|
6
|
+
|
|
7
|
+
## What's Changed
|
|
8
|
+
### 🛠️ Other Changes
|
|
9
|
+
* Refactor trip switches: prefix custom switches and add comprehensive tests by @MiguelRipoll23 in https://github.com/MiguelRipoll23/homebridge-securitysystem/pull/755
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
**Full Changelog**: https://github.com/MiguelRipoll23/homebridge-securitysystem/compare/v10.1.0-beta.2...v10.1.0-beta.3
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## v10.1.0-beta.2 - 2026-04-17
|
|
16
|
+
|
|
17
|
+
<!-- Release notes generated using configuration in .github/release.yml at v10.1.0-beta.2 -->
|
|
18
|
+
|
|
19
|
+
## What's Changed
|
|
20
|
+
### 🛠️ Other Changes
|
|
21
|
+
* fix: resolve Service|Service[] type errors and CHANGELOG detection bug by @MiguelRipoll23 in https://github.com/MiguelRipoll23/homebridge-securitysystem/pull/752
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
**Full Changelog**: https://github.com/MiguelRipoll23/homebridge-securitysystem/compare/v10.1.0-beta.1...v10.1.0-beta.2
|
|
25
|
+
|
package/README.md
CHANGED
|
@@ -10,9 +10,7 @@ Homebridge plugin that creates a security system accessory that can be triggered
|
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
`npm i -g --unsafe-perm homebridge-securitysystem`
|
|
13
|
+
In the Homebridge UI, go to the plugins section, click the search button, then search for `homebridge-securitysystem`, and click the install button.
|
|
16
14
|
|
|
17
15
|
## Demo
|
|
18
16
|
|
|
@@ -23,7 +23,7 @@ export function buildServiceRegistry(Svc, Char, options) {
|
|
|
23
23
|
infoSvc.setCharacteristic(Char.SerialNumber, options.serialNumber);
|
|
24
24
|
const audioSvc = sw(options.audioSwitchName, SWITCH_UUIDS.AUDIO);
|
|
25
25
|
audioSvc.getCharacteristic(Char.On).value = true;
|
|
26
|
-
const buildCustomTripSwitches = (mode, modeLabel, switches) => switches.map((s, i) => sw(
|
|
26
|
+
const buildCustomTripSwitches = (mode, modeLabel, switches) => switches.map((s, i) => sw(`Trip ${modeLabel} ${s.label}`, `trip-${mode}-${i}`));
|
|
27
27
|
return {
|
|
28
28
|
mainService: mainSvc,
|
|
29
29
|
accessoryInfoService: infoSvc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-factory.js","sourceRoot":"","sources":["../../src/homekit/service-factory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAClC,GAAmB,EACnB,IAA+B,EAC/B,OAA8B;IAE9B,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE;QAChD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE;QACpD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;IAC/C,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC/D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;IAEjD,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,QAA0B,EAAa,EAAE,CACzG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"service-factory.js","sourceRoot":"","sources":["../../src/homekit/service-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,9 @@ function makeServices() {
|
|
|
34
34
|
for (const k of keys) {
|
|
35
35
|
s[k] = makeMockService();
|
|
36
36
|
}
|
|
37
|
+
s.customTripHomeSwitchServices = [];
|
|
38
|
+
s.customTripAwaySwitchServices = [];
|
|
39
|
+
s.customTripNightSwitchServices = [];
|
|
37
40
|
return s;
|
|
38
41
|
}
|
|
39
42
|
function makeState(overrides = {}) {
|
|
@@ -165,5 +168,70 @@ describe('TripHandler', async () => {
|
|
|
165
168
|
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
166
169
|
expect(result).toBe(false);
|
|
167
170
|
});
|
|
171
|
+
// ── Custom trip switch tests ───────────────────────────────────────────────
|
|
172
|
+
describe('Custom Trip Switches', () => {
|
|
173
|
+
it('custom HOME trip switch triggers only in HOME mode', () => {
|
|
174
|
+
state.currentState = SecurityState.HOME;
|
|
175
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
176
|
+
expect(result).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
it('custom HOME trip switch blocks when not in HOME mode', () => {
|
|
179
|
+
state.currentState = SecurityState.AWAY;
|
|
180
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
181
|
+
expect(result).toBe(false);
|
|
182
|
+
});
|
|
183
|
+
it('custom AWAY trip switch triggers only in AWAY mode', () => {
|
|
184
|
+
state.currentState = SecurityState.AWAY;
|
|
185
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.AWAY, true);
|
|
186
|
+
expect(result).toBe(true);
|
|
187
|
+
});
|
|
188
|
+
it('custom AWAY trip switch blocks when not in AWAY mode', () => {
|
|
189
|
+
state.currentState = SecurityState.HOME;
|
|
190
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.AWAY, true);
|
|
191
|
+
expect(result).toBe(false);
|
|
192
|
+
});
|
|
193
|
+
it('custom NIGHT trip switch triggers only in NIGHT mode', () => {
|
|
194
|
+
state.currentState = SecurityState.NIGHT;
|
|
195
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.NIGHT, true);
|
|
196
|
+
expect(result).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
it('custom NIGHT trip switch blocks when not in NIGHT mode', () => {
|
|
199
|
+
state.currentState = SecurityState.HOME;
|
|
200
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.NIGHT, true);
|
|
201
|
+
expect(result).toBe(false);
|
|
202
|
+
});
|
|
203
|
+
it('custom trip switch blocks when alarm is already triggered', () => {
|
|
204
|
+
state.currentState = SecurityState.TRIGGERED;
|
|
205
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
206
|
+
expect(result).toBe(false);
|
|
207
|
+
});
|
|
208
|
+
it('custom trip switch cancellation works with triggerIfModeSet', () => {
|
|
209
|
+
state.currentState = SecurityState.HOME;
|
|
210
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, false);
|
|
211
|
+
expect(result).toBe(true);
|
|
212
|
+
expect(mockAudio.stop).toHaveBeenCalled();
|
|
213
|
+
});
|
|
214
|
+
it('resetTripSwitches includes custom trip switch services', () => {
|
|
215
|
+
const mockChar = makeMockChar(true);
|
|
216
|
+
const mockSvc = { getCharacteristic: vi.fn().mockReturnValue(mockChar) };
|
|
217
|
+
services.customTripHomeSwitchServices = [mockSvc];
|
|
218
|
+
tripHandler.resetTripSwitches();
|
|
219
|
+
expect(mockChar.updateValue).toHaveBeenCalledWith(false);
|
|
220
|
+
});
|
|
221
|
+
it('resetTripSwitches handles multiple custom switches per mode', () => {
|
|
222
|
+
const mockChar1 = makeMockChar(true);
|
|
223
|
+
const mockChar2 = makeMockChar(true);
|
|
224
|
+
const mockChar3 = makeMockChar(false);
|
|
225
|
+
const mockSvc1 = { getCharacteristic: vi.fn().mockReturnValue(mockChar1) };
|
|
226
|
+
const mockSvc2 = { getCharacteristic: vi.fn().mockReturnValue(mockChar2) };
|
|
227
|
+
const mockSvc3 = { getCharacteristic: vi.fn().mockReturnValue(mockChar3) };
|
|
228
|
+
services.customTripHomeSwitchServices = [mockSvc1, mockSvc2];
|
|
229
|
+
services.customTripAwaySwitchServices = [mockSvc3];
|
|
230
|
+
tripHandler.resetTripSwitches();
|
|
231
|
+
expect(mockChar1.updateValue).toHaveBeenCalledWith(false);
|
|
232
|
+
expect(mockChar2.updateValue).toHaveBeenCalledWith(false);
|
|
233
|
+
expect(mockChar3.updateValue).not.toHaveBeenCalled();
|
|
234
|
+
});
|
|
235
|
+
});
|
|
168
236
|
});
|
|
169
237
|
//# sourceMappingURL=trip-handler.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trip-handler.test.js","sourceRoot":"","sources":["../../src/tests/trip-handler.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKnD,iFAAiF;AAEjF,SAAS,YAAY,CAAC,QAAiB,KAAK;IAC1C,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAU,EAAE,EAAE;QAC9C,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,YAAqB,KAAK;IACjD,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO;QACL,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QAChD,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC7B,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;QAC3C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG;QACX,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB;QACpF,wBAAwB,EAAE,2BAA2B,EAAE,yBAAyB;QAChF,6BAA6B,EAAE,6BAA6B,EAAE,8BAA8B;QAC5F,uBAAuB,EAAE,uBAAuB,EAAE,wBAAwB;QAC1E,sBAAsB,EAAE,+BAA+B,EAAE,wBAAwB;QACjF,oBAAoB,EAAE,2BAA2B,EAAE,4BAA4B;QAC/E,8BAA8B,EAAE,mCAAmC,EAAE,sBAAsB;KAC5F,CAAC;IACF,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"trip-handler.test.js","sourceRoot":"","sources":["../../src/tests/trip-handler.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "homebridge-securitysystem",
|
|
3
3
|
"displayName": "Homebridge Security System",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "10.1.0
|
|
5
|
+
"version": "10.1.0",
|
|
6
6
|
"description": "Homebridge plugin that creates a security system accessory that can be triggered by HomeKit sensors.",
|
|
7
7
|
"author": "MiguelRipoll23",
|
|
8
8
|
"license": "MIT",
|
|
@@ -38,7 +38,7 @@ export function buildServiceRegistry(
|
|
|
38
38
|
audioSvc.getCharacteristic(Char.On).value = true;
|
|
39
39
|
|
|
40
40
|
const buildCustomTripSwitches = (mode: string, modeLabel: string, switches: TripModeSwitch[]): Service[] =>
|
|
41
|
-
switches.map((s, i) => sw(
|
|
41
|
+
switches.map((s, i) => sw(`Trip ${modeLabel} ${s.label}`, `trip-${mode}-${i}`));
|
|
42
42
|
|
|
43
43
|
return {
|
|
44
44
|
mainService: mainSvc,
|
|
@@ -37,10 +37,13 @@ function makeServices(): ServiceRegistry {
|
|
|
37
37
|
'audioSwitchService', 'armingMotionSensorService', 'trippedMotionSensorService',
|
|
38
38
|
'triggeredMotionSensorService', 'triggeredResetMotionSensorService', 'accessoryInfoService',
|
|
39
39
|
];
|
|
40
|
-
const s: Record<string, ReturnType<typeof makeMockService
|
|
40
|
+
const s: Record<string, ReturnType<typeof makeMockService> | unknown[]> = {};
|
|
41
41
|
for (const k of keys) {
|
|
42
42
|
s[k] = makeMockService();
|
|
43
43
|
}
|
|
44
|
+
s.customTripHomeSwitchServices = [];
|
|
45
|
+
s.customTripAwaySwitchServices = [];
|
|
46
|
+
s.customTripNightSwitchServices = [];
|
|
44
47
|
return s as unknown as ServiceRegistry;
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -194,4 +197,86 @@ describe('TripHandler', async () => {
|
|
|
194
197
|
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
195
198
|
expect(result).toBe(false);
|
|
196
199
|
});
|
|
200
|
+
|
|
201
|
+
// ── Custom trip switch tests ───────────────────────────────────────────────
|
|
202
|
+
|
|
203
|
+
describe('Custom Trip Switches', () => {
|
|
204
|
+
it('custom HOME trip switch triggers only in HOME mode', () => {
|
|
205
|
+
state.currentState = SecurityState.HOME;
|
|
206
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
207
|
+
expect(result).toBe(true);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('custom HOME trip switch blocks when not in HOME mode', () => {
|
|
211
|
+
state.currentState = SecurityState.AWAY;
|
|
212
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
213
|
+
expect(result).toBe(false);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('custom AWAY trip switch triggers only in AWAY mode', () => {
|
|
217
|
+
state.currentState = SecurityState.AWAY;
|
|
218
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.AWAY, true);
|
|
219
|
+
expect(result).toBe(true);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('custom AWAY trip switch blocks when not in AWAY mode', () => {
|
|
223
|
+
state.currentState = SecurityState.HOME;
|
|
224
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.AWAY, true);
|
|
225
|
+
expect(result).toBe(false);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it('custom NIGHT trip switch triggers only in NIGHT mode', () => {
|
|
229
|
+
state.currentState = SecurityState.NIGHT;
|
|
230
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.NIGHT, true);
|
|
231
|
+
expect(result).toBe(true);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it('custom NIGHT trip switch blocks when not in NIGHT mode', () => {
|
|
235
|
+
state.currentState = SecurityState.HOME;
|
|
236
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.NIGHT, true);
|
|
237
|
+
expect(result).toBe(false);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it('custom trip switch blocks when alarm is already triggered', () => {
|
|
241
|
+
state.currentState = SecurityState.TRIGGERED;
|
|
242
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, true);
|
|
243
|
+
expect(result).toBe(false);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it('custom trip switch cancellation works with triggerIfModeSet', () => {
|
|
247
|
+
state.currentState = SecurityState.HOME;
|
|
248
|
+
const result = tripHandler.triggerIfModeSet(SecurityState.HOME, false);
|
|
249
|
+
expect(result).toBe(true);
|
|
250
|
+
expect(mockAudio.stop).toHaveBeenCalled();
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it('resetTripSwitches includes custom trip switch services', () => {
|
|
254
|
+
const mockChar = makeMockChar(true);
|
|
255
|
+
const mockSvc = { getCharacteristic: vi.fn().mockReturnValue(mockChar) };
|
|
256
|
+
(services.customTripHomeSwitchServices as unknown[]) = [mockSvc];
|
|
257
|
+
|
|
258
|
+
tripHandler.resetTripSwitches();
|
|
259
|
+
|
|
260
|
+
expect(mockChar.updateValue).toHaveBeenCalledWith(false);
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('resetTripSwitches handles multiple custom switches per mode', () => {
|
|
264
|
+
const mockChar1 = makeMockChar(true);
|
|
265
|
+
const mockChar2 = makeMockChar(true);
|
|
266
|
+
const mockChar3 = makeMockChar(false);
|
|
267
|
+
|
|
268
|
+
const mockSvc1 = { getCharacteristic: vi.fn().mockReturnValue(mockChar1) };
|
|
269
|
+
const mockSvc2 = { getCharacteristic: vi.fn().mockReturnValue(mockChar2) };
|
|
270
|
+
const mockSvc3 = { getCharacteristic: vi.fn().mockReturnValue(mockChar3) };
|
|
271
|
+
|
|
272
|
+
(services.customTripHomeSwitchServices as unknown[]) = [mockSvc1, mockSvc2];
|
|
273
|
+
(services.customTripAwaySwitchServices as unknown[]) = [mockSvc3];
|
|
274
|
+
|
|
275
|
+
tripHandler.resetTripSwitches();
|
|
276
|
+
|
|
277
|
+
expect(mockChar1.updateValue).toHaveBeenCalledWith(false);
|
|
278
|
+
expect(mockChar2.updateValue).toHaveBeenCalledWith(false);
|
|
279
|
+
expect(mockChar3.updateValue).not.toHaveBeenCalled();
|
|
280
|
+
});
|
|
281
|
+
});
|
|
197
282
|
});
|