@homebridge-plugins/homebridge-resideo 3.0.3-beta.9 → 3.1.1-beta.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.
Files changed (117) hide show
  1. package/CHANGELOG.md +30 -30
  2. package/CLAUDE.md +49 -0
  3. package/README.md +47 -54
  4. package/config.schema.json +112 -3
  5. package/dist/{platform.d.ts → Platform.HAP.d.ts} +7 -5
  6. package/dist/Platform.HAP.d.ts.map +1 -0
  7. package/dist/{platform.js → Platform.HAP.js} +40 -38
  8. package/dist/Platform.HAP.js.map +1 -0
  9. package/dist/Platform.HAP.test.d.ts +2 -0
  10. package/dist/Platform.HAP.test.d.ts.map +1 -0
  11. package/dist/{platform.test.js → Platform.HAP.test.js} +7 -7
  12. package/dist/Platform.HAP.test.js.map +1 -0
  13. package/dist/Platform.Matter.d.ts +56 -0
  14. package/dist/Platform.Matter.d.ts.map +1 -0
  15. package/dist/Platform.Matter.js +138 -0
  16. package/dist/Platform.Matter.js.map +1 -0
  17. package/dist/devices/device.d.ts +6 -1
  18. package/dist/devices/device.d.ts.map +1 -1
  19. package/dist/devices/device.js +2 -2
  20. package/dist/devices/device.js.map +1 -1
  21. package/dist/devices/leaksensors.d.ts +1 -1
  22. package/dist/devices/leaksensors.d.ts.map +1 -1
  23. package/dist/devices/leaksensors.js +2 -2
  24. package/dist/devices/leaksensors.js.map +1 -1
  25. package/dist/devices/roomsensors.d.ts +1 -1
  26. package/dist/devices/roomsensors.d.ts.map +1 -1
  27. package/dist/devices/roomsensors.js +2 -2
  28. package/dist/devices/roomsensors.js.map +1 -1
  29. package/dist/devices/roomsensorthermostats.d.ts +1 -1
  30. package/dist/devices/roomsensorthermostats.d.ts.map +1 -1
  31. package/dist/devices/roomsensorthermostats.js +14 -14
  32. package/dist/devices/roomsensorthermostats.js.map +1 -1
  33. package/dist/devices/thermostats.d.ts +1 -1
  34. package/dist/devices/thermostats.d.ts.map +1 -1
  35. package/dist/devices/thermostats.js +61 -94
  36. package/dist/devices/thermostats.js.map +1 -1
  37. package/dist/devices/valve.d.ts +1 -1
  38. package/dist/devices/valve.d.ts.map +1 -1
  39. package/dist/devices/valve.js +4 -6
  40. package/dist/devices/valve.js.map +1 -1
  41. package/dist/homebridge-ui/public/index.html +248 -226
  42. package/dist/homebridge-ui/server.d.ts.map +1 -1
  43. package/dist/homebridge-ui/server.js +0 -217
  44. package/dist/homebridge-ui/server.js.map +1 -1
  45. package/dist/http-client.d.ts +30 -0
  46. package/dist/http-client.d.ts.map +1 -0
  47. package/dist/http-client.js +109 -0
  48. package/dist/http-client.js.map +1 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +5 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.test.js +2 -3
  53. package/dist/index.test.js.map +1 -1
  54. package/dist/settings.d.ts +15 -5
  55. package/dist/settings.d.ts.map +1 -1
  56. package/dist/settings.js +4 -4
  57. package/dist/settings.js.map +1 -1
  58. package/dist/settings.test.js +4 -4
  59. package/dist/settings.test.js.map +1 -1
  60. package/dist/utils.d.ts +12 -0
  61. package/dist/utils.d.ts.map +1 -1
  62. package/dist/utils.js +36 -4
  63. package/dist/utils.js.map +1 -1
  64. package/dist/utils.test.js +74 -3
  65. package/dist/utils.test.js.map +1 -1
  66. package/package.json +47 -38
  67. package/.github/FUNDING.yml +0 -4
  68. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -97
  69. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  70. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -38
  71. package/.github/ISSUE_TEMPLATE/support-request.yml +0 -85
  72. package/.github/ISSUE_TEMPLATE.md +0 -52
  73. package/.github/PULL_REQUEST_TEMPLATE/pull_request.md +0 -27
  74. package/.github/copilot-instructions.md +0 -204
  75. package/.github/dependabot.yml +0 -17
  76. package/.github/labeler.yml +0 -49
  77. package/.github/npm-version-script-esm.js +0 -97
  78. package/.github/release-drafter.yml +0 -33
  79. package/.github/workflows/beta-release.yml +0 -55
  80. package/.github/workflows/build.yml +0 -18
  81. package/.github/workflows/changerelease.yml +0 -11
  82. package/.github/workflows/labeler.yml +0 -9
  83. package/.github/workflows/release-drafter.yml +0 -14
  84. package/.github/workflows/release.yml +0 -35
  85. package/.github/workflows/stale.yml +0 -12
  86. package/SECURITY.md +0 -19
  87. package/branding/Homebridge_x_Resideo.svg +0 -28
  88. package/branding/honeywell/Homebridge_x_Honeywell.svg +0 -1
  89. package/branding/honeywell/homebridge-honeywell-home-changelog.md +0 -851
  90. package/branding/icon.png +0 -0
  91. package/dist/homebridge-ui/public/lib/featureoptions.js +0 -455
  92. package/dist/homebridge-ui/public/lib/featureoptions.js.map +0 -1
  93. package/dist/homebridge-ui/public/lib/webUi-featureoptions.mjs +0 -3765
  94. package/dist/homebridge-ui/public/lib/webUi.mjs +0 -189
  95. package/dist/platform.d.ts.map +0 -1
  96. package/dist/platform.js.map +0 -1
  97. package/dist/platform.test.d.ts +0 -2
  98. package/dist/platform.test.d.ts.map +0 -1
  99. package/dist/platform.test.js.map +0 -1
  100. package/dist/resideo-options.d.ts +0 -24
  101. package/dist/resideo-options.d.ts.map +0 -1
  102. package/dist/resideo-options.js +0 -215
  103. package/dist/resideo-options.js.map +0 -1
  104. package/docs/.nojekyll +0 -1
  105. package/docs/assets/hierarchy.js +0 -1
  106. package/docs/assets/highlight.css +0 -22
  107. package/docs/assets/icons.js +0 -18
  108. package/docs/assets/icons.svg +0 -1
  109. package/docs/assets/main.js +0 -60
  110. package/docs/assets/navigation.js +0 -1
  111. package/docs/assets/search.js +0 -1
  112. package/docs/assets/style.css +0 -1633
  113. package/docs/hierarchy.html +0 -1
  114. package/docs/index.html +0 -82
  115. package/docs/modules.html +0 -1
  116. package/docs/variables/default.html +0 -1
  117. package/eslint.config.js +0 -48
