homebridge-adt-pulse 3.0.0-beta.9 → 3.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.
package/LICENSE CHANGED
@@ -1,15 +1,201 @@
1
- ISC License
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
2
4
 
3
- Copyright (c) 2023, Jacky Liang
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
4
6
 
5
- Permission to use, copy, modify, and/or distribute this software for any
6
- purpose with or without fee is hereby granted, provided that the above
7
- copyright notice and this permission notice appear in all copies.
7
+ 1. Definitions.
8
8
 
9
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2024 Jacky Liang
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
package/README.md CHANGED
@@ -1,26 +1,25 @@
1
1
  ADT Pulse for Homebridge
2
2
  =========================
3
3
 
4
- [![NPM Version](https://img.shields.io/npm/v/homebridge-adt-pulse.svg?style=flat-square&color=blue)](https://www.npmjs.com/package/homebridge-adt-pulse)
5
- [![NPM Downloads](https://img.shields.io/npm/dt/homebridge-adt-pulse.svg?style=flat-square&color=success)](https://www.npmjs.com/package/homebridge-adt-pulse)
6
- [![GitHub License](https://img.shields.io/github/license/mrjackyliang/homebridge-adt-pulse?style=flat-square&color=yellow)](https://github.com/mrjackyliang/homebridge-adt-pulse/blob/master/LICENSE)
7
- [![Become a GitHub Sponsor](https://img.shields.io/badge/sponsor-github-black?style=flat-square&color=orange)](https://github.com/sponsors/mrjackyliang)
4
+ [![NPM Package](https://img.shields.io/npm/v/homebridge-adt-pulse?style=flat-square&logo=npm&logoColor=%23ffffff&color=%23b25da6)](https://www.npmjs.com/package/homebridge-adt-pulse)
5
+ [![NPM Downloads](https://img.shields.io/npm/dt/homebridge-adt-pulse?style=flat-square&logo=npm&logoColor=%23ffffff&color=%236688c3)](https://www.npmjs.com/package/homebridge-adt-pulse)
6
+ [![GitHub License](https://img.shields.io/github/license/mrjackyliang/homebridge-adt-pulse?style=flat-square&logo=googledocs&logoColor=%23ffffff&color=%2348a56a)](https://github.com/mrjackyliang/homebridge-adt-pulse/blob/main/LICENSE)
7
+ [![Become a GitHub Sponsor](https://img.shields.io/badge/github-sponsor-gray?style=flat-square&logo=githubsponsors&logoColor=%23ffffff&color=%23eaaf41)](https://github.com/sponsors/mrjackyliang)
8
+ [![Donate via PayPal](https://img.shields.io/badge/paypal-donate-gray?style=flat-square&logo=paypal&logoColor=%23ffffff&color=%23ce4a4a)](https://liang.nyc/paypal)
8
9
 
9
- This is a [verified Homebridge plugin](https://github.com/homebridge/homebridge/wiki/verified-Plugins#verified-plugins) for ADT Pulse users that allow homeowners to control their security system and view sensor status through HomeKit. The API relies on the ADT Pulse Web Portal (by Icontrol One).
10
+ 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
11
 
11
- # Please install the beta version!
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.
12
+ 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))
14
13
 
15
14
  To use this plugin, here are three simple steps you need to follow:
16
- 1. Run `npm install homebridge-adt-pulse`
17
- 2. Configure the plugin using the [configuration example](#configuration)
18
- 3. Restart Homebridge
15
+ 1. Run `npm install homebridge-adt-pulse`.
16
+ 2. Configure this plugin using this [sample](#configuration) for guidance.
17
+ 3. Restart Homebridge and see magic happen!
19
18
 
20
- You can also search `adt-pulse` using [HOOBS](https://github.com/mkellsy/homebridge-config-ui) or [Onzu's Homebridge Config UI](https://github.com/oznu/homebridge-config-ui-x). Then proceed to configure the plugin using the included settings in the plugin page.
19
+ 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.
21
20
 
22
21
  ## Configuration
23
- When configuring this plugin, simply add the platform to your existing `config.json` file. Mind that the `platform` name must always be `ADTPulse`.
22
+ Here is an example of how the `config.json` file for this plugin should be configured:
24
23
  ```json
25
24
  {
26
25
  "platforms": [
@@ -35,10 +34,10 @@ When configuring this plugin, simply add the platform to your existing `config.j
35
34
  "speed": 1,
36
35
  "sensors": [
37
36
  {
38
- "name": "Lounge Smoke",
39
- "adtName": "Basement Smoke",
40
- "adtType": "fire",
41
- "adtZone": 1
37
+ "name": "Family Room Couch Window 1",
38
+ "adtName": "Family Room Window (99)",
39
+ "adtType": "doorWindow",
40
+ "adtZone": 99
42
41
  }
43
42
  ]
44
43
  },
@@ -49,131 +48,194 @@ When configuring this plugin, simply add the platform to your existing `config.j
49
48
  ]
50
49
  }
51
50
  ```
51
+ 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.
52
52
 
53
- ## Plugin Limitations
54
- Even though the plugin name is "ADT Pulse for Homebridge", this Homebridge plugin supports certain ADT hardware. In addition, this plugin is NOT a complete replacement to the [official ADT Pulse app](https://www.adt.com/help/faq/adt-pulse/adt-pulse-mobile-app).
53
+ ## Supported Devices
54
+ 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).
55
55
 
56
- The hardware configurations supported by this plugin are:
57
- 1. ADT Security Panel (`system`)
58
- 2. ADT Door/Window Sensors (`doorWindow`)
59
- 3. ADT Glass Break Detectors (`glass`)
60
- 4. ADT Motion Sensors (`motion`)
61
- 5. ADT Carbon Monoxide Detector (`co`)
62
- 6. ADT Fire (Smoke/Heat) Detector (`fire`)
56
+ This plugin will expose these devices by default:
57
+ 1. ADT Pulse Gateway (`gateway`)
58
+ 2. Security Panel (`panel`)
63
59
 
64
- If you have a sensor that is unsupported by this plugin, please [submit an issue](https://github.com/mrjackyliang/homebridge-adt-pulse/issues/new/choose) so I can add support for it.
60
+ This plugin can expose these devices (in read-only mode) based on your configuration:
61
+ 1. `co` - Carbon Monoxide Detector
62
+ 2. `doorWindow` - Door/Window Sensor __::__ Door Sensor __::__ Window Sensor
63
+ 3. `fire` - Fire (Smoke/Heat) Detector
64
+ 4. `flood` - Water/Flood Sensor
65
+ 5. `glass` - Glass Break Detector
66
+ 6. `heat` - Heat (Rate-of-Rise) Detector
67
+ 7. `motion` - Motion Sensor __::__ Motion Sensor (Notable Events Only)
68
+ 8. `shock` - Shock Sensor
69
+ 9. `supervisory` - System/Supervisory
70
+ 10. `temperature` - Temperature Sensor
65
71
 
66
- Due to ADT Pulse limitations, accessories that are connected to the Z-Wave Platform cannot be supported. Consider using other Homebridge plugins.
72
+ 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.
67
73
 
68
- ## Configure 2-Factor Authentication
69
- With the recent updates, ADT Pulse now requires 2-factor authentication for your account. In the near future, this fingerprint will be required. Before you begin, make sure 2-Factor Authentication is already setup.
74
+ ## Specifying the Portal Region
75
+ ADT Pulse is available to consumers in either the United States or Canada. To specify your country, use the following settings:
70
76
 
71
- 1. Open a Chrome browser tab (under Incognito mode)
72
- 2. Open Developer Tools (using **View** **Developer** **Developer Tools** menu)
73
- 3. Click on the **Network** tab (make sure **Preserve log** checkbox is checked)
74
- 4. In the filter box, enter `signin.jsp?networkid=`
75
- 5. Go to `https://portal.adtpulse.com` or `https://portal-ca.adtpulse.com` and login to your account
76
- 6. Click **Request Code**, type in the requested code, and then click **Submit Code**
77
- 7. Click **Trust this device** and name the device `Homebridge`
78
- 8. Click **Save and Continue**
79
- 9. Click **Sign Out** in the top right corner of the webpage
80
- 10. Login to your account (once again)
81
- 11. Click on the network call (beginning with `signin.jsp?networkid=`) appearing in the DevTools window. Select the last one.
82
- 12. In the **Payload** tab, under **Form Data**, copy the entire **fingerprint** (after `fingerprint:`, do not include spaces)
83
- 13. Paste the copied text into the `fingerprint` field into your `config.json`
84
- 14. Close the Chrome window (DO NOT sign out)
77
+ - If you are a United States customer, set the `subdomain` value to `"portal"`.
78
+ - If you are a Canada customer, set the `subdomain` value to `"portal-ca"`.
85
79
 
86
- ## Force Arming (Arm Away/Stay/Night)
87
- 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.
80
+ Select the appropriate setting based on your country, as the ability to switch between countries is determined by the ADT region you are subscribed to.
88
81
 
89
- __Without force arm, arm away/stay/night may stall and reset to Disarm with no errors.__
82
+ ## Finding the Device Fingerprint
83
+ Since the introduction of 2-factor authentication, a device fingerprint has become a necessity during login. To retrieve the fingerprint, follow these steps:
90
84
 
91
- Before arming, please check the status of your Home (instructions below), as HomeKit will not check if your devices are in an active state.
85
+ 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).
86
+ 2. Using the same browser that was used for login, visit the [ADT Pulse Device Fingerprint Detector](https://raw.githack.com/mrjackyliang/homebridge-adt-pulse/main/fingerprint/index.html) web page.
87
+ 3. Click the "Copy Fingerprint" button and paste it into the `fingerprint` value in the `config.json` file.
92
88
 
93
- 1. Open the Home app
94
- 2. Tap the Status Details (listed in the Home tab _below_ the title)
95
- 3. View the __ATTENTION__ area of your home
89
+ For a detailed breakdown of the device fingerprint contents, explore the "Device Details" tab located at the top right of the web page.
96
90
 
97
- ## Arm Night Support
98
- 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.
91
+ ## Specifying the Operational Mode
92
+ This plugin offers three operational modes: "Normal", "Paused", and "Reset". To configure these modes, use the following settings:
93
+
94
+ - For regular operation, set the `mode` value to `"normal"`.
95
+ - To pause the plugin (all devices will become non-responsive), set the `mode` value to `"paused"`.
96
+ - To reset the plugin (remove associated accessories), set the `mode` value to `"reset"`.
97
+
98
+ 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__.
99
+
100
+ This precautionary measure is in place to avoid unintended resets that could lead to the time-consuming task of reconfiguring automations and accessories.
101
+
102
+ ## Specifying the Synchronization Speed
103
+ Typically, the plugin triggers every second to assess whether sync check signals or keep-alive signals should be dispatched.
104
+
105
+ However, for certain consumer routers, this plugin may induce a network slowdown, and on older devices incompatible with newer OpenSSL versions (`v3.1`), may result in sustained 100% CPU usage. In an attempt to address both issues, adjust the firing interval using the following settings:
106
+
107
+ - For "Normal" operation speed, set the `speed` value to `1`.
108
+ - For "Moderate" operation speed, set the `speed` value to `0.75`.
109
+ - For "Slower" operation speed, set the `speed` value to `0.5`.
110
+ - For "Slowest" operation speed, set the `speed` value to `0.25`.
111
+
112
+ If the plugin does not operate under "Normal" mode, a warning will be issued on every startup, and this warning cannot be disabled.
113
+
114
+ ## Specifying the Sensors
115
+ In the past, this plugin would automatically detect sensors and dynamically manage their addition and removal based on its observations.
116
+
117
+ 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.
99
118
 
100
- Because of the force arming procedure (above), __please make sure no devices are open or reporting motion__ as this may render the __Arm Night__ mode less effective.
119
+ 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.
101
120
 
102
- ## Manually Override Sensors
103
- Due to ADT Pulse portal limitations, sensors may be inaccurately detected. Use this setting to manually override default detection features. _Optional._
121
+ 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.
104
122
 
105
- The default is `[]`. Configure `overrideSensors[]` with the values below:
106
- * Set `name` to the name that is displayed in the ADT Pulse portal
107
- * Set `type` to `sensor,doorWindow`, `sensor,glass`, `sensor,motion`, `sensor,co`, or `sensor,fire`
123
+ All sensors are now organized within an array of objects, with each object containing the following settings:
124
+ - __Name__ (`name`)
125
+ - For display purposes (offers clarity in the event of an unforeseen reset).
126
+ - __ADT Name__ (`adtName`)
127
+ - Must match the name shown under the "Name" column in the "System" tab when logged into the portal.
128
+ - __ADT Type__ (`adtType`)
129
+ - Must match the type shown under the "Device Type" column in the "System" tab when logged into the portal.
130
+ - Contingent to the devices shown under the [Supported Devices](#supported-devices) section.
131
+ - __ADT Zone__ (`adtZone`)
132
+ - Must match the zone shown under the "Zone" column in the "System" tab when logged into the portal.
108
133
 
109
- __NOTE:__ Examples are noted above in the [configuration](#configuration) section.
134
+ 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.
110
135
 
111
- ## Set Country
112
- 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._
136
+ Your patience is appreciated as I address and incorporate the necessary updates.
113
137
 
114
- The default is `us`. Configure `country` with the values below:
115
- * Set `country` to `us` for United States
116
- * Set `country` to `ca` for Canada
138
+ ## Force Arming (Arm Away / Arm Stay / Arm Night)
139
+ 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.
117
140
 
118
- __NOTE:__ If the `country` setting has been specified incorrectly, a warning will be shown then subsequently set to `us`.
141
+ 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:
119
142
 
120
- ## Log Level (Debugging)
121
- Debugging is difficult without the proper information, in such, this plugin offers a way to filter out messages sent to the logs. _Optional._
143
+ 1. Open the Home app
144
+ 2. Tap the dotted circle (`...`) (located on the top right of the screen)
145
+ 3. View the sensors that require attention and resolve those issues
146
+
147
+ If you are using automation, __you acknowledge that this will happen__ and accept the risks for the system not completely arming the system.
122
148
 
123
- The default is `30`. Configure `logLevel` with the values below:
124
- * Set `logLevel` to `10` for errors only
125
- * Set `logLevel` to `20` for warnings (and the above)
126
- * Set `logLevel` to `30` for info (and the above)
127
- * Set `logLevel` to `40` for debugging (and the above)
128
- * Set `logLevel` to `50` for verbose (and the above)
149
+ ## Arm Night Support
150
+ 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.
129
151
 
130
- __NOTE:__ If the `logLevel` setting has been specified incorrectly, a warning will be shown then subsequently set to `30`.
152
+ __Note:__ A workaround has been implemented to address portal issues preventing the completion of the "Arm Night" action. If you encounter warnings related to this, you can safely disregard them.
131
153
 
132
- __NOTE 2:__ Don't forget to enable Homebridge Debug Mode when setting `logLevel` to `40` or above or else debug messages won't be shown.
154
+ ## Debug Mode
155
+ Previously, there was a setting to allow users to switch the plugin to debug mode. Over time, it became apparent that this setting made resolving issues excessively challenging.
133
156
 
134
- ## Log Activity
135
- While the plugin is running, it has the ability to record alarm and sensor activity from the ADT Pulse portal to the Homebridge logs. _Optional._
157
+ Consumers would enable debug mode, but forget to also enable Homebridge debug mode, causing contributors to not be able to effectively resolve bug reports.
136
158
 
137
- The default is `true`. Configure `logActivity` with the values below:
138
- * Set `logActivity` to `true` for active mode
139
- * Set `logActivity` to `false` for passive mode
159
+ To improve this, debug mode is now activated __ONLY when debug mode is enabled on Homebridge__ itself. This approach promotes isolation (logs can be separated for each bridge) and helps enhance the troubleshooting experience in case any issues arise.
140
160
 
141
- __NOTE:__ Logging alarm and sensor activity requires the `logLevel` setting to be set to `30` or greater.
161
+ ## Temperature Sensors in HAP Protocol
162
+ The Temperature Sensor (`temperature`) functions differently compared to standard contact sensors when it comes to processing sensor statuses.
142
163
 
143
- ## Remove Obsolete Zones
144
- The plugin offers a way to automatically detect and remove obsolete zones. If you have recently experienced __sensor reset__ issues, you may disable this setting. _Optional._
164
+ In contrast to typical contact sensors that convey open or closed status, the temperature sensor exposed in the Home app (utilizing the HAP protocol) operates with temperature values. To accommodate this difference, the accessory converts these binary states into corresponding temperature degrees:
165
+ - Normal temperatures are represented as __0°C__.
166
+ - Abnormal temperatures are represented as __100°C__.
145
167
 
146
- The default is `true`. Configure `removeObsoleteZones` with the values below:
147
- * Set `removeObsoleteZones` to `true` for removal mode
148
- * Set `removeObsoleteZones` to `false` for notification mode
168
+ ## Support for HOOBS
169
+ Please note that HOOBS may use an outdated configuration UI. This issue that was reported by me, remains unresolved by the HOOBS team. For additional details, refer to this [GitHub issue](https://github.com/hoobs-org/HOOBS/issues/1873).
149
170
 
150
- __NOTE:__ If recently, you had sensors removed from ADT Pulse, the plugin will not remove these sensors unless `removeObsoleteZones` is set to `true`.
171
+ In the interim, HOOBS users should manually configure the plugin using the [sample configuration](#configuration) provided above. For those technically inclined, consider replacing the HOOBS software with [Homebridge](https://github.com/homebridge/homebridge/wiki).
151
172
 
152
- ## Pausing the Plugin
153
- 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._
173
+ __Note:__ Based on user complaints on [Reddit](https://www.reddit.com/r/HOOBS/), it appears that HOOBS developers have stopped working on the product. Support will be offered on a "best effort" basis, and the official status will be pulled.
154
174
 
155
- The default is `false`. Configure `pausePlugin` with the values below:
156
- * Set `pausePlugin` to `true` for reset mode
157
- * Set `pausePlugin` to `false` for normal mode
175
+ ## Accidental Removal of Stale Accessories
176
+ While not mandatory, it's highly advisable to take precautions in case of unexpected events, such as a plugin failing to initialize that leads to Homebridge automatically removing all outdated accessories, potentially disrupting automations and customizations.
158
177
 
159
- __NOTE:__ Once you are ready to resume the plugin, remember to set the `pausePlugin` setting back to `false` or else the plugin will continue to stay paused.
178
+ To safeguard against such scenarios, consider the following options:
179
+ - Enable the **Keep Accessories Of Disabled/Uninstalled Platform Plugins** setting in Homebridge.
180
+ - Or add the `-K` or `--keep-orphans` option when running via commands.
181
+ - Create a backup using the [Home+](https://hochgatterer.me/home+/) app by Matthias Hochgatterer after making changes.
160
182
 
161
- ## Resetting the Plugin
162
- 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._
183
+ ## Documentation, Logging, and Detection
184
+ 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.
163
185
 
164
- The default is `false`. Configure `resetAll` with the values below:
165
- * Set `resetAll` to `true` for reset mode
166
- * Set `resetAll` to `false` for normal mode
186
+ __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.__
167
187
 
168
- __NOTE:__ Once reset is complete, remember to set the `resetAll` setting back to `false` or else the plugin will just repeat reset mode again.
188
+ 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.
169
189
 
170
- ## Developer Information
171
- 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:
190
+ 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.
172
191
 
173
- 1. Device and zone statuses will be fetched every __3 seconds__. If logins have failed more than 2 times, portal sync will pause for 10 minutes.
174
- 2. Supported versions are `25.0.0-21` and `26.0.0-32`. If this plugin does not support either version, a warning will appear in the logs. Please [submit an issue](https://github.com/mrjackyliang/homebridge-adt-pulse/issues/new/choose) to let me know!
192
+ Here is an example of the information I see when the plugin detects unknown statuses from the gateway:
193
+ ```json
194
+ {
195
+ "communication": {
196
+ "broadbandConnectionStatus": "Unavailable",
197
+ "cellularConnectionStatus": "N/A",
198
+ "cellularSignalStrength": "N/A",
199
+ "primaryConnectionType": "Broadband"
200
+ },
201
+ "manufacturer": "ADT Pulse Gateway",
202
+ "model": "XYZ",
203
+ "network": {
204
+ "broadband": {
205
+ "ip": "*** REDACTED FOR PRIVACY ***",
206
+ "mac": "*** REDACTED FOR PRIVACY ***"
207
+ },
208
+ "device": {
209
+ "ip": "*** REDACTED FOR PRIVACY ***",
210
+ "mac": "*** REDACTED FOR PRIVACY ***"
211
+ },
212
+ "router": {
213
+ "lanIp": "*** REDACTED FOR PRIVACY ***",
214
+ "wanIp": "*** REDACTED FOR PRIVACY ***"
215
+ }
216
+ },
217
+ "serialNumber": "*** REDACTED FOR PRIVACY ***",
218
+ "status": "Online",
219
+ "update": {
220
+ "last": "Yesterday 12:00 PM",
221
+ "next": "Today 12:00 PM"
222
+ },
223
+ "versions": {
224
+ "firmware": "1.0.0",
225
+ "hardware": "1.0.0"
226
+ }
227
+ }
228
+ ```
229
+ __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.
175
230
 
176
231
  ## Credits and Appreciation
177
- If you would like to show your appreciation for its continued development, you can optionally become my supporter on [GitHub Sponsors](https://github.com/sponsors/mrjackyliang)!
232
+ 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)!
233
+
234
+ Moreover, I extend a special acknowledgment and heartfelt gratitude to the following individuals:
235
+ - [@kevinmhickey](https://github.com/kevinmhickey) - For the inspiration to build a better script used in `v1.0.0` through `v2.2.0`.
236
+ - [@Danimal4326](https://github.com/Danimal4326) - For successfully identifying the solution for ADT Pulse's 2-factor authentication and for contributions toward the successful development of `v3.0.0`.
237
+ - [@sapireli](https://github.com/sapireli) - For contributions toward the successful development of `v3.0.0`.
238
+ - [@hapinstance](https://github.com/hapinstance) - For contributions toward the successful development of `v3.0.0`.
239
+ - [@thcooley](https://github.com/thcooley) - For contributions toward the successful development of `v3.0.0`.
178
240
 
179
- Also, thank you to [@kevinmkickey](https://github.com/kevinmhickey) for providing the [ADT Pulse script](https://github.com/kevinmhickey/adt-pulse) and [@Danimal4326](https://github.com/Danimal4326) for finding the solution for ADT Pulse's 2-factor authentication.
241
+ Their contributions and time spent have significantly enhanced the functionality and reliability of this plugin.