homebridge-broadlink-rm-blaster 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { PlatformConfig } from 'homebridge';
2
+ export interface RmDeviceConfig {
3
+ name: string;
4
+ ip: string;
5
+ enableTemperatureHumidity?: boolean;
6
+ }
7
+ export type BasicAccessoryType = 'light' | 'switch' | 'outlet' | 'fan';
8
+ export interface BasicAccessoryConfig {
9
+ name: string;
10
+ rmDevice: string;
11
+ accessoryType: BasicAccessoryType;
12
+ powerOnCode: string;
13
+ powerOffCode?: string;
14
+ }
15
+ export interface BrightnessLevelConfig {
16
+ level: number;
17
+ code: string;
18
+ }
19
+ export interface DimmerAccessoryConfig {
20
+ name: string;
21
+ rmDevice: string;
22
+ powerOnCode: string;
23
+ powerOffCode: string;
24
+ useLastKnownBrightness?: boolean;
25
+ useDefaultBrightnessLevel?: boolean;
26
+ defaultBrightnessLevel?: number;
27
+ useMaxBrightnessLevel?: boolean;
28
+ maxBrightnessLevel?: number;
29
+ zeroPercentCode: string;
30
+ hundredPercentCode: string;
31
+ debounceSeconds?: number;
32
+ levels: BrightnessLevelConfig[];
33
+ }
34
+ export interface TvAccessoryConfig {
35
+ name: string;
36
+ rmDevice: string;
37
+ powerOnCode: string;
38
+ powerOffCode?: string;
39
+ volumeUpCode?: string;
40
+ volumeDownCode?: string;
41
+ muteCode?: string;
42
+ arrowUpCode?: string;
43
+ arrowDownCode?: string;
44
+ arrowLeftCode?: string;
45
+ arrowRightCode?: string;
46
+ selectCode?: string;
47
+ infoCode?: string;
48
+ backCode?: string;
49
+ exitCode?: string;
50
+ }
51
+ export interface BlasterPlatformConfig extends PlatformConfig {
52
+ rmDevices: RmDeviceConfig[];
53
+ accessories?: BasicAccessoryConfig[];
54
+ dimmers?: DimmerAccessoryConfig[];
55
+ tvs?: TvAccessoryConfig[];
56
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=configTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configTypes.js","sourceRoot":"","sources":["../src/configTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { API } from 'homebridge';
2
+ declare const _default: (api: API) => void;
3
+ export = _default;
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ const settings_1 = require("./settings");
3
+ const platform_1 = require("./platform");
4
+ module.exports = (api) => {
5
+ api.registerPlatform(settings_1.PLATFORM_NAME, platform_1.BroadlinkRMBlasterPlatform);
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,yCAA2C;AAC3C,yCAAwD;AAExD,iBAAS,CAAC,GAAQ,EAAQ,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,wBAAa,EAAE,qCAA0B,CAAC,CAAC;AAClE,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { API, Characteristic, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service } from 'homebridge';
2
+ import { BroadlinkClient } from './broadlinkClient';
3
+ export declare class BroadlinkRMBlasterPlatform implements DynamicPlatformPlugin {
4
+ readonly log: Logger;
5
+ readonly config: PlatformConfig;
6
+ readonly api: API;
7
+ readonly Service: typeof Service;
8
+ readonly Characteristic: typeof Characteristic;
9
+ readonly accessories: PlatformAccessory[];
10
+ readonly broadlinkClient: BroadlinkClient;
11
+ private readonly activeUuids;
12
+ constructor(log: Logger, config: PlatformConfig, api: API);
13
+ configureAccessory(accessory: PlatformAccessory): void;
14
+ private discoverAccessories;
15
+ private resolveRmDeviceIp;
16
+ private publishTvAccessories;
17
+ private upsertAccessory;
18
+ private pruneStaleAccessories;
19
+ }
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BroadlinkRMBlasterPlatform = void 0;
4
+ const broadlinkClient_1 = require("./broadlinkClient");
5
+ const settings_1 = require("./settings");
6
+ const basicAccessory_1 = require("./accessories/basicAccessory");
7
+ const dimmerAccessory_1 = require("./accessories/dimmerAccessory");
8
+ const tvAccessory_1 = require("./accessories/tvAccessory");
9
+ const temperatureHumiditySensorAccessory_1 = require("./accessories/temperatureHumiditySensorAccessory");
10
+ class BroadlinkRMBlasterPlatform {
11
+ log;
12
+ config;
13
+ api;
14
+ Service;
15
+ Characteristic;
16
+ accessories = [];
17
+ broadlinkClient;
18
+ activeUuids = new Set();
19
+ constructor(log, config, api) {
20
+ this.log = log;
21
+ this.config = config;
22
+ this.api = api;
23
+ this.Service = this.api.hap.Service;
24
+ this.Characteristic = this.api.hap.Characteristic;
25
+ this.broadlinkClient = new broadlinkClient_1.BroadlinkClient(this.log);
26
+ this.api.on('didFinishLaunching', () => {
27
+ this.discoverAccessories();
28
+ });
29
+ }
30
+ configureAccessory(accessory) {
31
+ this.accessories.push(accessory);
32
+ }
33
+ discoverAccessories() {
34
+ const config = this.config;
35
+ this.activeUuids.clear();
36
+ for (const accessoryConfig of config.accessories ?? []) {
37
+ const ip = this.resolveRmDeviceIp(config, accessoryConfig.rmDevice);
38
+ if (!ip) {
39
+ this.log.warn(`Skipping accessory "${accessoryConfig.name}": no RM device named "${accessoryConfig.rmDevice}" configured`);
40
+ continue;
41
+ }
42
+ const uuid = this.api.hap.uuid.generate(`${settings_1.PLUGIN_NAME}:${accessoryConfig.name}`);
43
+ this.upsertAccessory(uuid, accessoryConfig.name, (accessory) => {
44
+ accessory.context.accessoryConfig = accessoryConfig;
45
+ new basicAccessory_1.BasicAccessory(this, accessory, accessoryConfig, ip);
46
+ });
47
+ }
48
+ for (const dimmerConfig of config.dimmers ?? []) {
49
+ const ip = this.resolveRmDeviceIp(config, dimmerConfig.rmDevice);
50
+ if (!ip) {
51
+ this.log.warn(`Skipping dimmer "${dimmerConfig.name}": no RM device named "${dimmerConfig.rmDevice}" configured`);
52
+ continue;
53
+ }
54
+ if (dimmerConfig.levels.length === 0) {
55
+ this.log.warn(`Skipping dimmer "${dimmerConfig.name}": no brightness levels configured`);
56
+ continue;
57
+ }
58
+ const uuid = this.api.hap.uuid.generate(`${settings_1.PLUGIN_NAME}:dimmer:${dimmerConfig.name}`);
59
+ this.upsertAccessory(uuid, dimmerConfig.name, (accessory) => {
60
+ accessory.context.dimmerConfig = dimmerConfig;
61
+ new dimmerAccessory_1.DimmerAccessory(this, accessory, dimmerConfig, ip);
62
+ });
63
+ }
64
+ this.publishTvAccessories(config);
65
+ for (const rmDevice of config.rmDevices ?? []) {
66
+ if (!rmDevice.enableTemperatureHumidity) {
67
+ continue;
68
+ }
69
+ const sensorName = `${rmDevice.name} Sensor`;
70
+ const uuid = this.api.hap.uuid.generate(`${settings_1.PLUGIN_NAME}:sensor:${rmDevice.name}`);
71
+ this.upsertAccessory(uuid, sensorName, (accessory) => {
72
+ new temperatureHumiditySensorAccessory_1.TemperatureHumiditySensorAccessory(this, accessory, rmDevice.ip, sensorName);
73
+ });
74
+ }
75
+ this.pruneStaleAccessories();
76
+ }
77
+ // Every accessory now references its RM by name (rmDevice) instead of an
78
+ // optional ip/"use the default" override, since there's no longer a single
79
+ // default device once multiple RM devices are configured.
80
+ resolveRmDeviceIp(config, rmDeviceName) {
81
+ return config.rmDevices?.find((device) => device.name === rmDeviceName)?.ip;
82
+ }
83
+ // TVs can't go through upsertAccessory's normal bridged path: HomeKit only
84
+ // renders a proper TV tile/remote for a Television service when it's
85
+ // published as its own external accessory (a bridged Television service
86
+ // shows up as a generic "unsupported device"). External accessories aren't
87
+ // cached/restored via configureAccessory() the way bridged ones are, so a
88
+ // fresh PlatformAccessory has to be built and republished on every
89
+ // didFinishLaunching - the stable UUID is what keeps the same HomeKit
90
+ // pairing across restarts, not any caching on our end. Each TV also needs
91
+ // to be added to the Home app separately, using the setup code Homebridge
92
+ // logs for it - it won't just appear alongside the bridged accessories.
93
+ publishTvAccessories(config) {
94
+ const externalAccessories = [];
95
+ for (const tvConfig of config.tvs ?? []) {
96
+ const ip = this.resolveRmDeviceIp(config, tvConfig.rmDevice);
97
+ if (!ip) {
98
+ this.log.warn(`Skipping TV "${tvConfig.name}": no RM device named "${tvConfig.rmDevice}" configured`);
99
+ continue;
100
+ }
101
+ const uuid = this.api.hap.uuid.generate(`${settings_1.PLUGIN_NAME}:tv:${tvConfig.name}`);
102
+ const accessory = new this.api.platformAccessory(tvConfig.name, uuid);
103
+ accessory.context.tvConfig = tvConfig;
104
+ // Fully configures every service/characteristic (including
105
+ // accessory.category) - must happen before publishing below, since
106
+ // HomeKit mishandles services added to an already-published accessory.
107
+ new tvAccessory_1.TvAccessory(this, accessory, tvConfig, ip);
108
+ externalAccessories.push(accessory);
109
+ }
110
+ if (externalAccessories.length > 0) {
111
+ this.log.info(`Publishing ${externalAccessories.length} TV(s) as external accessories - ` +
112
+ 'add each one manually in the Home app using the setup code logged for it below.');
113
+ this.api.publishExternalAccessories(settings_1.PLUGIN_NAME, externalAccessories);
114
+ }
115
+ }
116
+ upsertAccessory(uuid, name, setup) {
117
+ this.activeUuids.add(uuid);
118
+ const existingAccessory = this.accessories.find((accessory) => accessory.UUID === uuid);
119
+ if (existingAccessory) {
120
+ setup(existingAccessory);
121
+ this.api.updatePlatformAccessories([existingAccessory]);
122
+ }
123
+ else {
124
+ this.log.info(`Adding accessory: ${name}`);
125
+ const accessory = new this.api.platformAccessory(name, uuid);
126
+ setup(accessory);
127
+ this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
128
+ this.accessories.push(accessory);
129
+ }
130
+ }
131
+ pruneStaleAccessories() {
132
+ const staleAccessories = this.accessories.filter((accessory) => !this.activeUuids.has(accessory.UUID));
133
+ if (staleAccessories.length === 0) {
134
+ return;
135
+ }
136
+ for (const accessory of staleAccessories) {
137
+ this.log.info(`Removing stale accessory: ${accessory.displayName}`);
138
+ }
139
+ this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, staleAccessories);
140
+ for (const accessory of staleAccessories) {
141
+ const index = this.accessories.indexOf(accessory);
142
+ if (index !== -1) {
143
+ this.accessories.splice(index, 1);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ exports.BroadlinkRMBlasterPlatform = BroadlinkRMBlasterPlatform;
149
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PLATFORM_NAME = "BroadlinkRMBlaster";
2
+ export declare const PLUGIN_NAME = "homebridge-broadlink-rm-blaster";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
4
+ exports.PLATFORM_NAME = 'BroadlinkRMBlaster';
5
+ exports.PLUGIN_NAME = 'homebridge-broadlink-rm-blaster';
6
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,oBAAoB,CAAC;AACrC,QAAA,WAAW,GAAG,iCAAiC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "homebridge-broadlink-rm-blaster",
3
+ "version": "1.0.0",
4
+ "description": "Blast RF and IR signals from Broadlink RM devices using Homebridge",
5
+ "author": "Luud Jacobs",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/LuudJacobs/homebridge-broadlink-rm-blaster#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/LuudJacobs/homebridge-broadlink-rm-blaster.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/LuudJacobs/homebridge-broadlink-rm-blaster/issues"
14
+ },
15
+ "engines": {
16
+ "node": "^18.15.0 || ^20.7.0 || ^22 || ^24",
17
+ "homebridge": "^1.8.0 || ^2.0.0"
18
+ },
19
+ "main": "dist/index.js",
20
+ "bin": {
21
+ "broadlink-rm-blaster": "dist/cli.js"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "config.schema.json"
26
+ ],
27
+ "keywords": [
28
+ "homebridge",
29
+ "homebridge-plugin",
30
+ "broadlink",
31
+ "rm4",
32
+ "rm"
33
+ ],
34
+ "scripts": {
35
+ "build": "rimraf dist && tsc",
36
+ "prepare": "npm run build",
37
+ "watch": "npm run build && homebridge -D",
38
+ "lint": "eslint src test",
39
+ "test": "rimraf dist-test && tsc -p tsconfig.test.json && node --test \"dist-test/test/**/*.test.js\"",
40
+ "prepublishOnly": "npm run lint && npm run build"
41
+ },
42
+ "dependencies": {
43
+ "kiwicam-broadlinkjs-rm": "^0.9.22"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.10.5",
47
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
48
+ "@typescript-eslint/parser": "^7.18.0",
49
+ "eslint": "^8.57.1",
50
+ "homebridge": "^1.8.0",
51
+ "rimraf": "^6.0.1",
52
+ "typescript": "^5.7.3"
53
+ }
54
+ }