homebridge-broadlink-rm-blaster 1.0.4 → 1.1.1

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/README.md CHANGED
@@ -20,6 +20,8 @@ remotes, see [learn-broadlink-rm4-codes](https://github.com/LuudJacobs/learn-bro
20
20
  - **TVs** power on/off plus a usable remote (arrows, select, back, exit, info,
21
21
  volume, mute) in the iOS Remote app
22
22
  - **Temperature/humidity sensor** polls the RM every 60 seconds, on by default.
23
+ - **ntfy.sh notifications** optional push notification the first time an RM
24
+ device fails to connect.
23
25
  - Fully configurable via the Homebridge Config UI X plugin settings form.
24
26
 
25
27
  ## Setup and Usage
@@ -58,6 +60,7 @@ If you'd rather edit the config file directly, here's an example
58
60
  ```json
59
61
  {
60
62
  "platform": "BroadlinkRMBlaster",
63
+ "ntfyTopic": "my-homebridge-alerts",
61
64
  "rmDevices": [
62
65
  {
63
66
  "name": "Default RM",
@@ -120,9 +123,18 @@ If you'd rather edit the config file directly, here's an example
120
123
  }
121
124
  ```
122
125
 
126
+ - `ntfyTopic`: optional. If set, this plugin publishes a notification to
127
+ `https://ntfy.sh/<topic>` the first time a given RM device fails to
128
+ connect - subscribe to the same topic in the [ntfy](https://ntfy.sh) app to
129
+ receive it. Only fires once per outage; it resets once that device
130
+ connects successfully again. The temperature/humidity sensor also triggers
131
+ this after 5 consecutive failed readings (see below), reusing the same
132
+ once-per-outage behavior.
123
133
  - `rmDevices`: at least one required. Each needs a unique `name` and `ip`;
124
134
  `enableTemperatureHumidity` (defaults to `true`) adds a temperature/humidity
125
- sensor accessory for that specific device.
135
+ sensor accessory for that specific device. If a reading fails 5 times in a
136
+ row, the sensor shows "No Response" in Home (rather than a frozen stale
137
+ value) and, if `ntfyTopic` is set, sends a notification.
126
138
  - `rmDevice` on every accessory/dimmer/TV below is a plain text field that
127
139
  must exactly match the `name` of one of the devices above. There's no
128
140
  live dropdown, since Homebridge's config UI can't populate one from
@@ -6,6 +6,12 @@
6
6
  "schema": {
7
7
  "type": "object",
8
8
  "properties": {
9
+ "ntfyTopic": {
10
+ "title": "ntfy.sh Notification Topic",
11
+ "type": "string",
12
+ "required": false,
13
+ "description": "Optional. If set, sends a push notification via ntfy.sh the first time an RM device fails to connect, so a dead/unreachable device doesn't fail silently. Subscribe to this topic in the ntfy app to receive it."
14
+ },
9
15
  "rmDevices": {
10
16
  "title": "Broadlink RM Devices",
11
17
  "type": "array",
@@ -289,6 +295,7 @@
289
295
  }
290
296
  },
291
297
  "layout": [
298
+ "ntfyTopic",
292
299
  {
293
300
  "type": "array",
294
301
  "key": "rmDevices",
@@ -5,6 +5,7 @@ export declare class TemperatureHumiditySensorAccessory {
5
5
  private readonly accessory;
6
6
  private readonly ip;
7
7
  private readonly name;
8
+ private consecutiveFailures;
8
9
  constructor(platform: BroadlinkRMBlasterPlatform, accessory: PlatformAccessory, ip: string, name: string);
9
10
  private getTemperature;
10
11
  private getHumidity;
@@ -2,11 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TemperatureHumiditySensorAccessory = void 0;
4
4
  const POLL_INTERVAL_MS = 60_000;
5
+ // A single poll failure is normal RF/network noise. Only treat the sensor as
6
+ // actually unreachable (clear the cached reading, notify) after this many in
7
+ // a row - avoids flapping to "No Response" and a notification on one blip.
8
+ const MAX_CONSECUTIVE_FAILURES = 5;
5
9
  class TemperatureHumiditySensorAccessory {
6
10
  platform;
7
11
  accessory;
8
12
  ip;
9
13
  name;
14
+ consecutiveFailures = 0;
10
15
  constructor(platform, accessory, ip, name) {
11
16
  this.platform = platform;
12
17
  this.accessory = accessory;
@@ -50,6 +55,8 @@ class TemperatureHumiditySensorAccessory {
50
55
  async poll() {
51
56
  try {
52
57
  const { temperature, humidity } = await this.platform.broadlinkClient.readTemperatureHumidity(this.ip);
58
+ this.consecutiveFailures = 0;
59
+ this.platform.notifier.notifyConnectionRecovered(this.ip);
53
60
  this.accessory.context.temperature = temperature;
54
61
  this.accessory.context.humidity = humidity;
55
62
  this.accessory.getService(this.platform.Service.TemperatureSensor)
@@ -59,6 +66,12 @@ class TemperatureHumiditySensorAccessory {
59
66
  }
60
67
  catch (error) {
61
68
  this.platform.log.warn(`Failed to read temperature/humidity from ${this.ip}: ${error.message}`);
69
+ this.consecutiveFailures++;
70
+ if (this.consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
71
+ this.accessory.context.temperature = undefined;
72
+ this.accessory.context.humidity = undefined;
73
+ this.platform.notifier.notifyConnectionFailure(this.ip, error);
74
+ }
62
75
  }
63
76
  }
64
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"temperatureHumiditySensorAccessory.js","sourceRoot":"","sources":["../../src/accessories/temperatureHumiditySensorAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"temperatureHumiditySensorAccessory.js","sourceRoot":"","sources":["../../src/accessories/temperatureHumiditySensorAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from 'homebridge';
2
+ import type { NtfyNotifier } from './ntfyNotifier';
2
3
  export declare function parseHexCode(hexCode: string): Buffer;
3
4
  export interface TemperatureHumidityReading {
4
5
  temperature: number;
@@ -6,9 +7,10 @@ export interface TemperatureHumidityReading {
6
7
  }
7
8
  export declare class BroadlinkClient {
8
9
  private readonly log;
10
+ private readonly notifier?;
9
11
  private readonly broadlinkInstances;
10
12
  private readonly devices;
11
- constructor(log: Logger);
13
+ constructor(log: Logger, notifier?: NtfyNotifier | undefined);
12
14
  private getBroadlink;
13
15
  private getDevice;
14
16
  sendCode(ip: string, hexCode: string): Promise<void>;
@@ -25,6 +25,7 @@ function parseHexCode(hexCode) {
25
25
  const PLACEHOLDER_MAC = Buffer.alloc(6, 0);
26
26
  class BroadlinkClient {
27
27
  log;
28
+ notifier;
28
29
  // kiwicam-broadlinkjs-rm's own Broadlink.addDevice() keys its internal
29
30
  // device registry by MAC address, not by IP. Every device has to use the
30
31
  // same PLACEHOLDER_MAC (see above - the device itself breaks on any other
@@ -35,8 +36,9 @@ class BroadlinkClient {
35
36
  // placeholder MAC never collides across devices.
36
37
  broadlinkInstances = new Map();
37
38
  devices = new Map();
38
- constructor(log) {
39
+ constructor(log, notifier) {
39
40
  this.log = log;
41
+ this.notifier = notifier;
40
42
  }
41
43
  getBroadlink(ip) {
42
44
  let instance = this.broadlinkInstances.get(ip);
@@ -55,7 +57,9 @@ class BroadlinkClient {
55
57
  devicePromise = new Promise((resolve, reject) => {
56
58
  const timeout = setTimeout(() => {
57
59
  broadlink.removeListener('deviceReady', onReady);
58
- reject(new Error(`Timed out authenticating with Broadlink RM at ${ip}`));
60
+ const error = new Error(`Timed out authenticating with Broadlink RM at ${ip}`);
61
+ this.notifier?.notifyConnectionFailure(ip, error);
62
+ reject(error);
59
63
  }, AUTH_TIMEOUT_MS);
60
64
  const onReady = (device) => {
61
65
  if (device.host.address !== ip) {
@@ -64,6 +68,7 @@ class BroadlinkClient {
64
68
  clearTimeout(timeout);
65
69
  broadlink.removeListener('deviceReady', onReady);
66
70
  this.log.info(`Connected to Broadlink RM at ${ip}`);
71
+ this.notifier?.notifyConnectionRecovered(ip);
67
72
  resolve(device);
68
73
  };
69
74
  broadlink.on('deviceReady', onReady);
@@ -1 +1 @@
1
- {"version":3,"file":"broadlinkClient.js","sourceRoot":"","sources":["../src/broadlinkClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"broadlinkClient.js","sourceRoot":"","sources":["../src/broadlinkClient.ts"],"names":[],"mappings":"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"}
@@ -53,4 +53,5 @@ export interface BlasterPlatformConfig extends PlatformConfig {
53
53
  accessories?: BasicAccessoryConfig[];
54
54
  dimmers?: DimmerAccessoryConfig[];
55
55
  tvs?: TvAccessoryConfig[];
56
+ ntfyTopic?: string;
56
57
  }
@@ -0,0 +1,10 @@
1
+ import type { Logger } from 'homebridge';
2
+ export declare class NtfyNotifier {
3
+ private readonly log;
4
+ private readonly topic;
5
+ private readonly deviceNames;
6
+ private readonly notifiedIps;
7
+ constructor(log: Logger, topic: string | undefined, deviceNames: Map<string, string>);
8
+ notifyConnectionFailure(ip: string, error: Error): void;
9
+ notifyConnectionRecovered(ip: string): void;
10
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NtfyNotifier = void 0;
4
+ const NTFY_BASE_URL = 'https://ntfy.sh';
5
+ // Tracks which RM devices we've already sent a failure notification for, so
6
+ // a device that's down for a while only triggers one notification instead of
7
+ // one per failed request. Cleared once the device connects successfully
8
+ // again, so a later outage notifies again.
9
+ class NtfyNotifier {
10
+ log;
11
+ topic;
12
+ deviceNames;
13
+ notifiedIps = new Set();
14
+ constructor(log, topic, deviceNames) {
15
+ this.log = log;
16
+ this.topic = topic;
17
+ this.deviceNames = deviceNames;
18
+ }
19
+ notifyConnectionFailure(ip, error) {
20
+ if (!this.topic || this.notifiedIps.has(ip)) {
21
+ return;
22
+ }
23
+ this.notifiedIps.add(ip);
24
+ const deviceName = this.deviceNames.get(ip) ?? ip;
25
+ fetch(`${NTFY_BASE_URL}/${this.topic}`, {
26
+ method: 'POST',
27
+ headers: { Title: `Homebridge: Connection to Broadlink ${deviceName} Failed!` },
28
+ body: error.message,
29
+ }).catch((notifyError) => {
30
+ const message = notifyError instanceof Error ? notifyError.message : String(notifyError);
31
+ this.log.warn(`Failed to send ntfy notification: ${message}`);
32
+ });
33
+ }
34
+ notifyConnectionRecovered(ip) {
35
+ this.notifiedIps.delete(ip);
36
+ }
37
+ }
38
+ exports.NtfyNotifier = NtfyNotifier;
39
+ //# sourceMappingURL=ntfyNotifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ntfyNotifier.js","sourceRoot":"","sources":["../src/ntfyNotifier.ts"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,2CAA2C;AAC3C,MAAa,YAAY;IAIJ;IACA;IACA;IALF,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjD,YACmB,GAAW,EACX,KAAyB,EACzB,WAAgC;QAFhC,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAoB;QACzB,gBAAW,GAAX,WAAW,CAAqB;IAChD,CAAC;IAEJ,uBAAuB,CAAC,EAAU,EAAE,KAAY;QAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAClD,KAAK,CAAC,GAAG,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,KAAK,EAAE,uCAAuC,UAAU,UAAU,EAAE;YAC/E,IAAI,EAAE,KAAK,CAAC,OAAO;SACpB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAoB,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,EAAU;QAClC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AA7BD,oCA6BC"}
@@ -1,5 +1,6 @@
1
1
  import type { API, Characteristic, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service } from 'homebridge';
2
2
  import { BroadlinkClient } from './broadlinkClient';
3
+ import { NtfyNotifier } from './ntfyNotifier';
3
4
  export declare class BroadlinkRMBlasterPlatform implements DynamicPlatformPlugin {
4
5
  readonly log: Logger;
5
6
  readonly config: PlatformConfig;
@@ -8,6 +9,7 @@ export declare class BroadlinkRMBlasterPlatform implements DynamicPlatformPlugin
8
9
  readonly Characteristic: typeof Characteristic;
9
10
  readonly accessories: PlatformAccessory[];
10
11
  readonly broadlinkClient: BroadlinkClient;
12
+ readonly notifier: NtfyNotifier;
11
13
  private readonly activeUuids;
12
14
  constructor(log: Logger, config: PlatformConfig, api: API);
13
15
  configureAccessory(accessory: PlatformAccessory): void;
package/dist/platform.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BroadlinkRMBlasterPlatform = void 0;
4
4
  const broadlinkClient_1 = require("./broadlinkClient");
5
+ const ntfyNotifier_1 = require("./ntfyNotifier");
5
6
  const settings_1 = require("./settings");
6
7
  const basicAccessory_1 = require("./accessories/basicAccessory");
7
8
  const dimmerAccessory_1 = require("./accessories/dimmerAccessory");
@@ -15,6 +16,7 @@ class BroadlinkRMBlasterPlatform {
15
16
  Characteristic;
16
17
  accessories = [];
17
18
  broadlinkClient;
19
+ notifier;
18
20
  activeUuids = new Set();
19
21
  constructor(log, config, api) {
20
22
  this.log = log;
@@ -22,7 +24,13 @@ class BroadlinkRMBlasterPlatform {
22
24
  this.api = api;
23
25
  this.Service = this.api.hap.Service;
24
26
  this.Characteristic = this.api.hap.Characteristic;
25
- this.broadlinkClient = new broadlinkClient_1.BroadlinkClient(this.log);
27
+ const blasterConfig = config;
28
+ const deviceNames = new Map();
29
+ for (const rmDevice of blasterConfig.rmDevices ?? []) {
30
+ deviceNames.set(rmDevice.ip, rmDevice.name);
31
+ }
32
+ this.notifier = new ntfyNotifier_1.NtfyNotifier(this.log, blasterConfig.ntfyTopic, deviceNames);
33
+ this.broadlinkClient = new broadlinkClient_1.BroadlinkClient(this.log, this.notifier);
26
34
  this.api.on('didFinishLaunching', () => {
27
35
  this.discoverAccessories();
28
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-broadlink-rm-blaster",
3
- "version": "1.0.4",
3
+ "version": "1.1.1",
4
4
  "description": "Blast RF and IR signals from Broadlink RM devices using Homebridge",
5
5
  "author": "Luud Jacobs",
6
6
  "license": "MIT",