homebridge-ratgdo 2.1.0 → 2.1.2
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 +25 -3
- package/config.schema.json +3 -28
- package/dist/ratgdo-device.d.ts +3 -3
- package/dist/ratgdo-device.js +37 -26
- package/dist/ratgdo-device.js.map +1 -1
- package/dist/ratgdo-options.d.ts +0 -1
- package/dist/ratgdo-options.js +1 -1
- package/dist/ratgdo-options.js.map +1 -1
- package/dist/ratgdo-platform.d.ts +1 -2
- package/dist/ratgdo-platform.js +131 -140
- package/dist/ratgdo-platform.js.map +1 -1
- package/dist/settings.d.ts +0 -1
- package/dist/settings.js +0 -2
- package/dist/settings.js.map +1 -1
- package/package.json +7 -8
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
## Why use this plugin for Ratgdo support in HomeKit?
|
|
20
20
|
In a nutshell, the aim of this plugin for things to *just work* with minimal required configuration by users. The goal is to provide as close to a streamlined experience as you would expect from a first-party or native HomeKit solution. For the adventurous, those additional granular options are, of course, available to support more esoteric use cases or other unique needs.
|
|
21
21
|
|
|
22
|
-
What does *just work* mean in practice? It means that this plugin will discover all your Ratgdo devices
|
|
22
|
+
What does *just work* mean in practice? It means that this plugin will discover all your Ratgdo devices that are running the Ratgdo ESPHome firmware without the need for additional configuration.
|
|
23
23
|
|
|
24
24
|
**I rely on this plugin every day and actively maintain and support it.**
|
|
25
25
|
|
|
@@ -30,18 +30,40 @@ In the interest of the community seeking a solution outside of myQ, I've develop
|
|
|
30
30
|
* Control of the light attached to the garage door opener, when available.
|
|
31
31
|
* Obstruction detection.
|
|
32
32
|
* Occupancy sensor support.
|
|
33
|
+
* Ability to lock and unlock the garage door opener through the ability to lockout wireless remotes.
|
|
33
34
|
* Read-only garage door opener support.
|
|
34
35
|
* Automation switch and dimmer support, allowing you to set the garage door to any position.
|
|
35
36
|
* A rich webUI for configuration.
|
|
36
37
|
|
|
37
|
-
##
|
|
38
|
+
## Installation
|
|
39
|
+
### Getting Started
|
|
38
40
|
To get started with `homebridge-ratgdo`:
|
|
39
41
|
|
|
40
|
-
* Install `homebridge-ratgdo` using the Homebridge webUI. Make sure you make `homebridge-ratgdo` a child bridge for the best
|
|
42
|
+
* Install `homebridge-ratgdo` using the Homebridge webUI. Make sure you make `homebridge-ratgdo` a child bridge for the best experience.
|
|
41
43
|
* Install the [ESPHome Ratgdo firmware](https://ratgdo.github.io/esphome-ratgdo/). You'll need to use Chrome for this as Safari doesn't support installing firmware through a USB serial port.
|
|
42
44
|
* Fully open and close the garage door one time. ESPHome Ratgdo will use this to determine how long it takes to open and close your garage door to enable precise control of the position of the garage door opener.
|
|
43
45
|
* That's it. Ensure `homebridge-ratgdo` is running and it will autodiscover your Ratgdo devices and make them available in HomeKit.
|
|
44
46
|
|
|
47
|
+
> [!TIP]
|
|
48
|
+
> If you would like to tailor your experience a bit further, you can choose to use the [hombridge-ratgdo ESPHome YAML configuration file](https://github.com/hjdhjd/homebridge-ratgdo/blob/main/homebridge-ratgdo.yaml) and use it to create a more customized Ratgdo ESPHome firmware. Using this firmware allows you to do the following things for those using Ratgdo hardware revision 2.5 or beyond:
|
|
49
|
+
>
|
|
50
|
+
> * The ability to customize the name (and friendly name) of the Ratgdo device. Though cosmetic, it can be helpful when you have multiple Ratgdo devices.
|
|
51
|
+
> * Use SNTP to set the time on the Ratgdo device. Not strictly necessary, but good hygeine.
|
|
52
|
+
> * Allows you to configure the timezone either yourself or automatically. The timezone will be autoconfigured using the World Time API geoIP by default.
|
|
53
|
+
> * Set the interval to check for updates from the Ratgdo repository to every 6 hours instead of the Ratgdo default of every second.
|
|
54
|
+
>
|
|
55
|
+
> **Using this YAML is completely optional and largely for cosmetic purposes. There are no functional differences between using this custom YAML configuration and the default Ratgdp ESPHome one.**
|
|
56
|
+
|
|
57
|
+
## Documentation
|
|
58
|
+
* Getting Started
|
|
59
|
+
* [Installation](#installation): installing this plugin, including system requirements.
|
|
60
|
+
* [Plugin Configuration](#getting-started): how to quickly get up and running.
|
|
61
|
+
* [Changelog](https://github.com/hjdhjd/homebridge-ratgdo/blob/main/docs/Changelog.md): changes and release history of this plugin.
|
|
62
|
+
|
|
63
|
+
* Additional Topics
|
|
64
|
+
* [Feature Options](https://github.com/hjdhjd/homebridge-ratgdo/blob/main/docs/FeatureOptions.md): options to allow you further tailor to your needs, particularly for those who want to have enhanced automation support.
|
|
65
|
+
* [MQTT](https://github.com/hjdhjd/homebridge-ratgdo/blob/main/docs/MQTT.md): how to configure MQTT support.
|
|
66
|
+
|
|
45
67
|
## Plugin Development Dashboard
|
|
46
68
|
This is mostly of interest to the true developer nerds amongst us.
|
|
47
69
|
|
package/config.schema.json
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"pluginType": "platform",
|
|
4
4
|
"singular": true,
|
|
5
5
|
"customUi": true,
|
|
6
|
-
"headerDisplay": "[homebridge-ratgdo](https://github.com/hjdhjd/homebridge-ratgdo) provides HomeKit support to Chamberlain and Liftmaster garage door openers that use the Ratgdo hardware control board without using myQ.
|
|
7
|
-
"footerDisplay": "See the [homebridge-ratgdo developer page](https://github.com/hjdhjd/homebridge-ratgdo) for detailed documentation, including [feature options](https://github.com/hjdhjd/homebridge-ratgdo#feature-options).
|
|
6
|
+
"headerDisplay": "[homebridge-ratgdo](https://github.com/hjdhjd/homebridge-ratgdo) provides HomeKit support to Chamberlain and Liftmaster garage door openers that use the Ratgdo hardware control board without using myQ.",
|
|
7
|
+
"footerDisplay": "See the [homebridge-ratgdo developer page](https://github.com/hjdhjd/homebridge-ratgdo) for detailed documentation, including [feature options](https://github.com/hjdhjd/homebridge-ratgdo#feature-options).",
|
|
8
8
|
"schema": {
|
|
9
9
|
"type": "object",
|
|
10
10
|
"properties": {
|
|
@@ -52,16 +52,6 @@
|
|
|
52
52
|
"description": "Enter only one option per entry. See the plugin documentation for the complete list of available options or use the feature options webUI tab above.",
|
|
53
53
|
"placeholder": "e.g. Disable.Device"
|
|
54
54
|
}
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
"port": {
|
|
58
|
-
"title": "MQTT Broker Port",
|
|
59
|
-
"type": "number",
|
|
60
|
-
"placeholder": "e.g. 18830",
|
|
61
|
-
"minimum": 1024,
|
|
62
|
-
"maximum": 65535,
|
|
63
|
-
"required": false,
|
|
64
|
-
"description": "Set the port to use for the builtin MQTT broker. Ensure you set the Ratgdo hardware control board to use the same MQTT server port. Default: 18830"
|
|
65
55
|
}
|
|
66
56
|
}
|
|
67
57
|
},
|
|
@@ -69,22 +59,7 @@
|
|
|
69
59
|
"layout": [
|
|
70
60
|
{
|
|
71
61
|
"type": "section",
|
|
72
|
-
"title": "
|
|
73
|
-
"expandable": true,
|
|
74
|
-
"expanded": false,
|
|
75
|
-
"items": [
|
|
76
|
-
{
|
|
77
|
-
"description": "Ensure your Ratgdo hardware control board is configured to use the IP address of your Homebridge server for the MQTT server IP",
|
|
78
|
-
"items": [
|
|
79
|
-
"port"
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
"type": "section",
|
|
87
|
-
"title": "Plugin Feature Options",
|
|
62
|
+
"title": "Plugin Feature Options (Optional)",
|
|
88
63
|
"expandable": true,
|
|
89
64
|
"expanded": false,
|
|
90
65
|
"items": [
|
package/dist/ratgdo-device.d.ts
CHANGED
|
@@ -23,9 +23,9 @@ export declare class RatgdoAccessory {
|
|
|
23
23
|
private configureGarageDoor;
|
|
24
24
|
private configureLight;
|
|
25
25
|
private configureMotionSensor;
|
|
26
|
-
private
|
|
27
|
-
private
|
|
28
|
-
private
|
|
26
|
+
private configureAutomationDoorPositionDimmer;
|
|
27
|
+
private configureAutomationDoorSwitch;
|
|
28
|
+
private configureAutomationLockoutSwitch;
|
|
29
29
|
private configureDoorOpenOccupancySensor;
|
|
30
30
|
private configureMotionOccupancySensor;
|
|
31
31
|
private setDoorState;
|
package/dist/ratgdo-device.js
CHANGED
|
@@ -56,11 +56,11 @@ export class RatgdoAccessory {
|
|
|
56
56
|
this.configureInfo();
|
|
57
57
|
this.configureGarageDoor();
|
|
58
58
|
this.configureMqtt();
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
59
|
+
this.configureAutomationDoorPositionDimmer();
|
|
60
|
+
this.configureAutomationDoorSwitch();
|
|
61
61
|
this.configureDoorOpenOccupancySensor();
|
|
62
62
|
this.configureLight();
|
|
63
|
-
this.
|
|
63
|
+
this.configureAutomationLockoutSwitch();
|
|
64
64
|
this.configureMotionSensor();
|
|
65
65
|
this.configureMotionOccupancySensor();
|
|
66
66
|
}
|
|
@@ -178,6 +178,15 @@ export class RatgdoAccessory {
|
|
|
178
178
|
// Inform HomeKit of any obstructions.
|
|
179
179
|
garageDoorService.getCharacteristic(this.hap.Characteristic.ObstructionDetected).onGet(() => this.status.obstruction === true);
|
|
180
180
|
// Configure the lock garage door lock current and target state characteristics.
|
|
181
|
+
garageDoorService.getCharacteristic(this.hap.Characteristic.LockTargetState).onSet(async (value) => {
|
|
182
|
+
if (!(await this.command("lock", (value === this.hap.Characteristic.LockTargetState.SECURED) ? "lock" : "unlock"))) {
|
|
183
|
+
// Something went wrong. Let's make sure we revert the lock to it's prior state.
|
|
184
|
+
setTimeout(() => {
|
|
185
|
+
garageDoorService?.updateCharacteristic(this.hap.Characteristic.LockTargetState, this.lockTargetStateBias(this.status.lock));
|
|
186
|
+
garageDoorService?.updateCharacteristic(this.hap.Characteristic.LockCurrentState, this.status.lock);
|
|
187
|
+
}, 50);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
181
190
|
garageDoorService.updateCharacteristic(this.hap.Characteristic.LockCurrentState, this.status.lock);
|
|
182
191
|
garageDoorService.updateCharacteristic(this.hap.Characteristic.LockTargetState, this.lockTargetStateBias(this.status.lock));
|
|
183
192
|
garageDoorService.getCharacteristic(this.hap.Characteristic.StatusActive).onGet(() => this.status.availability);
|
|
@@ -253,26 +262,24 @@ export class RatgdoAccessory {
|
|
|
253
262
|
return true;
|
|
254
263
|
}
|
|
255
264
|
// Configure a dimmer to automate open and close events in HomeKit beyond what HomeKit might allow for a garage opener service that gets treated as a secure service.
|
|
256
|
-
|
|
265
|
+
configureAutomationDoorPositionDimmer() {
|
|
257
266
|
// Find the dimmer service, if it exists.
|
|
258
267
|
let dimmerService = this.accessory.getServiceById(this.hap.Service.Lightbulb, RatgdoReservedNames.DIMMER_OPENER_AUTOMATION);
|
|
259
268
|
// The switch is disabled by default and primarily exists for automation purposes.
|
|
260
269
|
if (!this.hints.automationDimmer) {
|
|
261
270
|
if (dimmerService) {
|
|
262
271
|
this.accessory.removeService(dimmerService);
|
|
263
|
-
this.log.info("Disabling automation dimmer.");
|
|
272
|
+
this.log.info("Disabling automation door position dimmer.");
|
|
264
273
|
}
|
|
265
274
|
return false;
|
|
266
275
|
}
|
|
267
276
|
// Add the dimmer to the opener, if needed.
|
|
268
277
|
if (!dimmerService) {
|
|
269
|
-
dimmerService = new this.hap.Service.Lightbulb(this.name + " Automation
|
|
278
|
+
dimmerService = new this.hap.Service.Lightbulb(this.name + " Automation Door Position", RatgdoReservedNames.DIMMER_OPENER_AUTOMATION);
|
|
270
279
|
if (!dimmerService) {
|
|
271
|
-
this.log.error("Unable to add automation dimmer.");
|
|
280
|
+
this.log.error("Unable to add automation door position dimmer.");
|
|
272
281
|
return false;
|
|
273
282
|
}
|
|
274
|
-
dimmerService.displayName = this.name + " Automation Dimmer";
|
|
275
|
-
dimmerService.updateCharacteristic(this.hap.Characteristic.Name, this.name + " Automation Dimmer");
|
|
276
283
|
this.accessory.addService(dimmerService);
|
|
277
284
|
}
|
|
278
285
|
// Return the current state of the opener.
|
|
@@ -287,7 +294,7 @@ export class RatgdoAccessory {
|
|
|
287
294
|
return;
|
|
288
295
|
}
|
|
289
296
|
// Inform the user.
|
|
290
|
-
this.log.info("Automation dimmer: closing.");
|
|
297
|
+
this.log.info("Automation door position dimmer: closing.");
|
|
291
298
|
// Send the command.
|
|
292
299
|
if (!this.setDoorState(this.hap.Characteristic.TargetDoorState.CLOSED)) {
|
|
293
300
|
// Something went wrong. Let's make sure we revert the dimmer to it's prior state.
|
|
@@ -302,37 +309,38 @@ export class RatgdoAccessory {
|
|
|
302
309
|
});
|
|
303
310
|
// Adjust the door position of the opener by adjusting brightness of the light.
|
|
304
311
|
dimmerService.getCharacteristic(this.hap.Characteristic.Brightness)?.onSet((value) => {
|
|
305
|
-
this.log.info("Automation dimmer: moving opener to %s%.", value.toFixed(0));
|
|
312
|
+
this.log.info("Automation door position dimmer: moving opener to %s%.", value.toFixed(0));
|
|
306
313
|
this.setDoorState(value > 0 ?
|
|
307
314
|
this.hap.Characteristic.TargetDoorState.OPEN : this.hap.Characteristic.TargetDoorState.CLOSED, value);
|
|
308
315
|
});
|
|
309
316
|
// Initialize the switch.
|
|
317
|
+
dimmerService.displayName = this.name + " Automation Door Position";
|
|
318
|
+
dimmerService.updateCharacteristic(this.hap.Characteristic.Name, this.name + " Automation Door Position");
|
|
310
319
|
dimmerService.updateCharacteristic(this.hap.Characteristic.On, this.doorCurrentStateBias(this.status.door) !== this.hap.Characteristic.CurrentDoorState.CLOSED);
|
|
311
320
|
dimmerService.updateCharacteristic(this.hap.Characteristic.Brightness, this.status.doorPosition);
|
|
312
|
-
this.log.info("Enabling automation dimmer.");
|
|
321
|
+
this.log.info("Enabling automation door position dimmer.");
|
|
313
322
|
return true;
|
|
314
323
|
}
|
|
315
324
|
// Configure a switch to automate open and close events in HomeKit beyond what HomeKit might allow for a garage opener service that gets treated as a secure service.
|
|
316
|
-
|
|
325
|
+
configureAutomationDoorSwitch() {
|
|
317
326
|
// Find the switch service, if it exists.
|
|
318
327
|
let switchService = this.accessory.getServiceById(this.hap.Service.Switch, RatgdoReservedNames.SWITCH_OPENER_AUTOMATION);
|
|
319
328
|
// The switch is disabled by default and primarily exists for automation purposes.
|
|
320
329
|
if (!this.hints.automationSwitch) {
|
|
321
330
|
if (switchService) {
|
|
322
331
|
this.accessory.removeService(switchService);
|
|
323
|
-
this.log.info("Disabling automation switch.");
|
|
332
|
+
this.log.info("Disabling automation door opener switch.");
|
|
324
333
|
}
|
|
325
334
|
return false;
|
|
326
335
|
}
|
|
327
336
|
// Add the switch to the opener, if needed.
|
|
328
337
|
if (!switchService) {
|
|
329
|
-
switchService = new this.hap.Service.Switch(this.name + " Automation
|
|
338
|
+
switchService = new this.hap.Service.Switch(this.name + " Automation Opener", RatgdoReservedNames.SWITCH_OPENER_AUTOMATION);
|
|
330
339
|
if (!switchService) {
|
|
331
|
-
this.log.error("Unable to add automation switch.");
|
|
340
|
+
this.log.error("Unable to add automation door opener switch.");
|
|
332
341
|
return false;
|
|
333
342
|
}
|
|
334
343
|
switchService.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
|
|
335
|
-
this.setServiceName(switchService, this.name + " Automation Switch");
|
|
336
344
|
this.accessory.addService(switchService);
|
|
337
345
|
}
|
|
338
346
|
// Return the current state of the opener.
|
|
@@ -343,7 +351,7 @@ export class RatgdoAccessory {
|
|
|
343
351
|
// Open or close the opener.
|
|
344
352
|
switchService.getCharacteristic(this.hap.Characteristic.On)?.onSet((value) => {
|
|
345
353
|
// Inform the user.
|
|
346
|
-
this.log.info("Automation switch: %s.", value ? "open" : "close");
|
|
354
|
+
this.log.info("Automation door opener switch: %s.", value ? "open" : "close");
|
|
347
355
|
// Send the command.
|
|
348
356
|
if (!this.setDoorState(value ? this.hap.Characteristic.TargetDoorState.OPEN : this.hap.Characteristic.TargetDoorState.CLOSED)) {
|
|
349
357
|
// Something went wrong. Let's make sure we revert the switch to it's prior state.
|
|
@@ -353,31 +361,32 @@ export class RatgdoAccessory {
|
|
|
353
361
|
}
|
|
354
362
|
});
|
|
355
363
|
// Initialize the switch.
|
|
364
|
+
switchService.updateCharacteristic(this.hap.Characteristic.Name, this.name + " Automation Opener");
|
|
365
|
+
this.setServiceName(switchService, this.name + " Automation Opener");
|
|
356
366
|
switchService.updateCharacteristic(this.hap.Characteristic.On, this.doorCurrentStateBias(this.status.door) !== this.hap.Characteristic.CurrentDoorState.CLOSED);
|
|
357
|
-
this.log.info("Enabling automation switch.");
|
|
367
|
+
this.log.info("Enabling automation door opener switch.");
|
|
358
368
|
return true;
|
|
359
369
|
}
|
|
360
370
|
// Configure a switch to control the ability to lockout all wireless remotes for the garage door opener, if the feature exists.
|
|
361
|
-
|
|
371
|
+
configureAutomationLockoutSwitch() {
|
|
362
372
|
// Find the switch service, if it exists.
|
|
363
373
|
let switchService = this.accessory.getServiceById(this.hap.Service.Switch, RatgdoReservedNames.SWITCH_LOCKOUT);
|
|
364
374
|
// The switch is disabled by default and primarily exists for automation purposes.
|
|
365
375
|
if (!this.hints.lockoutSwitch) {
|
|
366
376
|
if (switchService) {
|
|
367
377
|
this.accessory.removeService(switchService);
|
|
368
|
-
this.log.info("Disabling wireless remote lockout switch.");
|
|
378
|
+
this.log.info("Disabling automation wireless remote lockout switch.");
|
|
369
379
|
}
|
|
370
380
|
return false;
|
|
371
381
|
}
|
|
372
382
|
// Add the switch to the opener, if needed.
|
|
373
383
|
if (!switchService) {
|
|
374
|
-
switchService = new this.hap.Service.Switch(this.name + " Lockout
|
|
384
|
+
switchService = new this.hap.Service.Switch(this.name + " Lockout", RatgdoReservedNames.SWITCH_LOCKOUT);
|
|
375
385
|
if (!switchService) {
|
|
376
|
-
this.log.error("Unable to add lockout switch.");
|
|
386
|
+
this.log.error("Unable to add automation wireless remote lockout switch.");
|
|
377
387
|
return false;
|
|
378
388
|
}
|
|
379
389
|
switchService.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
|
|
380
|
-
this.setServiceName(switchService, this.name + " Lockout Switch");
|
|
381
390
|
this.accessory.addService(switchService);
|
|
382
391
|
}
|
|
383
392
|
// Return the current state of the opener.
|
|
@@ -388,7 +397,7 @@ export class RatgdoAccessory {
|
|
|
388
397
|
// Open or close the opener.
|
|
389
398
|
switchService.getCharacteristic(this.hap.Characteristic.On)?.onSet(async (value) => {
|
|
390
399
|
// Inform the user.
|
|
391
|
-
this.log.info("
|
|
400
|
+
this.log.info("Automation wireless remote lockout switch: remotes are %s.", value ? "locked out" : "permitted");
|
|
392
401
|
// Send the command.
|
|
393
402
|
if (!(await this.command("lock", value ? "lock" : "unlock"))) {
|
|
394
403
|
// Something went wrong. Let's make sure we revert the switch to it's prior state.
|
|
@@ -398,8 +407,10 @@ export class RatgdoAccessory {
|
|
|
398
407
|
}
|
|
399
408
|
});
|
|
400
409
|
// Initialize the switch.
|
|
410
|
+
switchService.updateCharacteristic(this.hap.Characteristic.Name, this.name + " Lockout");
|
|
411
|
+
this.setServiceName(switchService, this.name + " Lockout");
|
|
401
412
|
switchService.updateCharacteristic(this.hap.Characteristic.On, this.status.lock === this.hap.Characteristic.LockCurrentState.SECURED);
|
|
402
|
-
this.log.info("Enabling wireless remote lockout switch.");
|
|
413
|
+
this.log.info("Enabling automation wireless remote lockout switch.");
|
|
403
414
|
return true;
|
|
404
415
|
}
|
|
405
416
|
// Configure the door open occupancy sensor for HomeKit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ratgdo-device.js","sourceRoot":"","sources":["../src/ratgdo-device.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ratgdo-device.js","sourceRoot":"","sources":["../src/ratgdo-device.ts"],"names":[],"mappings":"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"}
|
package/dist/ratgdo-options.d.ts
CHANGED
package/dist/ratgdo-options.js
CHANGED
|
@@ -34,7 +34,7 @@ export const featureOptions = {
|
|
|
34
34
|
{ default: false, description: "Add a switch accessory to control the opener. This can be useful in automation scenarios where you want to work around HomeKit's security restrictions for controlling garage door openers.", name: "Switch" },
|
|
35
35
|
{ default: false, description: "Add an occupancy sensor accessory using the open state of the opener to determine occupancy. This can be useful in automation scenarios where you want to trigger an action based on the opener being open for an extended period of time.", name: "OccupancySensor" },
|
|
36
36
|
{ default: false, defaultValue: RATGDO_OCCUPANCY_DURATION, description: "Duration, in seconds, to wait once the opener has reached the open state before indicating occupancy.", group: "OccupancySensor", name: "OccupancySensor.Duration" },
|
|
37
|
-
{ default: false, description: "Add a switch accessory to control the wireless remote lockout feature (if present) on your opener. ", name: "Switch.RemoteLockout" }
|
|
37
|
+
{ default: false, description: "Add a switch accessory to control the wireless remote lockout feature (if present) on your opener. This can be useful in automation scenarios where you want to work around HomeKit's security restrictions for controlling the lock state of garage door openers.", name: "Switch.RemoteLockout" }
|
|
38
38
|
]
|
|
39
39
|
};
|
|
40
40
|
// Utility function to let us know whether a feature option should be enabled or not, traversing the scope hierarchy.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ratgdo-options.js","sourceRoot":"","sources":["../src/ratgdo-options.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ratgdo-options.js","sourceRoot":"","sources":["../src/ratgdo-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import { RatgdoMqtt } from "./ratgdo-mqtt.js";
|
|
|
5
5
|
export declare class RatgdoPlatform implements DynamicPlatformPlugin {
|
|
6
6
|
private readonly accessories;
|
|
7
7
|
readonly api: API;
|
|
8
|
-
private mqttNameMac;
|
|
9
8
|
private espHomeEvents;
|
|
10
9
|
private featureOptionDefaults;
|
|
11
10
|
config: RatgdoOptions;
|
|
@@ -16,10 +15,10 @@ export declare class RatgdoPlatform implements DynamicPlatformPlugin {
|
|
|
16
15
|
readonly hap: HAP;
|
|
17
16
|
readonly log: Logging;
|
|
18
17
|
readonly mqtt: RatgdoMqtt | null;
|
|
19
|
-
private unsupportedDevices;
|
|
20
18
|
constructor(log: Logging, config: PlatformConfig, api: API);
|
|
21
19
|
configureAccessory(accessory: PlatformAccessory): void;
|
|
22
20
|
private configureRatgdo;
|
|
21
|
+
private discoverRatgdoDevice;
|
|
23
22
|
private configureGdo;
|
|
24
23
|
featureOptionDefault(option: string): boolean;
|
|
25
24
|
debug(message: string, ...parameters: unknown[]): void;
|
package/dist/ratgdo-platform.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Bonjour } from "bonjour-service";
|
|
2
|
-
import { PLATFORM_NAME, PLUGIN_NAME,
|
|
2
|
+
import { PLATFORM_NAME, PLUGIN_NAME, RATGDO_AUTODISCOVERY_INTERVAL, RATGDO_HEARTBEAT_DURATION, RATGDO_HEARTBEAT_INTERVAL, RATGDO_MQTT_TOPIC } from "./settings.js";
|
|
3
3
|
import { featureOptionCategories, featureOptions, isOptionEnabled } from "./ratgdo-options.js";
|
|
4
4
|
import EventSource from "eventsource";
|
|
5
5
|
import { RatgdoAccessory } from "./ratgdo-device.js";
|
|
@@ -10,7 +10,6 @@ import util from "node:util";
|
|
|
10
10
|
export class RatgdoPlatform {
|
|
11
11
|
accessories;
|
|
12
12
|
api;
|
|
13
|
-
mqttNameMac;
|
|
14
13
|
espHomeEvents;
|
|
15
14
|
featureOptionDefaults;
|
|
16
15
|
config;
|
|
@@ -19,20 +18,17 @@ export class RatgdoPlatform {
|
|
|
19
18
|
hap;
|
|
20
19
|
log;
|
|
21
20
|
mqtt;
|
|
22
|
-
unsupportedDevices;
|
|
23
21
|
constructor(log, config, api) {
|
|
24
22
|
this.accessories = [];
|
|
25
23
|
this.api = api;
|
|
26
24
|
this.configOptions = [];
|
|
27
25
|
this.configuredDevices = {};
|
|
28
|
-
this.mqttNameMac = {};
|
|
29
26
|
this.espHomeEvents = {};
|
|
30
27
|
this.featureOptionDefaults = {};
|
|
31
28
|
this.hap = api.hap;
|
|
32
29
|
this.log = log;
|
|
33
30
|
this.log.debug = this.debug.bind(this);
|
|
34
31
|
this.mqtt = null;
|
|
35
|
-
this.unsupportedDevices = {};
|
|
36
32
|
// Build our list of default values for our feature options.
|
|
37
33
|
for (const category of featureOptionCategories) {
|
|
38
34
|
for (const options of featureOptions[category.name]) {
|
|
@@ -47,8 +43,7 @@ export class RatgdoPlatform {
|
|
|
47
43
|
debug: config.debug === true,
|
|
48
44
|
mqttTopic: config.mqttTopic ?? RATGDO_MQTT_TOPIC,
|
|
49
45
|
mqttUrl: config.mqttUrl,
|
|
50
|
-
options: config.options
|
|
51
|
-
port: "port" in config ? parseInt(config.port) : RATGDO_API_PORT
|
|
46
|
+
options: config.options
|
|
52
47
|
};
|
|
53
48
|
// If we have feature options, put them into their own array, upper-cased for future reference.
|
|
54
49
|
if (this.config.options) {
|
|
@@ -64,8 +59,8 @@ export class RatgdoPlatform {
|
|
|
64
59
|
// Fire up the Ratgdo API once Homebridge has loaded all the cached accessories it knows about and called configureAccessory() on each.
|
|
65
60
|
api.on("didFinishLaunching" /* APIEvent.DID_FINISH_LAUNCHING */, () => this.configureRatgdo());
|
|
66
61
|
}
|
|
67
|
-
// This gets called when homebridge restores cached accessories at startup. We intentionally avoid doing anything significant here, and save all that logic for
|
|
68
|
-
//
|
|
62
|
+
// This gets called when homebridge restores cached accessories at startup. We intentionally avoid doing anything significant here, and save all that logic for device
|
|
63
|
+
// discovery.
|
|
69
64
|
configureAccessory(accessory) {
|
|
70
65
|
// Add this to the accessory array so we can track it.
|
|
71
66
|
this.accessories.push(accessory);
|
|
@@ -75,140 +70,136 @@ export class RatgdoPlatform {
|
|
|
75
70
|
// Instantiate our mDNS stack.
|
|
76
71
|
const mdns = new Bonjour();
|
|
77
72
|
// Make sure we cleanup our mDNS client on shutdown.
|
|
78
|
-
this.api.on("shutdown" /* APIEvent.SHUTDOWN */, () =>
|
|
79
|
-
|
|
80
|
-
});
|
|
81
|
-
// ESPHome device discovery.
|
|
82
|
-
const mdnsBrowser = mdns.find({ type: "esphomelib" });
|
|
83
|
-
// Add an ESPHome device.
|
|
84
|
-
mdnsBrowser.on("up", (service) => {
|
|
85
|
-
// We're only interested in Ratgdo devices with valid IP addresses. Otherwise, we're done.
|
|
86
|
-
if ((service.txt.project_name !== "ratgdo.esphome") || !service.addresses) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// We grab the first address provided for the ESPHome device.
|
|
90
|
-
const address = service.addresses[0];
|
|
91
|
-
// Grab the MAC address. We uppercase it and put it in the familiar colon notation first.
|
|
92
|
-
const mac = service.txt.mac.toUpperCase().replace(/(.{2})(?=.)/g, "$1:");
|
|
93
|
-
// Configure the device.
|
|
94
|
-
const ratgdoAccessory = this.configureGdo(address, mac, service.txt.friendly_name, service.txt.version);
|
|
95
|
-
// If we've already configured this one, we're done.
|
|
96
|
-
if (!ratgdoAccessory) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
// Node 18 requires this because it doesn't default to keeping the underlying socket alive by default. We need this to ensure that socket keepalives are enabled so
|
|
100
|
-
// that we can reconnect gracefully when connection issues occur. I'll remove this once Homebridge shifts to Node 20 as the lowest LTS version supported.
|
|
101
|
-
http.globalAgent = new http.Agent({ keepAlive: true, timeout: 5000 });
|
|
102
|
-
try {
|
|
103
|
-
// Connect to the Ratgdo ESPHome events API.
|
|
104
|
-
this.espHomeEvents[mac] = new EventSource("http://" + address + "/events");
|
|
105
|
-
// Handle errors in the events API.
|
|
106
|
-
this.espHomeEvents[mac].addEventListener("error", (payload) => {
|
|
107
|
-
let errorMessage;
|
|
108
|
-
switch (payload.message) {
|
|
109
|
-
case payload.message?.startsWith("connect ECONNREFUSED "):
|
|
110
|
-
errorMessage = "Connection to the Ratgdo controller refused";
|
|
111
|
-
break;
|
|
112
|
-
case payload.message?.startsWith("connect ETIMEDOUT "):
|
|
113
|
-
errorMessage = "Connection to the Ratgdo controller has timed out";
|
|
114
|
-
break;
|
|
115
|
-
case "read ECONNRESET":
|
|
116
|
-
errorMessage = "Connection to the Ratgdo controller has been reset";
|
|
117
|
-
break;
|
|
118
|
-
case "read ETIMEDOUT":
|
|
119
|
-
errorMessage = "Connection to the Ratgdo controller has timed out while listening for events";
|
|
120
|
-
break;
|
|
121
|
-
case "unknown error.":
|
|
122
|
-
case undefined:
|
|
123
|
-
errorMessage = "An unknown error on the Ratgdo controller has occurred. This will happen occasionally and can generally be ignored";
|
|
124
|
-
break;
|
|
125
|
-
default:
|
|
126
|
-
errorMessage = "Unrecognized error: " + util.inspect(payload, { sorted: true });
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
ratgdoAccessory.log.error("%s.", errorMessage);
|
|
130
|
-
});
|
|
131
|
-
// Inform the user when we've successfully connected.
|
|
132
|
-
this.espHomeEvents[mac].addEventListener("open", () => {
|
|
133
|
-
ratgdoAccessory.updateState("availability", "online");
|
|
134
|
-
});
|
|
135
|
-
// Capture state updates from the controller.
|
|
136
|
-
this.espHomeEvents[mac].addEventListener("state", (message) => {
|
|
137
|
-
let event;
|
|
138
|
-
ratgdoAccessory.log.debug("State event received: ", util.inspect(message.data, { sorted: true }));
|
|
139
|
-
// Ratgdo occasionally sends empty status updates - we ignore them.
|
|
140
|
-
if (!message.data.length) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
try {
|
|
144
|
-
event = JSON.parse(message.data);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
ratgdoAccessory.log.error("Unable to parse state message: \"%s\". Invalid JSON.", message.data);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
let state;
|
|
151
|
-
switch (event.id) {
|
|
152
|
-
case "binary_sensor-motion":
|
|
153
|
-
ratgdoAccessory.updateState("motion", (event.state === "OFF") ? "clear" : "detected");
|
|
154
|
-
break;
|
|
155
|
-
case "binary_sensor-obstruction":
|
|
156
|
-
ratgdoAccessory.updateState("obstruction", (event.state === "OFF") ? "clear" : "obstructed");
|
|
157
|
-
break;
|
|
158
|
-
case "cover-door":
|
|
159
|
-
switch (event.current_operation) {
|
|
160
|
-
case "CLOSING":
|
|
161
|
-
case "OPENING":
|
|
162
|
-
state = event.current_operation.toLowerCase();
|
|
163
|
-
break;
|
|
164
|
-
case "IDLE":
|
|
165
|
-
// We're stopped, rather than open, if the door is in a position greater than 0.
|
|
166
|
-
state = ((event.state === "OPEN") && (event.position !== undefined) && (event.position > 0) && (event.position < 1)) ? "stopped" :
|
|
167
|
-
event.state.toLowerCase();
|
|
168
|
-
break;
|
|
169
|
-
default:
|
|
170
|
-
ratgdoAccessory.log.error("Unknown door operation detected: %s.", event.current_operation);
|
|
171
|
-
return;
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
ratgdoAccessory.updateState("door", state, (event.position !== undefined) ? event.position * 100 : undefined);
|
|
175
|
-
break;
|
|
176
|
-
case "light-light":
|
|
177
|
-
ratgdoAccessory.updateState("light", event.state === "OFF" ? "off" : "on");
|
|
178
|
-
break;
|
|
179
|
-
case "lock-lock_remotes":
|
|
180
|
-
ratgdoAccessory.updateState("lock", event.state === "LOCKED" ? "locked" : "unlocked");
|
|
181
|
-
break;
|
|
182
|
-
default:
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
// Heartbeat the Ratgdo controller at regular intervals. We need to do this because the ESPHome firmware for Ratgdo has a failsafe that will autoreboot the
|
|
187
|
-
// Ratgdo every 15 minutes if it doesn't receive a native API connection. Fortunately, the failsafe only looks for an open connection to the API, allowing us the
|
|
188
|
-
// opportunity to heartbeat it with a connection we periodically reopen.
|
|
189
|
-
const heartbeat = () => {
|
|
190
|
-
// Connect to the Ratgdo, and setup our heartbeat to close after a configured duration.
|
|
191
|
-
const socket = net.createConnection({ host: address, port: 6053 }, () => setTimeout(() => {
|
|
192
|
-
socket.destroy();
|
|
193
|
-
}, RATGDO_HEARTBEAT_DURATION * 1000));
|
|
194
|
-
// Handle heartbeat errors.
|
|
195
|
-
socket.on("error", (err) => ratgdoAccessory.log.debug("Heartbeat error: %s.", util.inspect(err, { sorted: true })));
|
|
196
|
-
// Perpetually restart our heartbeat when it ends.
|
|
197
|
-
socket.on("close", () => setTimeout(() => heartbeat(), RATGDO_HEARTBEAT_INTERVAL * 1000));
|
|
198
|
-
};
|
|
199
|
-
heartbeat();
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
if (error instanceof Error) {
|
|
203
|
-
ratgdoAccessory.log.error("Ratgdo API error: %s", error.message);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
// Refresh device detection, just in case we missed it in setting up the listener.
|
|
208
|
-
mdnsBrowser.update();
|
|
73
|
+
this.api.on("shutdown" /* APIEvent.SHUTDOWN */, () => mdns.destroy());
|
|
74
|
+
// Start ESPHome device discovery.
|
|
75
|
+
const mdnsBrowser = mdns.find({ type: "esphomelib" }, this.discoverRatgdoDevice.bind(this));
|
|
209
76
|
// Refresh device discovery regular intervals.
|
|
210
77
|
setInterval(() => mdnsBrowser.update(), RATGDO_AUTODISCOVERY_INTERVAL * 1000);
|
|
211
78
|
}
|
|
79
|
+
// Ratgdo ESPHome device discovery.
|
|
80
|
+
discoverRatgdoDevice(service) {
|
|
81
|
+
// We're only interested in Ratgdo devices with valid IP addresses. Otherwise, we're done.
|
|
82
|
+
if ((service.txt.project_name !== "ratgdo.esphome") || !service.addresses) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// We grab the first address provided for the ESPHome device.
|
|
86
|
+
const address = service.addresses[0];
|
|
87
|
+
// Grab the MAC address. We uppercase it and put it in the familiar colon notation first.
|
|
88
|
+
const mac = service.txt.mac.toUpperCase().replace(/(.{2})(?=.)/g, "$1:");
|
|
89
|
+
// Configure the device.
|
|
90
|
+
const ratgdoAccessory = this.configureGdo(address, mac, service.txt.friendly_name, service.txt.version);
|
|
91
|
+
// If we've already configured this one, we're done.
|
|
92
|
+
if (!ratgdoAccessory) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Node 18 requires this because it doesn't default to keeping the underlying socket alive by default. We need this to ensure that socket keepalives are enabled so
|
|
96
|
+
// that we can reconnect gracefully when connection issues occur. I'll remove this once Homebridge shifts to Node 20 as the lowest LTS version supported.
|
|
97
|
+
http.globalAgent = new http.Agent({ keepAlive: true, timeout: 5000 });
|
|
98
|
+
try {
|
|
99
|
+
// Connect to the Ratgdo ESPHome events API.
|
|
100
|
+
this.espHomeEvents[mac] = new EventSource("http://" + address + "/events");
|
|
101
|
+
// Handle errors in the events API.
|
|
102
|
+
this.espHomeEvents[mac].addEventListener("error", (payload) => {
|
|
103
|
+
let errorMessage;
|
|
104
|
+
switch (payload.message) {
|
|
105
|
+
case payload.message?.startsWith("connect ECONNREFUSED "):
|
|
106
|
+
errorMessage = "Connection to the Ratgdo controller refused";
|
|
107
|
+
break;
|
|
108
|
+
case payload.message?.startsWith("connect ETIMEDOUT "):
|
|
109
|
+
errorMessage = "Connection to the Ratgdo controller has timed out";
|
|
110
|
+
break;
|
|
111
|
+
case "read ECONNRESET":
|
|
112
|
+
errorMessage = "Connection to the Ratgdo controller has been reset";
|
|
113
|
+
break;
|
|
114
|
+
case "read ETIMEDOUT":
|
|
115
|
+
errorMessage = "Connection to the Ratgdo controller has timed out while listening for events";
|
|
116
|
+
break;
|
|
117
|
+
case "unknown error.":
|
|
118
|
+
case undefined:
|
|
119
|
+
errorMessage = "An unknown error on the Ratgdo controller has occurred. This will happen occasionally and can generally be ignored";
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
errorMessage = "Unrecognized error: " + util.inspect(payload, { sorted: true });
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
ratgdoAccessory.log.error("%s.", errorMessage);
|
|
126
|
+
});
|
|
127
|
+
// Inform the user when we've successfully connected.
|
|
128
|
+
this.espHomeEvents[mac].addEventListener("open", () => {
|
|
129
|
+
ratgdoAccessory.updateState("availability", "online");
|
|
130
|
+
});
|
|
131
|
+
// Capture state updates from the controller.
|
|
132
|
+
this.espHomeEvents[mac].addEventListener("state", (message) => {
|
|
133
|
+
let event;
|
|
134
|
+
ratgdoAccessory.log.debug("State event received: ", util.inspect(message.data, { sorted: true }));
|
|
135
|
+
// Ratgdo occasionally sends empty status updates - we ignore them.
|
|
136
|
+
if (!message.data.length) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
event = JSON.parse(message.data);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
ratgdoAccessory.log.error("Unable to parse state message: \"%s\". Invalid JSON.", message.data);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
let state;
|
|
147
|
+
switch (event.id) {
|
|
148
|
+
case "binary_sensor-motion":
|
|
149
|
+
ratgdoAccessory.updateState("motion", (event.state === "OFF") ? "clear" : "detected");
|
|
150
|
+
break;
|
|
151
|
+
case "binary_sensor-obstruction":
|
|
152
|
+
ratgdoAccessory.updateState("obstruction", (event.state === "OFF") ? "clear" : "obstructed");
|
|
153
|
+
break;
|
|
154
|
+
case "cover-door":
|
|
155
|
+
switch (event.current_operation) {
|
|
156
|
+
case "CLOSING":
|
|
157
|
+
case "OPENING":
|
|
158
|
+
state = event.current_operation.toLowerCase();
|
|
159
|
+
break;
|
|
160
|
+
case "IDLE":
|
|
161
|
+
// We're stopped, rather than open, if the door is in a position greater than 0.
|
|
162
|
+
state = ((event.state === "OPEN") && (event.position !== undefined) && (event.position > 0) && (event.position < 1)) ? "stopped" :
|
|
163
|
+
event.state.toLowerCase();
|
|
164
|
+
break;
|
|
165
|
+
default:
|
|
166
|
+
ratgdoAccessory.log.error("Unknown door operation detected: %s.", event.current_operation);
|
|
167
|
+
return;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
ratgdoAccessory.updateState("door", state, (event.position !== undefined) ? event.position * 100 : undefined);
|
|
171
|
+
break;
|
|
172
|
+
case "light-light":
|
|
173
|
+
ratgdoAccessory.updateState("light", event.state === "OFF" ? "off" : "on");
|
|
174
|
+
break;
|
|
175
|
+
case "lock-lock_remotes":
|
|
176
|
+
ratgdoAccessory.updateState("lock", event.state === "LOCKED" ? "locked" : "unlocked");
|
|
177
|
+
break;
|
|
178
|
+
default:
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// Heartbeat the Ratgdo controller at regular intervals. We need to do this because the ESPHome firmware for Ratgdo has a failsafe that will autoreboot the
|
|
183
|
+
// Ratgdo every 15 minutes if it doesn't receive a native API connection. Fortunately, the failsafe only looks for an open connection to the API, allowing us the
|
|
184
|
+
// opportunity to heartbeat it with a connection we periodically reopen.
|
|
185
|
+
const heartbeat = () => {
|
|
186
|
+
// Connect to the Ratgdo, and setup our heartbeat to close after a configured duration.
|
|
187
|
+
const socket = net.createConnection({ host: address, port: 6053 }, () => setTimeout(() => {
|
|
188
|
+
socket.destroy();
|
|
189
|
+
}, RATGDO_HEARTBEAT_DURATION * 1000));
|
|
190
|
+
// Handle heartbeat errors.
|
|
191
|
+
socket.on("error", (err) => ratgdoAccessory.log.debug("Heartbeat error: %s.", util.inspect(err, { sorted: true })));
|
|
192
|
+
// Perpetually restart our heartbeat when it ends.
|
|
193
|
+
socket.on("close", () => setTimeout(() => heartbeat(), RATGDO_HEARTBEAT_INTERVAL * 1000));
|
|
194
|
+
};
|
|
195
|
+
heartbeat();
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (error instanceof Error) {
|
|
199
|
+
ratgdoAccessory.log.error("Ratgdo API error: %s", error.message);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
212
203
|
// Configure a discovered garage door opener.
|
|
213
204
|
configureGdo(address, mac, name, firmwareVersion) {
|
|
214
205
|
// Generate this device's unique identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ratgdo-platform.js","sourceRoot":"","sources":["../src/ratgdo-platform.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAW,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"ratgdo-platform.js","sourceRoot":"","sources":["../src/ratgdo-platform.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export declare const PLATFORM_NAME = "Ratgdo";
|
|
2
2
|
export declare const PLUGIN_NAME = "homebridge-ratgdo";
|
|
3
|
-
export declare const RATGDO_API_PORT = 18830;
|
|
4
3
|
export declare const RATGDO_AUTODISCOVERY_INTERVAL = 60;
|
|
5
4
|
export declare const RATGDO_HEARTBEAT_DURATION = 120;
|
|
6
5
|
export declare const RATGDO_HEARTBEAT_INTERVAL = 300;
|
package/dist/settings.js
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
export const PLATFORM_NAME = "Ratgdo";
|
|
7
7
|
// The name of our plugin.
|
|
8
8
|
export const PLUGIN_NAME = "homebridge-ratgdo";
|
|
9
|
-
// The default port to use for our builtin MQTT broker. This is intentionally not the default MQTT port number (1883) in case a user is already running a local broker.
|
|
10
|
-
export const RATGDO_API_PORT = 18830;
|
|
11
9
|
// Interval, in seconds, to initiate mDNS discovery requests for new Ratgdo devices.
|
|
12
10
|
export const RATGDO_AUTODISCOVERY_INTERVAL = 60;
|
|
13
11
|
// Duration, in seconds, for a single heartbeat to ensure the Ratgdo doesn't autoreboot.
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC,0BAA0B;AAC1B,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC,0BAA0B;AAC1B,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAE/C,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEhD,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,kDAAkD;AAClD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,oGAAoG;AACpG,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAEjD,gGAAgG;AAChG,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,wKAAwK;AACxK,4FAA4F;AAC5F,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-ratgdo",
|
|
3
3
|
"displayName": "Homebridge Ratgdo",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.2",
|
|
5
5
|
"description": "HomeKit integration for LiftMaster and Chamberlain garage door openers, without requiring myQ.",
|
|
6
6
|
"license": "ISC",
|
|
7
7
|
"repository": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"main": "dist/index.js",
|
|
20
20
|
"scripts": {
|
|
21
|
-
"lint": "eslint src/**.ts",
|
|
21
|
+
"lint": "eslint \"src/**.ts\"",
|
|
22
22
|
"watch": "npm run build && npm link && nodemon",
|
|
23
23
|
"build": "rimraf ./dist && tsc",
|
|
24
24
|
"prepublishOnly": "npm run lint && npm run build"
|
|
@@ -27,23 +27,22 @@
|
|
|
27
27
|
"homebridge-plugin"
|
|
28
28
|
],
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@stylistic/eslint-plugin": "^1.
|
|
30
|
+
"@stylistic/eslint-plugin": "^1.8.0",
|
|
31
31
|
"@types/eventsource": "^1.1.15",
|
|
32
|
-
"@types/node": "^20.12.
|
|
33
|
-
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
|
34
|
-
"@typescript-eslint/parser": "^7.7.1",
|
|
32
|
+
"@types/node": "^20.12.8",
|
|
35
33
|
"eslint": "^8.5.7",
|
|
36
34
|
"homebridge": "^1.8.1",
|
|
37
35
|
"nodemon": "^3.1.0",
|
|
38
36
|
"rimraf": "^5.0.5",
|
|
39
37
|
"ts-node": "^10.9.2",
|
|
40
|
-
"typescript": "^5.4.5"
|
|
38
|
+
"typescript": "^5.4.5",
|
|
39
|
+
"typescript-eslint": "^7.8.0"
|
|
41
40
|
},
|
|
42
41
|
"dependencies": {
|
|
43
42
|
"@adobe/fetch": "^4.1.2",
|
|
44
43
|
"@homebridge/plugin-ui-utils": "^1.0.3",
|
|
45
44
|
"bonjour-service": "^1.2.1",
|
|
46
45
|
"eventsource": "^2.0.2",
|
|
47
|
-
"mqtt": "^5.5.
|
|
46
|
+
"mqtt": "^5.5.5"
|
|
48
47
|
}
|
|
49
48
|
}
|