homebridge-adt-pulse 3.0.0-beta.1 → 3.0.0-beta.11
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 +149 -109
- package/build/config.schema.json +326 -0
- package/build/src/index.js +6 -0
- package/build/src/index.js.map +1 -0
- package/build/src/lib/accessory.js +246 -0
- package/build/src/lib/accessory.js.map +1 -0
- package/build/src/lib/api.js +1876 -0
- package/build/src/lib/api.js.map +1 -0
- package/build/src/lib/detect.js +597 -0
- package/build/src/lib/detect.js.map +1 -0
- package/build/src/lib/platform.js +446 -0
- package/build/src/lib/platform.js.map +1 -0
- package/{src/lib/regex.ts → build/src/lib/regex.js} +1 -143
- package/build/src/lib/regex.js.map +1 -0
- package/build/src/lib/schema.js +41 -0
- package/build/src/lib/schema.js.map +1 -0
- package/build/src/lib/utility.js +461 -0
- package/build/src/lib/utility.js.map +1 -0
- package/build/src/scripts/repl.js +173 -0
- package/build/src/scripts/repl.js.map +1 -0
- package/build/src/scripts/test-api.js +171 -0
- package/build/src/scripts/test-api.js.map +1 -0
- package/config.schema.json +307 -218
- package/package.json +11 -8
- package/src/index.ts +0 -18
- package/src/lib/accessory.ts +0 -405
- package/src/lib/api.ts +0 -3483
- package/src/lib/detect.ts +0 -728
- package/src/lib/platform.ts +0 -890
- package/src/lib/schema.ts +0 -34
- package/src/lib/utility.ts +0 -933
- package/src/scripts/repl.ts +0 -300
- package/src/scripts/test-api.ts +0 -278
- package/src/types/constant.d.ts +0 -308
- package/src/types/index.d.ts +0 -1472
- package/src/types/shared.d.ts +0 -517
package/README.md
CHANGED
|
@@ -1,47 +1,53 @@
|
|
|
1
1
|
ADT Pulse for Homebridge
|
|
2
2
|
=========================
|
|
3
3
|
|
|
4
|
+
### ⚠️ Please Install the Beta Version ⚠️
|
|
5
|
+
This plugin is completely re-written from the ground up (supports v27.0.0-140), and I would love everyone on board! Please install the beta version, so I can quickly get a faster and more stable version to you!
|
|
6
|
+
|
|
7
|
+
Please bear with me, as the beta version is being actively developed and tested. If you see any unusual or annoying bugs, please comment on this [GitHub issue](https://github.com/mrjackyliang/homebridge-adt-pulse/issues/124).
|
|
8
|
+
|
|
9
|
+
__HOOBS Users:__ Please do not use the configuration UI as that is currently outdated and being cached by HOOBS. I have no control of why that is happening ([GitHub link](https://github.com/hoobs-org/HOOBS/issues/1873)), so you must configure it manually using the sample configuration below.
|
|
10
|
+
|
|
11
|
+
Additionally, I am seeing that the developers for HOOBS are stale based on the activity and complaints I see on [Reddit](https://www.reddit.com/r/HOOBS/). Support will be "best effort", and official status will be pulled in the meantime.
|
|
12
|
+
|
|
4
13
|
[](https://www.npmjs.com/package/homebridge-adt-pulse)
|
|
5
14
|
[](https://www.npmjs.com/package/homebridge-adt-pulse)
|
|
6
15
|
[](https://github.com/mrjackyliang/homebridge-adt-pulse/blob/master/LICENSE)
|
|
7
16
|
[](https://github.com/sponsors/mrjackyliang)
|
|
8
17
|
|
|
9
|
-
This is a [verified Homebridge plugin](https://github.com/homebridge/homebridge/wiki/verified-Plugins#verified-plugins) for ADT Pulse
|
|
18
|
+
This is a [verified Homebridge plugin](https://github.com/homebridge/homebridge/wiki/verified-Plugins#verified-plugins) for ADT Pulse customers that allow homeowners to control their security system and view sensor status through the Home app (the HAP protocol).
|
|
10
19
|
|
|
11
|
-
|
|
12
|
-
### This plugin is completely re-written from the ground up, and I need everyone on board! Please install the pre-release version, so I can quickly get a faster and more stable version to you!
|
|
13
|
-
### Everything is still very sloppy, please bear with me, even the readme has to be re-written.
|
|
14
|
-
### In the meantime, do not use the UI to configure your plugin (the latest config is below). The UI uses v2 (this is now v3) config. All sensors will now HAVE TO be added manually to prevent automatic-adding/removals if ADT strikes a bug to break things again.
|
|
20
|
+
The API relies on the ADT Pulse Web Portal (powered by Icontrol One, owned by ICN Acquisition LLC, an indirect subsidiary of [Alarm.com](https://alarm.com)). View details of the acquisition via the [SEC Form 8-K](https://www.sec.gov/Archives/edgar/data/1459200/000119312517074906/d355785d8k.htm).
|
|
15
21
|
|
|
16
22
|
To use this plugin, here are three simple steps you need to follow:
|
|
17
23
|
1. Run `npm install homebridge-adt-pulse`
|
|
18
|
-
2. Configure
|
|
19
|
-
3. Restart Homebridge
|
|
24
|
+
2. Configure this plugin using the [configuration example](#configuration)
|
|
25
|
+
3. Restart Homebridge and see magic happen 😁
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
Another option is to search for `adt-pulse` using Onzu's [Homebridge Config UI](https://github.com/oznu/homebridge-config-ui-x). Afterward, you can proceed to configure this plugin through the configuration UI available in the "Plugins" tab.
|
|
22
28
|
|
|
23
29
|
## Configuration
|
|
24
|
-
|
|
30
|
+
Here is an example of how the `config.json` file for this plugin should be configured:
|
|
25
31
|
```json
|
|
26
32
|
{
|
|
27
33
|
"platforms": [
|
|
28
34
|
{
|
|
29
35
|
"platform": "ADTPulse",
|
|
30
36
|
"name": "ADT Pulse",
|
|
31
|
-
"subdomain": "
|
|
32
|
-
"username": "
|
|
33
|
-
"password": "
|
|
34
|
-
"fingerprint": "
|
|
37
|
+
"subdomain": "portal",
|
|
38
|
+
"username": "user@example.com",
|
|
39
|
+
"password": "Mys7r0nG!P@ssw0rd",
|
|
40
|
+
"fingerprint": "VGhpc0lzQVNlY3VyZVBhc3N3b3JkMTIzIQ==",
|
|
41
|
+
"mode": "normal",
|
|
42
|
+
"speed": 1,
|
|
35
43
|
"sensors": [
|
|
36
44
|
{
|
|
37
|
-
"name": "
|
|
38
|
-
"adtName": "
|
|
39
|
-
"adtType": "
|
|
40
|
-
"adtZone":
|
|
45
|
+
"name": "Family Room Couch Window 1",
|
|
46
|
+
"adtName": "Family Room Window (99)",
|
|
47
|
+
"adtType": "doorWindow",
|
|
48
|
+
"adtZone": 99
|
|
41
49
|
}
|
|
42
|
-
]
|
|
43
|
-
"pause": false,
|
|
44
|
-
"reset": false
|
|
50
|
+
]
|
|
45
51
|
},
|
|
46
52
|
{
|
|
47
53
|
"platform": "...",
|
|
@@ -50,131 +56,165 @@ When configuring this plugin, simply add the platform to your existing `config.j
|
|
|
50
56
|
]
|
|
51
57
|
}
|
|
52
58
|
```
|
|
59
|
+
Ensure that you customize the values of `subdomain`, `username`, `password`, `fingerprint`, and `sensors` to match your specific setup. If you encounter any queries regarding the configuration, refer to the details provided below this section.
|
|
53
60
|
|
|
54
|
-
##
|
|
55
|
-
|
|
61
|
+
## Supported Devices
|
|
62
|
+
While named "ADT Pulse for Homebridge," this Homebridge plugin exclusively accommodates only the sensors listed below. It is important to note that this plugin does not serve as a comprehensive substitute for the [official ADT Pulse app](https://www.adt.com/help/faq/adt-pulse/adt-pulse-mobile-app).
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
1. ADT
|
|
59
|
-
2.
|
|
60
|
-
3. ADT Glass Break Detectors (`glass`)
|
|
61
|
-
4. ADT Motion Sensors (`motion`)
|
|
62
|
-
5. ADT Carbon Monoxide Detector (`co`)
|
|
63
|
-
6. ADT Fire (Smoke/Heat) Detector (`fire`)
|
|
64
|
+
This plugin will expose these devices by default:
|
|
65
|
+
1. ADT Pulse Gateway (`gateway`)
|
|
66
|
+
2. Security Panel (`panel`)
|
|
64
67
|
|
|
65
|
-
|
|
68
|
+
This plugin can expose these devices (in read-only mode) based on your configuration:
|
|
69
|
+
1. `co` - Carbon Monoxide Detector
|
|
70
|
+
2. `doorWindow` - Door/Window Sensor __::__ Door Sensor __::__ Window Sensor
|
|
71
|
+
3. `fire` - Fire (Smoke/Heat) Detector
|
|
72
|
+
4. `flood` - Water/Flood Sensor
|
|
73
|
+
5. `glass` - Glass Break Detector
|
|
74
|
+
6. `keypad` - Keypad/Touchpad
|
|
75
|
+
7. `motion` - Motion Sensor __::__ Motion Sensor (Notable Events Only)
|
|
76
|
+
8. `panic` - Audible Panic Button/Pendant __::__ Silent Panic Button/Pendant
|
|
77
|
+
9. `shock` - Shock Sensor
|
|
78
|
+
10. `temperature` - Temperature Sensor
|
|
66
79
|
|
|
67
|
-
Due to
|
|
80
|
+
Due to implementation complexity and platform instability, all Z-Wave accessories connected to the ADT Pulse gateway will not be planned for development or be supported overall. Consider purchasing the [Hubitat Hub](https://hubitat.com) for a seamless setup experience, or read about the [Home Assistant Z-Wave](https://www.home-assistant.io/integrations/zwave_js/) integration.
|
|
68
81
|
|
|
69
|
-
##
|
|
70
|
-
|
|
82
|
+
## Specifying the Portal Region
|
|
83
|
+
ADT Pulse is available to consumers in either the United States or Canada. To specify your country, use the following settings:
|
|
71
84
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
3. Click on the **Network** tab (make sure **Preserve log** checkbox is checked)
|
|
75
|
-
4. In the filter box, enter `signin.jsp?networkid=`
|
|
76
|
-
5. Go to `https://portal.adtpulse.com` or `https://portal-ca.adtpulse.com` and login to your account
|
|
77
|
-
6. Click **Request Code**, type in the requested code, and then click **Submit Code**
|
|
78
|
-
7. Click **Trust this device** and name the device `Homebridge`
|
|
79
|
-
8. Click **Save and Continue**
|
|
80
|
-
9. Click **Sign Out** in the top right corner of the webpage
|
|
81
|
-
10. Login to your account (once again)
|
|
82
|
-
11. Click on the network call (beginning with `signin.jsp?networkid=`) appearing in the DevTools window. Select the last one.
|
|
83
|
-
12. In the **Payload** tab, under **Form Data**, copy the entire **fingerprint** (after `fingerprint:`, do not include spaces)
|
|
84
|
-
13. Paste the copied text into the `fingerprint` field into your `config.json`
|
|
85
|
-
14. Close the Chrome window (DO NOT sign out)
|
|
85
|
+
- If you are a United States customer, set the `subdomain` value to `"portal"`.
|
|
86
|
+
- If you are a Canada customer, set the `subdomain` value to `"portal-ca"`.
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
Due to the nature of how HomeKit and ADT Pulse processes `setDeviceStatus` commands, this plugin will force arm when it detects active motion or open sensors.
|
|
88
|
+
Select the appropriate setting based on your country, as the ability to switch between countries is determined by the ADT region to which you are subscribed to.
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
## Finding the Device Fingerprint
|
|
91
|
+
Since the introduction of 2-factor authentication during login is now required, a device fingerprint has become a necessity. Follow these steps:
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
1. Log in to the ADT Pulse portal, complete the MFA challenge, and choose to "Trust this device" (you can name the device as you see fit).
|
|
94
|
+
2. Using the same browser used for login, access the [ADT Pulse Device Fingerprint Detector](https://raw.githack.com/mrjackyliang/homebridge-adt-pulse/main/fingerprint/index.html).
|
|
95
|
+
3. Click the "Copy Fingerprint" button and paste it into the `fingerprint` value in the `config.json` file.
|
|
93
96
|
|
|
94
|
-
|
|
95
|
-
2. Tap the Status Details (listed in the Home tab _below_ the title)
|
|
96
|
-
3. View the __ATTENTION__ area of your home
|
|
97
|
+
For a detailed breakdown of the device fingerprint contents, explore the "Device Details" tab located at the top right of the web page.
|
|
97
98
|
|
|
98
|
-
##
|
|
99
|
-
|
|
99
|
+
## Specifying the Operational Mode
|
|
100
|
+
This plugin offers three operational modes: "Normal", "Paused", and "Reset". To configure these modes, use the following settings:
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
- For regular operation, set the `mode` value to `"normal"`.
|
|
103
|
+
- To pause the plugin (all devices will become non-responsive), set the `mode` value to `"paused"`.
|
|
104
|
+
- To reset the plugin (remove associated accessories), set the `mode` value to `"reset"`.
|
|
102
105
|
|
|
103
|
-
|
|
104
|
-
Due to ADT Pulse portal limitations, sensors may be inaccurately detected. Use this setting to manually override default detection features. _Optional._
|
|
106
|
+
It is crucial to note that if you set the plugin to "Reset" mode, the plugin will initiate a countdown with warnings, and __you have approximately 30 seconds to reverse the setting and restart Homebridge before all accessories related to this plugin are removed__.
|
|
105
107
|
|
|
106
|
-
|
|
107
|
-
* Set `name` to the name that is displayed in the ADT Pulse portal
|
|
108
|
-
* Set `type` to `sensor,doorWindow`, `sensor,glass`, `sensor,motion`, `sensor,co`, or `sensor,fire`
|
|
108
|
+
This precautionary measure is in place to avoid unintended resets that could lead to the time-consuming task of reconfiguring automations and accessories.
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
## Specifying the Synchronization Speed
|
|
111
|
+
Typically, the plugin triggers every second to assess whether sync check signals or keep-alive signals should be dispatched.
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
ADT Pulse is available both in the United States and Canada. Use this setting to toggle which country you will be using the plugin in. _Optional._
|
|
113
|
+
However, for older devices incompatible with newer OpenSSL versions (e.g. `v3.1`), this may result in consistent 100% CPU usage. To adjust the firing interval, use the following settings:
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
- For "Normal" operation speed, set the `speed` value to `1`.
|
|
116
|
+
- For "Moderate" operation speed, set the `speed` value to `0.75`.
|
|
117
|
+
- For "Slower" operation speed, set the `speed` value to `0.5`.
|
|
118
|
+
- For "Slowest" operation speed, set the `speed` value to `0.25`.
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
If the plugin does not operate under "Normal" mode, a warning will be issued on every startup, and this warning cannot be disabled. While an option is available to downgrade to the deprecated OpenSSL version (`v1.1.1`), it is not recommended.
|
|
120
121
|
|
|
121
|
-
##
|
|
122
|
-
|
|
122
|
+
## Specifying the Sensors
|
|
123
|
+
In the past, this plugin would automatically detect sensors and dynamically manage their addition and removal based on its observations.
|
|
123
124
|
|
|
124
|
-
|
|
125
|
-
* Set `logLevel` to `10` for errors only
|
|
126
|
-
* Set `logLevel` to `20` for warnings (and the above)
|
|
127
|
-
* Set `logLevel` to `30` for info (and the above)
|
|
128
|
-
* Set `logLevel` to `40` for debugging (and the above)
|
|
129
|
-
* Set `logLevel` to `50` for verbose (and the above)
|
|
125
|
+
However, this approach posed challenges. If the plugin failed to detect sensors or encountered portal irregularities, it could unintentionally remove all sensors, resulting in an inadvertent reset.
|
|
130
126
|
|
|
131
|
-
|
|
127
|
+
While a setting was introduced (prior to `v3.0.0`) to prevent the removal of obsolete zones, over time, it felt more like a workaround than a solution.
|
|
132
128
|
|
|
133
|
-
|
|
129
|
+
In this updated version of the plugin, I have implemented a new requirement that users must explicitly specify each sensor they wish to integrate into Homebridge.
|
|
134
130
|
|
|
135
|
-
|
|
136
|
-
|
|
131
|
+
All sensors are now organized within an array of objects, with each object containing the following settings:
|
|
132
|
+
- __Name__ (`name`)
|
|
133
|
+
- For display purposes (offers clarity in the event of an unforeseen reset).
|
|
134
|
+
- __ADT Name__ (`adtName`)
|
|
135
|
+
- Must match the name shown under the "Name" column in the "System" tab when logged into the portal.
|
|
136
|
+
- __ADT Type__ (`adtType`)
|
|
137
|
+
- Must match the type shown under the "Device Type" column in the "System" tab when logged into the portal.
|
|
138
|
+
- Contingent to the devices shown under the [Supported Devices](#supported-devices) section.
|
|
139
|
+
- __ADT Zone__ (`adtZone`)
|
|
140
|
+
- Must match the zone shown under the "Zone" column in the "System" tab when logged into the portal.
|
|
137
141
|
|
|
138
|
-
|
|
139
|
-
* Set `logActivity` to `true` for active mode
|
|
140
|
-
* Set `logActivity` to `false` for passive mode
|
|
142
|
+
If you do not find the supported type listed, please note that the plugin will notify me. There's no need to create a separate issue on GitHub, as I am actively working on adding support as soon as I gather sufficient information to determine the statuses displayed on the portal.
|
|
141
143
|
|
|
142
|
-
|
|
144
|
+
Your patience is appreciated as I address and incorporate the necessary updates.
|
|
143
145
|
|
|
144
|
-
##
|
|
145
|
-
|
|
146
|
+
## Force Arming (Arm Away / Arm Stay / Arm Night)
|
|
147
|
+
Due to the way how the Home app (the HAP protocol) establishes arm states, the plugin will force arm upon detecting active motion or open sensors. Disabling this feature is not possible, as this will result in arming failures without alert notifications from the Home app.
|
|
146
148
|
|
|
147
|
-
|
|
148
|
-
* Set `removeObsoleteZones` to `true` for removal mode
|
|
149
|
-
* Set `removeObsoleteZones` to `false` for notification mode
|
|
149
|
+
If you are concerned about this, please read the instructions below to check the status of the sensors in your home before arming your system:
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
1. Open the Home app
|
|
152
|
+
2. Tap the dotted circle (`...`) (located on the top right of the screen)
|
|
153
|
+
3. View the sensors that require attention and resolve those issues
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
The plugin may continuously ping the ADT Pulse servers, even when authentication fails, which will cause your IP to be temporarily banned. This will pause the plugin without you breaking other plugins. _Optional._
|
|
155
|
+
If you are using automation, __you acknowledge that this will happen__ and accept the risks for the system not completely arming the system.
|
|
155
156
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
* Set `pausePlugin` to `false` for normal mode
|
|
157
|
+
## Arm Night Support
|
|
158
|
+
As for ADT Pulse systems, __Arm Night__ is only available for use through the panel itself. Although it is not visible on the Web Portal or the mobile app, you can still place your system in __Arm Night__ mode with this plugin.
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
## Debug Mode
|
|
161
|
+
Previously, there was a specific setting to configure debug logs at five different levels. Over time, it became apparent that this setting made debugging excessively challenging for the average consumer. To improve this, debug mode is now activated __ONLY when the debug mode is enabled on the Homebridge__ itself.
|
|
161
162
|
|
|
162
|
-
|
|
163
|
-
Managing many accessories in a Homebridge environment is already a seemingly hard task, and sometimes you might want to step back and do a reset. _Optional._
|
|
163
|
+
This approach promotes isolation (by using a separate bridge for each plugin) and helps enhance the troubleshooting experience in case any issues arise.
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
* Set `resetAll` to `false` for normal mode
|
|
165
|
+
## Documentation, Logging, and Detection
|
|
166
|
+
This function comes with a built-in feature to notify me if the plugin detects anomalies in the states of sensors and panel statuses. In the event of such occurrences, especially when these statuses are undocumented, I will receive notifications.
|
|
168
167
|
|
|
169
|
-
|
|
168
|
+
__Be assured that this plugin strictly adheres to the [verified Homebridge plugin](https://github.com/homebridge/homebridge/wiki/verified-Plugins#verified-plugins) requirements, ensuring that it does not track users in any manner.__
|
|
170
169
|
|
|
171
|
-
|
|
172
|
-
The script provides an active connection to the ADT Pulse portal. Here is a list of must-knows, just in case you might want to debug (or improve) the plugin:
|
|
170
|
+
If the information sent includes personally identifiable details, such as IP addresses, MAC addresses, or serial numbers, those fields will be automatically redacted (replaced with `*** REDACTED FOR PRIVACY ***`) since they are unwanted information needed to improve the plugin.
|
|
173
171
|
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
To reinforce this, a warning will be issued each time you utilize the included scripts, start the plugin, or when the plugin is about to notify me, serving as a reminder of these privacy measures.
|
|
173
|
+
|
|
174
|
+
Here is an example of the information I see when the plugin detects unknown statuses from the gateway:
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"communication": {
|
|
178
|
+
"primaryConnectionType": "Broadband",
|
|
179
|
+
"broadbandConnectionStatus": "Unavailable",
|
|
180
|
+
"cellularConnectionStatus": "N/A",
|
|
181
|
+
"cellularSignalStrength": "N/A"
|
|
182
|
+
},
|
|
183
|
+
"manufacturer": "ADT Pulse Gateway",
|
|
184
|
+
"model": "Some Model",
|
|
185
|
+
"network": {
|
|
186
|
+
"broadband": {
|
|
187
|
+
"ip": "*** REDACTED FOR PRIVACY ***",
|
|
188
|
+
"mac": "*** REDACTED FOR PRIVACY ***"
|
|
189
|
+
},
|
|
190
|
+
"device": {
|
|
191
|
+
"ip": "*** REDACTED FOR PRIVACY ***",
|
|
192
|
+
"mac": "*** REDACTED FOR PRIVACY ***"
|
|
193
|
+
},
|
|
194
|
+
"router": {
|
|
195
|
+
"lanIp": "*** REDACTED FOR PRIVACY ***",
|
|
196
|
+
"wanIp": "*** REDACTED FOR PRIVACY ***"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"serialNumber": "*** REDACTED FOR PRIVACY ***",
|
|
200
|
+
"status": "Online",
|
|
201
|
+
"update": {
|
|
202
|
+
"last": "Yesterday 12:00 PM",
|
|
203
|
+
"next": "Today 12:00 PM"
|
|
204
|
+
},
|
|
205
|
+
"versions": {
|
|
206
|
+
"firmware": "Some Firmware Version",
|
|
207
|
+
"hardware": "Some Hardware Version"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
__Notice:__ If you prefer to prevent this functionality, you can block the URL that the plugin utilizes to notify me. However, it is essential to note that I will not be able to offer assistance or support if you choose to impede the plugin from fulfilling its purpose to the best of its capabilities.
|
|
176
212
|
|
|
177
213
|
## Credits and Appreciation
|
|
178
|
-
If you
|
|
214
|
+
If you find value in the ongoing development of this plugin and wish to express your appreciation, you have the option to become my supporter on [GitHub Sponsors](https://github.com/sponsors/mrjackyliang)!
|
|
215
|
+
|
|
216
|
+
Moreover, I extend a special acknowledgment and heartfelt gratitude to the following individuals:
|
|
217
|
+
- [@kevinmhickey](https://github.com/kevinmhickey) - For the inspiration to build a better script used in `v1.0.0` through `v2.2.0`.
|
|
218
|
+
- [@Danimal4326](https://github.com/Danimal4326) - For successfully identifying the solution for ADT Pulse's 2-factor authentication.
|
|
179
219
|
|
|
180
|
-
|
|
220
|
+
Their contributions have significantly enhanced the functionality and reliability of this plugin.
|