package/CHANGELOG.md CHANGED
@@ -1,32 +1,32 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
4
-
5
- ## [3.1.0](https://github.com/homebridge-plugins/homebridge-resideo/releases/tag/v3.1.0) (2025-09-05)
6
-
7
- ### What's Changes
8
- - Fix incorrect server references in Internal Server Error messages ([#799](https://github.com/homebridge-plugins/homebridge-resideo/issues/799))
9
- - Corrected error messages that incorrectly referenced "SmartThings servers" and "Meater Server" to properly reference "Resideo servers/Server"
10
- - No functional changes to error handling logic, only corrected the messaging text
11
- - Added hold switch functionality for thermostats to remove holds and return to schedule
12
- - Implemented StatefulProgrammableSwitch that allows users to remove thermostat holds via HomeKit scenes and automation
13
- - Switch state reflects current hold status (OFF for active hold, ON for following schedule)
14
- - Uses existing `statefulStatus` configuration option for backward compatibility
15
- - Enhances thermostat control similar to functionality available in other smart thermostat integrations
16
- - Fixes [#798](https://github.com/homebridge-plugins/homebridge-resideo/issues/798)
17
- - Added device discovery feature to help users find device IDs for configuration.
18
- - New `/getAvailableDevices` endpoint in configuration UI that fetches all devices from Resideo API
19
- - Enhanced DEVICES tab with "Available Devices from Resideo" section showing all devices in user's account
20
- - Displays device information including Device ID, name, class, model, location, and online status
21
- - Helps users find device IDs for devices that were reset or newly added to their Resideo account
22
- - Fixes issue where devices disappeared from cached accessories list after being reset
23
- - Fix L5 Water Shutoff valve API endpoints to use correct Resideo shutoffvalve endpoints and status parsing, resolves [#887](https://github.com/homebridge-plugins/homebridge-resideo/issues/887) & [#785](https://github.com/homebridge-plugins/homebridge-resideo/issues/785)
24
- - Corrected API endpoints from `/waterLeakDetectors/{deviceID}` to `/shutoffvalve/{deviceID}` for status retrieval
25
- - Updated valve control API from POST `/waterLeakDetectors/{deviceID}` to PUT `/shutoffvalve/{deviceID}/control`
26
- - Ensures proper communication with Resideo's shutoff valve API for accurate device control and status updates
27
- - Fixed valve status parsing to use `actuatorValve.valveStatus` instead of just device alive status
28
- - Valve state now correctly reflects actual device open/closed status
29
- - Housekeeping and updated dependencies.
1
+ ## v3.1.1 (Pending Release)
2
+
3
+ ### Changed
4
+
5
+ - fix: use the updated honeywell api endpoints (#924) (@wesleydeland)
6
+ - chore(deps): update dependencies
7
+ - chore: add .idea to .gitignore
8
+ - chore(github): align workflows, funding and issue templates with the other org plugins
9
+ - chore: align npm publishing files with the other org plugins
10
+ - chore: standardise the eslint setup with the other org plugins
11
+ - refactor: store device instances on their accessories like the other org plugins
12
+ - style: apply the standardised lint rules
13
+ - chore: standardise the package scripts and publishing config
14
+ - chore: update the plugin metadata for the new maintainer
15
+ - chore: sync the package version with the released v3.1.0
16
+ - docs: refresh the readme
17
+ - docs: add claude and copilot instructions files
18
+ - docs: use the standard org readme banner
19
+ - fix: keep matter display names within the 32 character limit
20
+
21
+ ## [3.1.0](https://github.com/homebridge-plugins/homebridge-resideo/compare/v3.0.2...v3.1.0) (2026-05-04)
22
+
23
+ ### Enhancements
24
+ - Added fan mode mapping configuration for simplified HomeKit fan control and Siri-friendly fan behavior in thermostats ([#880](https://github.com/homebridge-plugins/homebridge-resideo/pull/880)).
25
+ - Added a `convertUnits` configuration option to override temperature unit conversion when the Resideo API reports mismatched units ([#881](https://github.com/homebridge-plugins/homebridge-resideo/pull/881)).
26
+ - Enabled switching the thermostat fan between `Auto` and `On` while HomeKit fan target state remains `AUTO` ([#886](https://github.com/homebridge-plugins/homebridge-resideo/pull/886)).
27
+
28
+ ### Bug Fixes
29
+ - Fixed current temperature conversion so Fahrenheit readings from the Resideo API are converted correctly when HomeKit is using Celsius ([#882](https://github.com/homebridge-plugins/homebridge-resideo/pull/882)).
30
30
 
31
31
  **Full Changelog**: https://github.com/homebridge-plugins/homebridge-resideo/compare/v3.0.2...v3.1.0
32
32
 
@@ -224,4 +224,4 @@ All notable changes to this project will be documented in this file. This projec
224
224
  ### What's Changes
225
225
  - Move from `homebridge-honeywell-home` to `homebridge-resideo`
226
226
 
227
- **homebridge-honeywell-home Changelog**: https://github.com/homebridge-plugins/homebridge-resideo/blob/latest/honeywell/homebridge-honeywell-home-changelog.md
227
+ **homebridge-honeywell-home Changelog**: https://github.com/homebridge-plugins/homebridge-resideo/blob/latest/honeywell/homebridge-honeywell-home-changelog.md
package/CLAUDE.md ADDED
@@ -0,0 +1,49 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Commands
6
+
7
+ - `npm run build` — `rimraf ./dist && tsc && npm run plugin-ui`. The `plugin-ui` step rsyncs `src/homebridge-ui/public/index.html` into `dist/` (the UI server itself is TypeScript and compiled by `tsc`). Skipping it produces a broken published package.
8
+ - `npm run lint` — ESLint over the whole repo with `--max-warnings=0`. CI fails on any warning. `npm run lint:fix` to autofix.
9
+ - `npm test` — vitest, colocated `src/**/*.test.ts` files. `npm run test:watch` and `npm run test-coverage` also available.
10
+ - `npm run watch` — build, `npm link`, then `nodemon`: recompiles and restarts `homebridge -U ./test/hbConfig -D` on `src/**/*.ts` changes. `./test/hbConfig` is gitignored; create it locally.
11
+ - `npm run docs` — typedoc into `docs/` (gitignored — generated output is never committed).
12
+ - `npm run prepublishOnly` — lint then build; runs automatically on publish.
13
+
14
+ CI (`.github/workflows/build.yml`) runs install + lint on Node 22.x/24.x. Releases publish via `.github/workflows/release.yml`: a GitHub release (tag `vX.Y.Z`) publishes to npm's `latest` tag; pushes to `beta-X.Y.Z` / `alpha-X.Y.Z` branches publish incrementing prerelease versions to the `beta` / `alpha` tags.
15
+
16
+ Supported Node: `^22.12.0 || ^24.0.0`. Homebridge: `^2.0.0`.
17
+
18
+ ## Architecture
19
+
20
+ Homebridge dynamic platform plugin (`platform: "Resideo"`, package `@homebridge-plugins/homebridge-resideo`) bridging Resideo (Honeywell Home) thermostats, room sensors, leak sensors and shutoff valves into HomeKit via the Honeywell cloud API.
21
+
22
+ ### Authentication (`src/Platform.HAP.ts` + `src/homebridge-ui/`)
23
+
24
+ OAuth2 against `api.honeywell.com` using the user's own developer-portal app (consumer key/secret). The custom plugin UI handles the initial account-link flow (authorize → callback → tokens written to config). At runtime the platform refreshes the access token (`refreshAccessToken`) before polling. HTTP goes through `src/http-client.ts` (`NativeHttpClient`, native Node http/https — no undici).
25
+
26
+ ### HAP/Matter platform selection
27
+
28
+ `src/index.ts` registers a runtime proxy that picks `ResideoMatterPlatform` (`src/Platform.Matter.ts`, extends the HAP platform) when Homebridge reports Matter available+enabled (config-gated), otherwise `ResideoPlatform` (`src/Platform.HAP.ts`). Matter API calls must stay optional-chained.
29
+
30
+ ### Device discovery and classes (`src/devices/`)
31
+
32
+ Discovery walks `/v2/locations` then `/v2/devices` per location. The `deviceClass` switch creates the matching device class, each extending `deviceBase` (`src/devices/device.ts`) and stored on the accessory as `accessory.control` (module augmentation in `device.ts`):
33
+ - `Thermostats` (`thermostats.ts`) — T-series/Round/TCC thermostats
34
+ - `RoomSensors` / `RoomSensorThermostat` (`roomsensors.ts`, `roomsensorthermostats.ts`) — T9 room sensors, grouped via `T9groups`
35
+ - `LeakSensor` (`leaksensors.ts`) — WiFi leak & freeze detectors
36
+ - `Valve` (`valve.ts`) — `ShutoffValve` device class
37
+
38
+ Devices can be published as external accessories via per-device `external` config — never pass external accessories to `api.updatePlatformAccessories`.
39
+
40
+ ### Logging
41
+
42
+ Leveled log helpers (`infoLog`, `warnLog`, `errorLog`, `debugLog`, …) gated by `config.options.logging` with per-device overrides. Use these instead of `this.log` directly.
43
+
44
+ ## Conventions
45
+
46
+ - TypeScript ESM (`"type": "module"`): relative imports use `.js` extensions even from `.ts` source.
47
+ - ESLint is `@antfu/eslint-config` (flat config in `eslint.config.js`): single quotes, 1tbs braces, `curly` multi-line only, sorted exports. Run `npm run lint:fix` before committing.
48
+ - `config.schema.json` defines the Homebridge UI form and must stay in sync with the interfaces in `src/settings.ts` (`ResideoPlatformConfig`, `devicesConfig`, `options`).
49
+ - Copyright headers in `src/` credit @donavanbecker, the original plugin author — leave them in place.
package/README.md CHANGED
@@ -1,85 +1,78 @@
1
+ <p align="center">
2
+ <a href="https://github.com/homebridge-plugins/homebridge-resideo"><img alt="homebridge-resideo" src="https://raw.githubusercontent.com/homebridge-plugins/homebridge-resideo/latest/branding/Homebridge_x_Resideo.png" width="600px"></a>
3
+ </p>
1
4
  <span align="center">
2
5
 
3
- <a href="https://github.com/homebridge/verified/blob/latest/verified-plugins.json"><img alt="homebridge-verified" src="https://raw.githubusercontent.com/homebridge-plugins/homebridge-resideo/latest/branding/Homebridge_x_Resideo.svg?sanitize=true" width="350px"></a>
6
+ ## homebridge-resideo
4
7
 
5
- # Homebridge Resideo
8
+ Homebridge plugin to integrate Resideo (Honeywell Home) devices into HomeKit
6
9
 
7
- <a href="https://www.npmjs.com/package/homebridge-resideo"><img title="npm version" src="https://badgen.net/npm/v/homebridge-resideo?icon=npm&label" ></a>
8
- <a href="https://www.npmjs.com/package/homebridge-resideo"><img title="npm downloads" src="https://badgen.net/npm/dt/homebridge-resideo?label=downloads" ></a>
9
- <a href="https://discord.gg/8fpZA4S"><img title="discord-resideo" src="https://badgen.net/discord/online-members/8fpZA4S?icon=discord&label=discord" ></a>
10
- <a href="https://paypal.me/donavanbecker"><img title="donate" src="https://badgen.net/badge/donate/paypal/yellow" ></a>
11
-
12
- <p>The Homebridge <a href="https://resideo.com">Resideo</a>
13
- plugin allows you to access your Resideo Device(s) from HomeKit with
14
- <a href="https://homebridge.io">Homebridge</a>.
15
- </p>
10
+ [![npm](https://img.shields.io/npm/v/@homebridge-plugins/homebridge-resideo/latest?label=latest)](https://www.npmjs.com/package/@homebridge-plugins/homebridge-resideo)
11
+ [![npm](https://img.shields.io/npm/v/@homebridge-plugins/homebridge-resideo/beta?label=beta)](https://github.com/homebridge/homebridge/wiki/How-to-Install-Alternate-Plugin-Versions)<br>
12
+ [![verified-by-homebridge](https://img.shields.io/badge/homebridge-verified-blueviolet?color=%23491F59&style=flat)](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)<br>
13
+ [![npm](https://img.shields.io/npm/dt/@homebridge-plugins/homebridge-resideo)](https://www.npmjs.com/package/@homebridge-plugins/homebridge-resideo)
14
+ [![Discord](https://img.shields.io/discord/432663330281226270?color=728ED5&logo=discord&label=hb-discord)](https://discord.gg/bHjKNkN)
16
15
 
17
16
  </span>
18
17
 
19
- ## Installation
18
+ ### Plugin Information
20
19
 
21
- 1. Search for "Resideo" on the plugin screen of [Homebridge Config UI X](https://github.com/oznu/homebridge-config-ui-x).
22
- 2. Click **Install**.
20
+ - This plugin allows you to view and control your [Resideo](https://www.resideo.com) (Honeywell Home) devices within HomeKit. The plugin:
21
+ - requires a (free) Resideo developer account to work - this is separate from the Resideo account you use in the Resideo app
22
+ - connects to the Resideo cloud to discover and control your devices
23
23
 
24
- ## Configuration
24
+ ### Setup
25
25
 
26
- 1. Login / create an account at https://developer.honeywellhome.com/user
27
- - Your Resideo Developer Account, this account is different then your Resideo Account that you log into the Resideo App with
28
- 2. Click **Create New App**
29
- 3. Give your application a name
30
- 4. Copy the hostname found on #3 of the Intro Page into the Callback URL field
26
+ - Installation
27
+ - Search for "Resideo" on the plugin screen of the [Homebridge UI](https://github.com/homebridge/homebridge-config-ui-x) and click **Install**.
28
+ - Configuration
29
+ 1. Login or create an account at the [Resideo developer portal](https://developer.honeywellhome.com/user).
30
+ 2. Click **Create New App**, give your application a name, and copy the hostname shown in the plugin settings intro into the **Callback URL** field.
31
31
 
32
32
  <p align="center">
33
33
 
34
- <img src="https://user-images.githubusercontent.com/9875439/192078620-6998511c-1c11-4e06-b7e1-475b22ef5180.png" width="300px">
34
+ <img alt="Resideo developer portal app setup" src="https://user-images.githubusercontent.com/9875439/192078620-6998511c-1c11-4e06-b7e1-475b22ef5180.png" width="300px">
35
35
 
36
36
  </p>
37
37
 
38
- 5. Enter the generated consumer key and secret into the plugin settings screen of [Homebridge Config UI X](https://github.com/oznu/homebridge-config-ui-x)
39
- 6. Click **Link Account**
38
+ 3. Enter the generated consumer key and secret into the plugin settings and click **Link Account**.
40
39
 
41
40
  <p align="center">
42
41
 
43
- <img src="https://user-images.githubusercontent.com/9875439/192078614-e568d121-e0e4-4123-bdda-4238e8a6e601.png" width="300px">
42
+ <img alt="Resideo account linking" src="https://user-images.githubusercontent.com/9875439/192078614-e568d121-e0e4-4123-bdda-4238e8a6e601.png" width="300px">
44
43
 
45
44
  </p>
46
45
 
47
- 7. Login to your [https://www.resideo.com](https://account.honeywellhome.com).
48
- 8. Click Allow
49
- 9. Select Devices
50
- - I would recommend selecting all devices since you can restrict the devices you don't want in the Home app later, by DeviceID.
51
- 10. Click Connect
52
- 11. Click Save
53
- - If you plan on adding this plugin into a child bridge, I would configure that at this time before restarting Homebridge.
54
- - Reminder that you will have to add this child bridge into the home app to get Resideo accessories to show up.
55
- 12. Restart Homebridge
46
+ 4. Login to your Resideo account, click **Allow**, select your devices, and click **Connect**.
47
+ - Selecting all devices is recommended - you can hide devices you don't want in the Home app later, by device ID.
48
+ 5. Click **Save** and restart Homebridge.
49
+ - If you plan to run this plugin in a child bridge, configure that before restarting, and remember to add the child bridge to the Home app.
56
50
 
57
- ## Supported Resideo Devices
51
+ ### Supported Devices
58
52
 
59
- ### Thermostats
60
-
61
- This plugin supports **any Resideo/Honeywell thermostat** that appears in your Resideo account, including:
62
-
63
- #### WiFi-enabled Thermostats (Already HomeKit Certified)
64
- - [T10 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t10-pro-smart-thermostat-with-redlinkr-room-sensor-thx321wfs2001w-u/)
65
- - [T9 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t9-smart-thermostat-with-sensor-rcht9610wfsw2003-u/)
53
+ - [T10 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t10-pro-smart-thermostat-with-redlinkr-room-sensor-thx321wfs2001w-u/) - already HomeKit certified
54
+ - [T9 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t9-smart-thermostat-with-sensor-rcht9610wfsw2003-u/) - already HomeKit certified
66
55
  - [T9 Smart Roomsensors](https://www.resideo.com/us/en/products/air/thermostat-accessories/t9-smart-sensor-rchtsensor-1pk-u/)
67
- - [T6 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t6-pro-smart-thermostat-multi-stage-3-heat-2-cool-th6320wf2003-u/)
68
- - [T5 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t5-smart-thermostat-with-c-wire-adapter-rcht8612wf2005-u/)
69
- - [Round Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/the-round-smart-thermostat-rch9310wf5003-u/)
56
+ - [T6 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t6-pro-smart-thermostat-multi-stage-3-heat-2-cool-th6320wf2003-u/) - already HomeKit certified
57
+ - [T5 Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/t5-smart-thermostat-with-c-wire-adapter-rcht8612wf2005-u/) - already HomeKit certified
58
+ - [Round Thermostat](https://www.resideo.com/us/en/products/air/thermostats/wifi-thermostats/the-round-smart-thermostat-rch9310wf5003-u/) - already HomeKit certified
59
+ - Some Total Comfort Control thermostats
60
+ - Pushing commands may not be supported on some.
61
+ - [WiFi Water Leak & Freeze Detector](https://www.resideo.com/us/en/products/water/spot-leak-detection/wifi-water-leak-freeze-detector-rchw3610wf1001-u/)
62
+ - Water Shutoff Valves
70
63
 
71
- #### Total Comfort Control (TCC) Thermostats
72
- - Most Total Comfort Control thermostats, including:
73
- - T40 series (e.g., TTHWFP Wireless Programmable Room Thermostat)
74
- - RTH series programmable thermostats
75
- - Other TCC-compatible models
64
+ ### Help/About
76
65
 
77
- **Note:** If your thermostat appears in your Resideo account at [account.honeywellhome.com](https://account.honeywellhome.com), it should work with this plugin. Command pushing (setting temperature, mode changes) may not be supported on some older TCC models.
66
+ - [Support Request](https://github.com/homebridge-plugins/homebridge-resideo/issues/new/choose)
67
+ - [Changelog](https://github.com/homebridge-plugins/homebridge-resideo/blob/latest/CHANGELOG.md)
68
+ - [About Me](https://github.com/sponsors/bwp91)
78
69
 
79
- ### Other Devices
70
+ ### Credits
80
71
 
81
- - [WiFi Water Leak & Freeze Detector](https://www.resideo.com/us/en/products/water/spot-leak-detection/wifi-water-leak-freeze-detector-rchw3610wf1001-u/)
72
+ - To [@donavanbecker](https://github.com/donavanbecker): the original creator and maintainer of this plugin.
73
+ - To the creators/contributors of [Homebridge](https://homebridge.io) who make this plugin possible.
82
74
 
83
- ### Unsupported Devices
75
+ ### Disclaimer
84
76
 
85
- **Smoke/CO2 Detectors**: While Resideo manufactures smart smoke and carbon monoxide detectors (such as the SC5 series), these devices are **not supported** by this plugin because they are not included in the [Resideo Developer API](https://developer.honeywellhome.com/api-methods). Without API endpoints for smoke detectors, the plugin cannot communicate with or control these devices. Support may be added in the future if Resideo expands their API to include smoke detector endpoints.
77
+ - I am in no way affiliated with Resideo or Honeywell and this plugin is a personal project that I maintain in my free time.
78
+ - Use this plugin entirely at your own risk - please see licence for more information.
@@ -4,7 +4,7 @@
4
4
  "singular": true,
5
5
  "customUi": true,
6
6
  "customUiPath": "./dist/homebridge-ui",
7
- "headerDisplay": "<p align='center'><img width='250px' src='https://user-images.githubusercontent.com/3979615/71876008-d99d7400-3179-11ea-909b-9d2a3d1e670f.png'></p>\n\nThe **Homebridge Resideo** plugin allows you to control Resideo thermostats and also view your Leak and Room Sensors from HomeKit. \n\nTo get started link your Resideo account using the button below.",
7
+ "headerDisplay": "<p align='center'><img width='250px' src='https://raw.githubusercontent.com/homebridge-plugins/homebridge-resideo/latest/branding/Homebridge_x_Resideo.png'></p>\n\nThe **Homebridge Resideo** plugin allows you to control Resideo thermostats and also view your Leak and Room Sensors from HomeKit. \n\nTo get started link your Resideo account using the button below.",
8
8
  "footerDisplay": "Your Resideo account has been linked. Please raise any issues on our [project page](https://github.com/homebridge-plugins/homebridge-resideo/issues).\n\nIf you would like to have other Resideo Devices besides Thermostat, Leak Sensors, or Room Sensors added to this plugin fill out [Feature Request Form](https://github.com/homebridge-plugins/homebridge-resideo/issues/new?assignees=&labels=&template=feature_request.md).",
9
9
  "schema": {
10
10
  "type": "object",
@@ -49,6 +49,18 @@
49
49
  "options": {
50
50
  "type": "object",
51
51
  "properties": {
52
+ "preferMatter": {
53
+ "title": "Prefer Matter",
54
+ "type": "boolean",
55
+ "default": true,
56
+ "description": "When Matter is available in Homebridge v2.0+, prefer registering devices as Matter accessories. Requires enableMatter to also be true."
57
+ },
58
+ "enableMatter": {
59
+ "title": "Enable Matter",
60
+ "type": "boolean",
61
+ "default": true,
62
+ "description": "Allow the plugin to use the Homebridge Matter API (Homebridge v2.0+). Set to false to always use the HAP path."
63
+ },
52
64
  "devices": {
53
65
  "type": "array",
54
66
  "items": {
@@ -126,6 +138,72 @@
126
138
  "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID);"
127
139
  }
128
140
  },
141
+ "fan_mode_mapping": {
142
+ "title": "Fan Mode Mapping",
143
+ "type": "object",
144
+ "properties": {
145
+ "auto_mode": {
146
+ "title": "Auto Mode",
147
+ "type": "string",
148
+ "default": "Auto",
149
+ "oneOf": [
150
+ {
151
+ "title": "Auto",
152
+ "enum": ["Auto"]
153
+ },
154
+ {
155
+ "title": "On",
156
+ "enum": ["On"]
157
+ },
158
+ {
159
+ "title": "Circulate",
160
+ "enum": ["Circulate"]
161
+ }
162
+ ]
163
+ },
164
+ "on_mode": {
165
+ "title": "Manual/Active Mode",
166
+ "type": "string",
167
+ "default": "On",
168
+ "oneOf": [
169
+ {
170
+ "title": "Auto",
171
+ "enum": ["Auto"]
172
+ },
173
+ {
174
+ "title": "On",
175
+ "enum": ["On"]
176
+ },
177
+ {
178
+ "title": "Circulate",
179
+ "enum": ["Circulate"]
180
+ }
181
+ ]
182
+ },
183
+ "off_mode": {
184
+ "title": "Manual/Inactive Mode",
185
+ "type": "string",
186
+ "default": "Circulate",
187
+ "oneOf": [
188
+ {
189
+ "title": "Auto",
190
+ "enum": ["Auto"]
191
+ },
192
+ {
193
+ "title": "On",
194
+ "enum": ["On"]
195
+ },
196
+ {
197
+ "title": "Circulate",
198
+ "enum": ["Circulate"]
199
+ }
200
+ ]
201
+ }
202
+ },
203
+ "condition": {
204
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceClass === 'Thermostat' && model.options.devices[arrayIndices].deviceID && !model.options.devices[arrayIndices].thermostat?.hide_fan);"
205
+ }
206
+ },
129
207
  "hide_humidity": {
130
208
  "title": "Hide Thermostat Humidity Service",
131
209
  "type": "boolean",
@@ -483,6 +561,26 @@
483
561
  "title": "Allow Invalid Characters",
484
562
  "type": "boolean",
485
563
  "description": "If true, invalid characters will be allowed in the device name."
564
+ },
565
+ "convertUnits": {
566
+ "title": "Temperature Unit Override",
567
+ "type": "string",
568
+ "default": "",
569
+ "description": "Override automatic API unit handling when temperatures are reported with the wrong unit.",
570
+ "oneOf": [
571
+ {
572
+ "title": "Automatic",
573
+ "enum": [""]
574
+ },
575
+ {
576
+ "title": "Force Fahrenheit Input",
577
+ "enum": ["fahrenheit"]
578
+ },
579
+ {
580
+ "title": "Force Celsius Input",
581
+ "enum": ["celsius"]
582
+ }
583
+ ]
486
584
  }
487
585
  },
488
586
  "required": ["logging"]
@@ -528,8 +626,18 @@
528
626
  "options.devices[].deviceModel",
529
627
  "options.devices[].thermostat.show_auto",
530
628
  "options.devices[].thermostat.hide_fan",
629
+ {
630
+ "key": "options.devices[].thermostat.fan_mode_mapping",
631
+ "type": "fieldset",
632
+ "expandable": true,
633
+ "expanded": false,
634
+ "items": [
635
+ "options.devices[].thermostat.fan_mode_mapping.auto_mode",
636
+ "options.devices[].thermostat.fan_mode_mapping.on_mode",
637
+ "options.devices[].thermostat.fan_mode_mapping.off_mode"
638
+ ]
639
+ },
531
640
  "options.devices[].thermostat.hide_humidity",
532
- "options.devices[].thermostat.statefulStatus",
533
641
  "options.devices[].thermostat.thermostatSetpointStatus",
534
642
  "options.devices[].leaksensor.hide_leak",
535
643
  "options.devices[].leaksensor.hide_temperature",
@@ -605,7 +713,8 @@
605
713
  "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the Resideo API.</em>"
606
714
  },
607
715
  "options.logging",
608
- "options.allowInvalidCharacters"
716
+ "options.allowInvalidCharacters",
717
+ "options.convertUnits"
609
718
  ]
610
719
  }
611
720
  ]
@@ -1,5 +1,5 @@
1
- import type { AxiosInstance } from 'axios';
2
1
  import type { API, DynamicPlatformPlugin, HAP, Logging, PlatformAccessory } from 'homebridge';
2
+ import type { HttpClient } from './http-client.js';
3
3
  import type { accessoryAttribute, devicesConfig, location, locations, options, resideoDevice, ResideoPlatformConfig, sensorAccessory, T9groups } from './settings.js';
4
4
  export declare class ResideoPlatform implements DynamicPlatformPlugin {
5
5
  accessories: PlatformAccessory[];
@@ -22,7 +22,7 @@ export declare class ResideoPlatform implements DynamicPlatformPlugin {
22
22
  debugMode: boolean;
23
23
  version: string;
24
24
  action: string;
25
- axios: AxiosInstance;
25
+ httpClient: HttpClient;
26
26
  constructor(log: Logging, config: ResideoPlatformConfig, api: API);
27
27
  configureAccessory(accessory: PlatformAccessory): void;
28
28
  verifyConfig(): void;
@@ -33,8 +33,10 @@ export declare class ResideoPlatform implements DynamicPlatformPlugin {
33
33
  getCurrentSensorData(location: location, device: resideoDevice & devicesConfig, group: T9groups): Promise<any>;
34
34
  private normalizeSensorDate;
35
35
  getSoftwareRevision(location: location, device: resideoDevice & devicesConfig): Promise<any>;
36
- private discoverDevices;
37
- private mergeByDeviceID;
36
+ protected discoverDevices(): Promise<void>;
37
+ protected mergeByDeviceID(a1: {
38
+ deviceID: string;
39
+ }[], a2: any[]): any[];
38
40
  private deviceClass;
39
41
  private discoverRoomSensors;
40
42
  private roomsensordisplaymethod;
@@ -93,4 +95,4 @@ export declare class ResideoPlatform implements DynamicPlatformPlugin {
93
95
  loggingIsDebug(): Promise<boolean>;
94
96
  enablingPlatformLogging(): Promise<boolean>;
95
97
  }
96
- //# sourceMappingURL=platform.d.ts.map
98
+ //# sourceMappingURL=Platform.HAP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Platform.HAP.d.ts","sourceRoot":"","sources":["../src/Platform.HAP.ts"],"names":[],"mappings":"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"}