homebridge-securitysystem 0.0.1-matter
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/.gitattributes +1 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +46 -0
- package/.github/ISSUE_TEMPLATE/feature-request.yml +17 -0
- package/.github/ISSUE_TEMPLATE/questions-answers.yml +40 -0
- package/.github/demo.jpg +0 -0
- package/.github/dependabot.yml +19 -0
- package/.github/release.yml +36 -0
- package/.github/workflows/build-package.yml +49 -0
- package/.github/workflows/bump-version.yml +59 -0
- package/.github/workflows/dependency-review.yml +26 -0
- package/.github/workflows/publish.yml +155 -0
- package/.github/workflows/stale-activity.yml +27 -0
- package/AGENTS.md +247 -0
- package/CHANGELOG.md +572 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +5 -0
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/SECURITY.md +12 -0
- package/config.schema.json +934 -0
- package/dist/conditions/already-triggered-condition.d.ts +10 -0
- package/dist/conditions/already-triggered-condition.js +22 -0
- package/dist/conditions/already-triggered-condition.js.map +1 -0
- package/dist/conditions/arming-in-progress-condition.d.ts +10 -0
- package/dist/conditions/arming-in-progress-condition.js +21 -0
- package/dist/conditions/arming-in-progress-condition.js.map +1 -0
- package/dist/conditions/arming-lock-condition.d.ts +10 -0
- package/dist/conditions/arming-lock-condition.js +43 -0
- package/dist/conditions/arming-lock-condition.js.map +1 -0
- package/dist/conditions/condition.d.ts +22 -0
- package/dist/conditions/condition.js +19 -0
- package/dist/conditions/condition.js.map +1 -0
- package/dist/conditions/double-knock-condition.d.ts +24 -0
- package/dist/conditions/double-knock-condition.js +73 -0
- package/dist/conditions/double-knock-condition.js.map +1 -0
- package/dist/conditions/not-armed-condition.d.ts +10 -0
- package/dist/conditions/not-armed-condition.js +26 -0
- package/dist/conditions/not-armed-condition.js.map +1 -0
- package/dist/conditions/trigger-already-running-condition.d.ts +10 -0
- package/dist/conditions/trigger-already-running-condition.js +21 -0
- package/dist/conditions/trigger-already-running-condition.js.map +1 -0
- package/dist/constants/default-constant.d.ts +24 -0
- package/dist/constants/default-constant.js +27 -0
- package/dist/constants/default-constant.js.map +1 -0
- package/dist/constants/homekit-constant.d.ts +2 -0
- package/dist/constants/homekit-constant.js +3 -0
- package/dist/constants/homekit-constant.js.map +1 -0
- package/dist/constants/matter-constant.d.ts +21 -0
- package/dist/constants/matter-constant.js +61 -0
- package/dist/constants/matter-constant.js.map +1 -0
- package/dist/handlers/sensor-handler.d.ts +24 -0
- package/dist/handlers/sensor-handler.js +63 -0
- package/dist/handlers/sensor-handler.js.map +1 -0
- package/dist/handlers/state-handler.d.ts +49 -0
- package/dist/handlers/state-handler.js +204 -0
- package/dist/handlers/state-handler.js.map +1 -0
- package/dist/handlers/switch-handler.d.ts +28 -0
- package/dist/handlers/switch-handler.js +95 -0
- package/dist/handlers/switch-handler.js.map +1 -0
- package/dist/handlers/trip-handler.d.ts +44 -0
- package/dist/handlers/trip-handler.js +156 -0
- package/dist/handlers/trip-handler.js.map +1 -0
- package/dist/homekit/homekit-registrar.d.ts +12 -0
- package/dist/homekit/homekit-registrar.js +23 -0
- package/dist/homekit/homekit-registrar.js.map +1 -0
- package/dist/homekit/service-factory.d.ts +12 -0
- package/dist/homekit/service-factory.js +24 -0
- package/dist/homekit/service-factory.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/condition-context-interface.d.ts +14 -0
- package/dist/interfaces/condition-context-interface.js +2 -0
- package/dist/interfaces/condition-context-interface.js.map +1 -0
- package/dist/interfaces/hap-types-interface.d.ts +9 -0
- package/dist/interfaces/hap-types-interface.js +2 -0
- package/dist/interfaces/hap-types-interface.js.map +1 -0
- package/dist/interfaces/mqtt-status-payload-interface.d.ts +6 -0
- package/dist/interfaces/mqtt-status-payload-interface.js +2 -0
- package/dist/interfaces/mqtt-status-payload-interface.js.map +1 -0
- package/dist/interfaces/options-interface.d.ts +87 -0
- package/dist/interfaces/options-interface.js +2 -0
- package/dist/interfaces/options-interface.js.map +1 -0
- package/dist/interfaces/persisted-state-interface.d.ts +6 -0
- package/dist/interfaces/persisted-state-interface.js +2 -0
- package/dist/interfaces/persisted-state-interface.js.map +1 -0
- package/dist/interfaces/service-registry-interface.d.ts +10 -0
- package/dist/interfaces/service-registry-interface.js +2 -0
- package/dist/interfaces/service-registry-interface.js.map +1 -0
- package/dist/interfaces/system-state-interface.d.ts +22 -0
- package/dist/interfaces/system-state-interface.js +2 -0
- package/dist/interfaces/system-state-interface.js.map +1 -0
- package/dist/schemas/arming-lock-schema.d.ts +10 -0
- package/dist/schemas/arming-lock-schema.js +12 -0
- package/dist/schemas/arming-lock-schema.js.map +1 -0
- package/dist/schemas/error-schema.d.ts +4 -0
- package/dist/schemas/error-schema.js +7 -0
- package/dist/schemas/error-schema.js.map +1 -0
- package/dist/schemas/mode-request-schema.d.ts +10 -0
- package/dist/schemas/mode-request-schema.js +18 -0
- package/dist/schemas/mode-request-schema.js.map +1 -0
- package/dist/schemas/status-response-schema.d.ts +7 -0
- package/dist/schemas/status-response-schema.js +10 -0
- package/dist/schemas/status-response-schema.js.map +1 -0
- package/dist/schemas/trip-mode-request-schema.d.ts +9 -0
- package/dist/schemas/trip-mode-request-schema.js +24 -0
- package/dist/schemas/trip-mode-request-schema.js.map +1 -0
- package/dist/security-system-platform.d.ts +19 -0
- package/dist/security-system-platform.js +56 -0
- package/dist/security-system-platform.js.map +1 -0
- package/dist/security-system.d.ts +28 -0
- package/dist/security-system.js +169 -0
- package/dist/security-system.js.map +1 -0
- package/dist/services/command-service.d.ts +16 -0
- package/dist/services/command-service.js +65 -0
- package/dist/services/command-service.js.map +1 -0
- package/dist/services/configuration-service.d.ts +24 -0
- package/dist/services/configuration-service.js +189 -0
- package/dist/services/configuration-service.js.map +1 -0
- package/dist/services/event-bus-service.d.ts +12 -0
- package/dist/services/event-bus-service.js +17 -0
- package/dist/services/event-bus-service.js.map +1 -0
- package/dist/services/matter-service.d.ts +69 -0
- package/dist/services/matter-service.js +363 -0
- package/dist/services/matter-service.js.map +1 -0
- package/dist/services/mqtt-service.d.ts +16 -0
- package/dist/services/mqtt-service.js +97 -0
- package/dist/services/mqtt-service.js.map +1 -0
- package/dist/services/server-service.d.ts +28 -0
- package/dist/services/server-service.js +275 -0
- package/dist/services/server-service.js.map +1 -0
- package/dist/services/storage-service.d.ts +14 -0
- package/dist/services/storage-service.js +70 -0
- package/dist/services/storage-service.js.map +1 -0
- package/dist/services/webhook-service.d.ts +16 -0
- package/dist/services/webhook-service.js +68 -0
- package/dist/services/webhook-service.js.map +1 -0
- package/dist/tests/conditions.test.d.ts +1 -0
- package/dist/tests/conditions.test.js +175 -0
- package/dist/tests/conditions.test.js.map +1 -0
- package/dist/tests/matter-service.test.d.ts +1 -0
- package/dist/tests/matter-service.test.js +475 -0
- package/dist/tests/matter-service.test.js.map +1 -0
- package/dist/tests/mqtt-service.test.d.ts +1 -0
- package/dist/tests/mqtt-service.test.js +168 -0
- package/dist/tests/mqtt-service.test.js.map +1 -0
- package/dist/tests/sensor-handler.test.d.ts +1 -0
- package/dist/tests/sensor-handler.test.js +87 -0
- package/dist/tests/sensor-handler.test.js.map +1 -0
- package/dist/tests/server-service.test.d.ts +1 -0
- package/dist/tests/server-service.test.js +188 -0
- package/dist/tests/server-service.test.js.map +1 -0
- package/dist/tests/state-handler.test.d.ts +1 -0
- package/dist/tests/state-handler.test.js +276 -0
- package/dist/tests/state-handler.test.js.map +1 -0
- package/dist/tests/switch-handler.test.d.ts +1 -0
- package/dist/tests/switch-handler.test.js +186 -0
- package/dist/tests/switch-handler.test.js.map +1 -0
- package/dist/tests/trip-handler.test.d.ts +1 -0
- package/dist/tests/trip-handler.test.js +179 -0
- package/dist/tests/trip-handler.test.js.map +1 -0
- package/dist/timers/timer-manager.d.ts +31 -0
- package/dist/timers/timer-manager.js +118 -0
- package/dist/timers/timer-manager.js.map +1 -0
- package/dist/types/event-payload-map-type.d.ts +15 -0
- package/dist/types/event-payload-map-type.js +2 -0
- package/dist/types/event-payload-map-type.js.map +1 -0
- package/dist/types/event-type.d.ts +44 -0
- package/dist/types/event-type.js +20 -0
- package/dist/types/event-type.js.map +1 -0
- package/dist/types/matter-accessory-key-type.d.ts +7 -0
- package/dist/types/matter-accessory-key-type.js +2 -0
- package/dist/types/matter-accessory-key-type.js.map +1 -0
- package/dist/types/mode-type.d.ts +4 -0
- package/dist/types/mode-type.js +2 -0
- package/dist/types/mode-type.js.map +1 -0
- package/dist/types/origin-type.d.ts +9 -0
- package/dist/types/origin-type.js +11 -0
- package/dist/types/origin-type.js.map +1 -0
- package/dist/types/security-state-type.d.ts +11 -0
- package/dist/types/security-state-type.js +13 -0
- package/dist/types/security-state-type.js.map +1 -0
- package/dist/types/sensor-kind-type.d.ts +2 -0
- package/dist/types/sensor-kind-type.js +2 -0
- package/dist/types/sensor-kind-type.js.map +1 -0
- package/dist/types/service-result-type.d.ts +4 -0
- package/dist/types/service-result-type.js +2 -0
- package/dist/types/service-result-type.js.map +1 -0
- package/dist/utils/arming-util.d.ts +19 -0
- package/dist/utils/arming-util.js +24 -0
- package/dist/utils/arming-util.js.map +1 -0
- package/dist/utils/state-util.d.ts +8 -0
- package/dist/utils/state-util.js +29 -0
- package/dist/utils/state-util.js.map +1 -0
- package/docs/MQTT.md +50 -0
- package/package.json +64 -0
- package/src/@types/homebridge-lib.d.ts +11 -0
- package/src/conditions/already-triggered-condition.ts +24 -0
- package/src/conditions/arming-in-progress-condition.ts +23 -0
- package/src/conditions/arming-lock-condition.ts +50 -0
- package/src/conditions/condition.ts +31 -0
- package/src/conditions/double-knock-condition.ts +84 -0
- package/src/conditions/not-armed-condition.ts +30 -0
- package/src/conditions/trigger-already-running-condition.ts +23 -0
- package/src/constants/default-constant.ts +28 -0
- package/src/constants/homekit-constant.ts +2 -0
- package/src/constants/matter-constant.ts +69 -0
- package/src/handlers/sensor-handler.ts +78 -0
- package/src/handlers/state-handler.ts +257 -0
- package/src/handlers/switch-handler.ts +111 -0
- package/src/handlers/trip-handler.ts +193 -0
- package/src/homekit/homekit-registrar.ts +28 -0
- package/src/homekit/service-factory.ts +35 -0
- package/src/index.ts +9 -0
- package/src/interfaces/condition-context-interface.ts +15 -0
- package/src/interfaces/hap-types-interface.ts +11 -0
- package/src/interfaces/mqtt-status-payload-interface.ts +6 -0
- package/src/interfaces/options-interface.ts +116 -0
- package/src/interfaces/persisted-state-interface.ts +7 -0
- package/src/interfaces/service-registry-interface.ts +11 -0
- package/src/interfaces/system-state-interface.ts +25 -0
- package/src/schemas/arming-lock-schema.ts +12 -0
- package/src/schemas/error-schema.ts +7 -0
- package/src/schemas/mode-request-schema.ts +18 -0
- package/src/schemas/status-response-schema.ts +10 -0
- package/src/schemas/trip-mode-request-schema.ts +24 -0
- package/src/security-system-platform.ts +68 -0
- package/src/security-system.ts +199 -0
- package/src/services/command-service.ts +76 -0
- package/src/services/configuration-service.ts +224 -0
- package/src/services/event-bus-service.ts +21 -0
- package/src/services/matter-service.ts +446 -0
- package/src/services/mqtt-service.ts +123 -0
- package/src/services/server-service.ts +327 -0
- package/src/services/storage-service.ts +80 -0
- package/src/services/webhook-service.ts +77 -0
- package/src/tests/conditions.test.ts +212 -0
- package/src/tests/matter-service.test.ts +610 -0
- package/src/tests/mqtt-service.test.ts +231 -0
- package/src/tests/sensor-handler.test.ts +116 -0
- package/src/tests/server-service.test.ts +238 -0
- package/src/tests/state-handler.test.ts +371 -0
- package/src/tests/switch-handler.test.ts +234 -0
- package/src/tests/trip-handler.test.ts +244 -0
- package/src/timers/timer-manager.ts +141 -0
- package/src/types/event-payload-map-type.ts +25 -0
- package/src/types/event-type.ts +61 -0
- package/src/types/matter-accessory-key-type.ts +33 -0
- package/src/types/mode-type.ts +4 -0
- package/src/types/origin-type.ts +9 -0
- package/src/types/security-state-type.ts +11 -0
- package/src/types/sensor-kind-type.ts +2 -0
- package/src/types/service-result-type.ts +4 -0
- package/src/utils/arming-util.ts +44 -0
- package/src/utils/state-util.ts +32 -0
- package/tsconfig.json +26 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Service } from 'homebridge';
|
|
2
|
+
import type { CharacteristicConstructor } from '../interfaces/hap-types-interface.js';
|
|
3
|
+
import type { SecuritySystemOptions } from '../interfaces/options-interface.js';
|
|
4
|
+
import type { ServiceRegistry } from '../interfaces/service-registry-interface.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates the HomeKit services for the accessory. Switches and motion sensors
|
|
7
|
+
* are published over Matter only, so the HomeKit accessory only carries the
|
|
8
|
+
* security system service and its accessory information service.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildServiceRegistry(Svc: typeof Service, Char: CharacteristicConstructor, options: SecuritySystemOptions): ServiceRegistry;
|
|
11
|
+
/** Builds the list of services to expose to HomeKit. */
|
|
12
|
+
export declare function buildServiceList(svcs: ServiceRegistry): Service[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the HomeKit services for the accessory. Switches and motion sensors
|
|
3
|
+
* are published over Matter only, so the HomeKit accessory only carries the
|
|
4
|
+
* security system service and its accessory information service.
|
|
5
|
+
*/
|
|
6
|
+
export function buildServiceRegistry(Svc, Char, options) {
|
|
7
|
+
const mainSvc = new Svc.SecuritySystem(options.name);
|
|
8
|
+
mainSvc.addCharacteristic(Char.ConfiguredName);
|
|
9
|
+
const infoSvc = new Svc.AccessoryInformation();
|
|
10
|
+
infoSvc.setCharacteristic(Char.Name, options.name);
|
|
11
|
+
infoSvc.setCharacteristic(Char.Identify, true);
|
|
12
|
+
infoSvc.setCharacteristic(Char.Manufacturer, 'MiguelRipoll23');
|
|
13
|
+
infoSvc.setCharacteristic(Char.Model, 'DIY');
|
|
14
|
+
infoSvc.setCharacteristic(Char.SerialNumber, options.serialNumber);
|
|
15
|
+
return {
|
|
16
|
+
mainService: mainSvc,
|
|
17
|
+
accessoryInfoService: infoSvc,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** Builds the list of services to expose to HomeKit. */
|
|
21
|
+
export function buildServiceList(svcs) {
|
|
22
|
+
return [svcs.mainService, svcs.accessoryInfoService];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=service-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-factory.js","sourceRoot":"","sources":["../../src/homekit/service-factory.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAmB,EACnB,IAA+B,EAC/B,OAA8B;IAE9B,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,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,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,OAAO;QACL,WAAW,EAAE,OAAO;QACpB,oBAAoB,EAAE,OAAO;KAC9B,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SecuritySystemPlatform } from './security-system-platform.js';
|
|
2
|
+
const PLUGIN_NAME = 'homebridge-securitysystem';
|
|
3
|
+
const PLATFORM_NAME = 'security-system';
|
|
4
|
+
export default (api) => {
|
|
5
|
+
api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, SecuritySystemPlatform);
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,eAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAC3E,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Logging } from 'homebridge';
|
|
2
|
+
import type { OriginType } from '../types/origin-type.js';
|
|
3
|
+
import type { SecuritySystemOptions } from './options-interface.js';
|
|
4
|
+
import type { SystemState } from './system-state-interface.js';
|
|
5
|
+
/** Context passed to Condition.evaluate() to determine if an action is blocked. */
|
|
6
|
+
export interface ConditionContext {
|
|
7
|
+
state: SystemState;
|
|
8
|
+
options: SecuritySystemOptions;
|
|
9
|
+
/** The value being set (true = activating, false = deactivating). */
|
|
10
|
+
value: boolean;
|
|
11
|
+
origin: OriginType;
|
|
12
|
+
/** Logger used by conditions to emit their own warning messages when blocking. */
|
|
13
|
+
log: Logging;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-context-interface.js","sourceRoot":"","sources":["../../src/interfaces/condition-context-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { API } from 'homebridge';
|
|
2
|
+
/**
|
|
3
|
+
* Runtime type of `api.hap.Characteristic` (the class with all static characteristic
|
|
4
|
+
* definitions). Using `API['hap']['Characteristic']` avoids the self-referential
|
|
5
|
+
* `typeof Characteristic` issue that arises with `import type { Characteristic }`.
|
|
6
|
+
*/
|
|
7
|
+
export type CharacteristicConstructor = API['hap']['Characteristic'];
|
|
8
|
+
/** Runtime type of `api.hap.Service`. */
|
|
9
|
+
export type ServiceConstructor = API['hap']['Service'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hap-types-interface.js","sourceRoot":"","sources":["../../src/interfaces/hap-types-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt-status-payload-interface.js","sourceRoot":"","sources":["../../src/interfaces/mqtt-status-payload-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** A single custom trip switch entry with a user-defined label. */
|
|
2
|
+
export interface TripModeSwitch {
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
/** Fully-parsed, strongly-typed configuration options for the security system. */
|
|
6
|
+
export interface SecuritySystemOptions {
|
|
7
|
+
name: string;
|
|
8
|
+
serialNumber: string;
|
|
9
|
+
defaultMode: string;
|
|
10
|
+
armSeconds: number;
|
|
11
|
+
triggerSeconds: number;
|
|
12
|
+
resetMinutes: number;
|
|
13
|
+
saveState: boolean;
|
|
14
|
+
proxyMode: boolean;
|
|
15
|
+
testMode: boolean;
|
|
16
|
+
tripSwitchName: string;
|
|
17
|
+
tripHomeSwitchName: string;
|
|
18
|
+
tripAwaySwitchName: string;
|
|
19
|
+
tripNightSwitchName: string;
|
|
20
|
+
tripOverrideSwitchName: string;
|
|
21
|
+
modeHomeSwitchName: string;
|
|
22
|
+
modeAwaySwitchName: string;
|
|
23
|
+
modeNightSwitchName: string;
|
|
24
|
+
modeOffSwitchName: string;
|
|
25
|
+
modeAwayExtendedSwitchName: string;
|
|
26
|
+
modePauseSwitchName: string;
|
|
27
|
+
overrideOff: boolean;
|
|
28
|
+
resetOffFlow: boolean;
|
|
29
|
+
disabledModes: string[];
|
|
30
|
+
homeArmSeconds: number | null;
|
|
31
|
+
awayArmSeconds: number | null;
|
|
32
|
+
nightArmSeconds: number | null;
|
|
33
|
+
homeTriggerSeconds: number | null;
|
|
34
|
+
awayTriggerSeconds: number | null;
|
|
35
|
+
nightTriggerSeconds: number | null;
|
|
36
|
+
tripSwitch: boolean;
|
|
37
|
+
tripOverrideSwitch: boolean;
|
|
38
|
+
tripModeSwitches: boolean;
|
|
39
|
+
tripHomeSwitches: TripModeSwitch[];
|
|
40
|
+
tripAwaySwitches: TripModeSwitch[];
|
|
41
|
+
tripNightSwitches: TripModeSwitch[];
|
|
42
|
+
armingLockSwitch: boolean;
|
|
43
|
+
armingLockSwitches: boolean;
|
|
44
|
+
armingMotionSensor: boolean;
|
|
45
|
+
trippedMotionSensor: boolean;
|
|
46
|
+
trippedMotionSensorSeconds: number;
|
|
47
|
+
resetSensor: boolean;
|
|
48
|
+
modeSwitches: boolean;
|
|
49
|
+
modeOffSwitch: boolean;
|
|
50
|
+
modePauseSwitch: boolean;
|
|
51
|
+
pauseMinutes: number;
|
|
52
|
+
modeAwayExtendedSwitch: boolean;
|
|
53
|
+
modeAwayExtendedSwitchTriggerSeconds: number | null;
|
|
54
|
+
doubleKnock: boolean;
|
|
55
|
+
doubleKnockSeconds: number;
|
|
56
|
+
doubleKnockModes: string[];
|
|
57
|
+
homeDoubleKnockSeconds: number | null;
|
|
58
|
+
awayDoubleKnockSeconds: number | null;
|
|
59
|
+
nightDoubleKnockSeconds: number | null;
|
|
60
|
+
serverPort: number | null;
|
|
61
|
+
serverApiKey: string | null;
|
|
62
|
+
commandTargetHome: string | null;
|
|
63
|
+
commandTargetAway: string | null;
|
|
64
|
+
commandTargetNight: string | null;
|
|
65
|
+
commandTargetOff: string | null;
|
|
66
|
+
commandCurrentHome: string | null;
|
|
67
|
+
commandCurrentAway: string | null;
|
|
68
|
+
commandCurrentNight: string | null;
|
|
69
|
+
commandCurrentOff: string | null;
|
|
70
|
+
commandCurrentWarning: string | null;
|
|
71
|
+
commandCurrentTriggered: string | null;
|
|
72
|
+
webhookTargetHome: string | null;
|
|
73
|
+
webhookTargetAway: string | null;
|
|
74
|
+
webhookTargetNight: string | null;
|
|
75
|
+
webhookTargetOff: string | null;
|
|
76
|
+
webhookCurrentHome: string | null;
|
|
77
|
+
webhookCurrentAway: string | null;
|
|
78
|
+
webhookCurrentNight: string | null;
|
|
79
|
+
webhookCurrentOff: string | null;
|
|
80
|
+
webhookCurrentWarning: string | null;
|
|
81
|
+
webhookCurrentTriggered: string | null;
|
|
82
|
+
mqttBroker: string | null;
|
|
83
|
+
mqttUsername: string | null;
|
|
84
|
+
mqttPassword: string | null;
|
|
85
|
+
mqttTopic: string;
|
|
86
|
+
mqttClientId: string | null;
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options-interface.js","sourceRoot":"","sources":["../../src/interfaces/options-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persisted-state-interface.js","sourceRoot":"","sources":["../../src/interfaces/persisted-state-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Service } from 'homebridge';
|
|
2
|
+
/**
|
|
3
|
+
* HomeKit services exposed by the security system accessory.
|
|
4
|
+
* Switches and motion sensors are published over Matter only, so the HomeKit
|
|
5
|
+
* accessory carries just the security system itself.
|
|
6
|
+
*/
|
|
7
|
+
export interface ServiceRegistry {
|
|
8
|
+
mainService: Service;
|
|
9
|
+
accessoryInfoService: Service;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-registry-interface.js","sourceRoot":"","sources":["../../src/interfaces/service-registry-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SecurityState } from '../types/security-state-type.js';
|
|
2
|
+
/** Mutable runtime state shared across all handlers. */
|
|
3
|
+
export interface SystemState {
|
|
4
|
+
currentState: SecurityState;
|
|
5
|
+
targetState: SecurityState;
|
|
6
|
+
defaultState: SecurityState;
|
|
7
|
+
availableTargetStates: SecurityState[];
|
|
8
|
+
isArming: boolean;
|
|
9
|
+
isTripping: boolean;
|
|
10
|
+
isKnocked: boolean;
|
|
11
|
+
serverAuthenticationAttempts: number;
|
|
12
|
+
pausedCurrentState: SecurityState | null;
|
|
13
|
+
/** Arming-lock switch state. Switches are Matter-only, so the lock state lives here (was held by HAP characteristics). */
|
|
14
|
+
armingLocks: {
|
|
15
|
+
global: boolean;
|
|
16
|
+
home: boolean;
|
|
17
|
+
away: boolean;
|
|
18
|
+
night: boolean;
|
|
19
|
+
};
|
|
20
|
+
/** True while armed away via the away-extended switch; resets on any target state change. */
|
|
21
|
+
modeAwayExtended: boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-state-interface.js","sourceRoot":"","sources":["../../src/interfaces/system-state-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export const ArmingLockRequestSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
mode: z
|
|
5
|
+
.enum(['global', 'home', 'away', 'night'])
|
|
6
|
+
.openapi({ example: 'home', description: 'Arming lock mode to update' }),
|
|
7
|
+
value: z
|
|
8
|
+
.boolean()
|
|
9
|
+
.openapi({ example: true, description: 'True to enable the arming lock, false to disable it' }),
|
|
10
|
+
})
|
|
11
|
+
.openapi('ArmingLockRequest');
|
|
12
|
+
//# sourceMappingURL=arming-lock-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arming-lock-schema.js","sourceRoot":"","sources":["../../src/schemas/arming-lock-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACzC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC1E,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC;CAClG,CAAC;KACD,OAAO,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-schema.js","sourceRoot":"","sources":["../../src/schemas/error-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC3D,CAAC;KACD,OAAO,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export const ModeRequestSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
mode: z
|
|
5
|
+
.enum(['home', 'away', 'night', 'off'])
|
|
6
|
+
.openapi({ example: 'home', description: 'Target mode to activate (home, away, night, or off)' }),
|
|
7
|
+
delay: z
|
|
8
|
+
.number()
|
|
9
|
+
.int()
|
|
10
|
+
.nonnegative()
|
|
11
|
+
.optional()
|
|
12
|
+
.openapi({
|
|
13
|
+
example: 5,
|
|
14
|
+
description: 'Optional delay in seconds before applying the mode change',
|
|
15
|
+
}),
|
|
16
|
+
})
|
|
17
|
+
.openapi('ModeRequest');
|
|
18
|
+
//# sourceMappingURL=mode-request-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-request-schema.js","sourceRoot":"","sources":["../../src/schemas/mode-request-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SACtC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC;IACnG,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,2DAA2D;KACzE,CAAC;CACL,CAAC;KACD,OAAO,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export const StatusResponseSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
arming: z.boolean().openapi({ example: false, description: 'Whether the system is currently arming' }),
|
|
5
|
+
current_mode: z.string().openapi({ example: 'off', description: 'The current active mode' }),
|
|
6
|
+
target_mode: z.string().openapi({ example: 'home', description: 'The target mode being transitioned to' }),
|
|
7
|
+
tripped: z.boolean().openapi({ example: false, description: 'Whether a trip switch is active' }),
|
|
8
|
+
})
|
|
9
|
+
.openapi('StatusResponse');
|
|
10
|
+
//# sourceMappingURL=status-response-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-response-schema.js","sourceRoot":"","sources":["../../src/schemas/status-response-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;IACtG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;IAC1G,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;CACjG,CAAC;KACD,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export declare const TripModeRequestSchema: z.ZodObject<{
|
|
3
|
+
mode: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
4
|
+
away: "away";
|
|
5
|
+
home: "home";
|
|
6
|
+
night: "night";
|
|
7
|
+
}>>>;
|
|
8
|
+
delay: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
9
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export const TripModeRequestSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
mode: z
|
|
5
|
+
.enum(['home', 'away', 'night'])
|
|
6
|
+
.nullable()
|
|
7
|
+
.optional()
|
|
8
|
+
.openapi({
|
|
9
|
+
example: 'home',
|
|
10
|
+
description: 'Mode to trip. If omitted or null, the action applies to all modes.',
|
|
11
|
+
}),
|
|
12
|
+
delay: z
|
|
13
|
+
.number()
|
|
14
|
+
.int()
|
|
15
|
+
.nonnegative()
|
|
16
|
+
.nullable()
|
|
17
|
+
.optional()
|
|
18
|
+
.openapi({
|
|
19
|
+
example: 5,
|
|
20
|
+
description: 'Delay in seconds before activating the alarm.',
|
|
21
|
+
}),
|
|
22
|
+
})
|
|
23
|
+
.openapi('TripModeRequest');
|
|
24
|
+
//# sourceMappingURL=trip-mode-request-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trip-mode-request-schema.js","sourceRoot":"","sources":["../../src/schemas/trip-mode-request-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,oEAAoE;KAClF,CAAC;IACJ,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,+CAA+C;KAC7D,CAAC;CACL,CAAC;KACD,OAAO,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { API, DynamicPlatformPlugin, Logging, MatterAccessory, PlatformAccessory, PlatformConfig } from 'homebridge';
|
|
2
|
+
/**
|
|
3
|
+
* Homebridge dynamic platform that exposes the security system as a
|
|
4
|
+
* platform accessory. The accessory UUID is stable so the same HomeKit
|
|
5
|
+
* accessory is restored across restarts via homebridge's accessory cache.
|
|
6
|
+
* Optional switch/sensor accessories are additionally published over Matter
|
|
7
|
+
* when Matter is enabled on the bridge.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SecuritySystemPlatform implements DynamicPlatformPlugin {
|
|
10
|
+
private readonly log;
|
|
11
|
+
private readonly config;
|
|
12
|
+
private readonly api;
|
|
13
|
+
private readonly cachedAccessories;
|
|
14
|
+
private readonly cachedMatterAccessories;
|
|
15
|
+
constructor(log: Logging, config: PlatformConfig, api: API);
|
|
16
|
+
configureAccessory(accessory: PlatformAccessory): void;
|
|
17
|
+
configureMatterAccessory(accessory: MatterAccessory): void;
|
|
18
|
+
private setupAccessories;
|
|
19
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { SecuritySystem } from './security-system.js';
|
|
2
|
+
const PLUGIN_NAME = 'homebridge-securitysystem';
|
|
3
|
+
const PLATFORM_NAME = 'security-system';
|
|
4
|
+
/**
|
|
5
|
+
* Homebridge dynamic platform that exposes the security system as a
|
|
6
|
+
* platform accessory. The accessory UUID is stable so the same HomeKit
|
|
7
|
+
* accessory is restored across restarts via homebridge's accessory cache.
|
|
8
|
+
* Optional switch/sensor accessories are additionally published over Matter
|
|
9
|
+
* when Matter is enabled on the bridge.
|
|
10
|
+
*/
|
|
11
|
+
export class SecuritySystemPlatform {
|
|
12
|
+
log;
|
|
13
|
+
config;
|
|
14
|
+
api;
|
|
15
|
+
cachedAccessories = new Map();
|
|
16
|
+
cachedMatterAccessories = new Map();
|
|
17
|
+
constructor(log, config, api) {
|
|
18
|
+
this.log = log;
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.api = api;
|
|
21
|
+
this.api.on('didFinishLaunching', () => this.setupAccessories());
|
|
22
|
+
}
|
|
23
|
+
configureAccessory(accessory) {
|
|
24
|
+
this.cachedAccessories.set(accessory.UUID, accessory);
|
|
25
|
+
}
|
|
26
|
+
configureMatterAccessory(accessory) {
|
|
27
|
+
this.cachedMatterAccessories.set(accessory.UUID, accessory);
|
|
28
|
+
}
|
|
29
|
+
setupAccessories() {
|
|
30
|
+
const uuid = this.api.hap.uuid.generate(PLATFORM_NAME);
|
|
31
|
+
const cached = this.cachedAccessories.get(uuid);
|
|
32
|
+
let system;
|
|
33
|
+
if (cached) {
|
|
34
|
+
this.cachedAccessories.delete(uuid);
|
|
35
|
+
this.log.info('Restoring cached accessory:', cached.displayName);
|
|
36
|
+
system = new SecuritySystem(this.log, this.config, this.api, cached);
|
|
37
|
+
this.api.updatePlatformAccessories([cached]);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const accessory = new this.api.platformAccessory('Security System', uuid, 11 /* this.api.hap.Categories.SECURITY_SYSTEM */);
|
|
41
|
+
system = new SecuritySystem(this.log, this.config, this.api, accessory);
|
|
42
|
+
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
43
|
+
// Remove any cached accessories that are no longer configured.
|
|
44
|
+
for (const stale of this.cachedAccessories.values()) {
|
|
45
|
+
this.log.info('Removing unconfigured accessory:', stale.displayName);
|
|
46
|
+
this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [stale]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Publish the configured Matter accessories (no-op when Matter is disabled).
|
|
50
|
+
system.setupMatterAccessories(this.cachedMatterAccessories).catch((error) => {
|
|
51
|
+
this.log.error('Failed to register Matter accessories.');
|
|
52
|
+
this.log.error(String(error));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=security-system-platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-system-platform.js","sourceRoot":"","sources":["../src/security-system-platform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IAKd,GAAG;IACH,MAAM;IACN,GAAG;IANL,iBAAiB,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,uBAAuB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9E,YACmB,GAAY,EACZ,MAAsB,EACtB,GAAQ;mBAFR,GAAG;sBACH,MAAM;mBACN,GAAG;QAEpB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,wBAAwB,CAAC,SAA0B;QACjD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAEO,gBAAgB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,MAAsB,CAAC;QAE3B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAC9C,iBAAiB,EACjB,IAAI,mDAEL,CAAC;YACF,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAE9E,+DAA+D;YAC/D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBACrE,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACnF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { API, Logging, MatterAccessory, PlatformAccessory } from 'homebridge';
|
|
2
|
+
export declare class SecuritySystem {
|
|
3
|
+
private readonly log;
|
|
4
|
+
private readonly api;
|
|
5
|
+
private readonly accessory;
|
|
6
|
+
private readonly options;
|
|
7
|
+
private readonly state;
|
|
8
|
+
private readonly svcs;
|
|
9
|
+
private readonly serviceList;
|
|
10
|
+
private readonly bus;
|
|
11
|
+
private readonly stateHandler;
|
|
12
|
+
private readonly tripHandler;
|
|
13
|
+
private readonly switchHandler;
|
|
14
|
+
private readonly sensorHandler;
|
|
15
|
+
private readonly storageService;
|
|
16
|
+
private readonly matterService;
|
|
17
|
+
constructor(log: Logging, config: Record<string, unknown>, api: API, accessory: PlatformAccessory);
|
|
18
|
+
/**
|
|
19
|
+
* Registers all configured switch/sensor accessories over Matter.
|
|
20
|
+
* No-op when Matter is disabled on the bridge.
|
|
21
|
+
*/
|
|
22
|
+
setupMatterAccessories(cachedAccessories: Map<string, MatterAccessory>): Promise<void>;
|
|
23
|
+
/** Replaces the accessory's auto-created information service and adds all exposed services. */
|
|
24
|
+
private populateAccessory;
|
|
25
|
+
private buildState;
|
|
26
|
+
private calcAvailableTargetStates;
|
|
27
|
+
private logStartup;
|
|
28
|
+
}
|