npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

homebridge-evohome

v1.0.2

Published

Honeywell Evohome support for Homebridge 2

Readme

Honeywell Evohome Controller   Honeywell Evohome Controller   Honeywell Evohome Controller

Honeywell Evohome support for Homebridge

npm npm npm verified-by-homebridge

Brings Honeywell Evohome heating zones, system modes and domestic hot water into Apple HomeKit.

Version 1.0 is a rewrite for Homebridge 2. Please read Upgrading from 0.11.x before you install it.

📖 Contents

📋 Requirements

| | | | :--------- | :-------------------------------------------------------------------------- | | Homebridge | 2.0.0 or newer | | Node.js | 22, 24 or 26 | | Account | Honeywell/Resideo credentials from https://getconnected.honeywellhome.com |

Homebridge 1.x is no longer supported. If you are still on 1.x, stay on [email protected] until you upgrade.

🚀 Getting started

Homebridge UI: search for homebridge-evohome under Plugins, install it and fill in the form.

Terminal:

npm install -g homebridge-evohome@latest

Then add a platform block to your config.json — see below.

🔧 Configuration

Minimal configuration:

"platforms": [
  {
    "platform": "Evohome",
    "name": "Evohome",
    "username": "[email protected]",
    "password": "your-password"
  }
]

| Option | Default | Description | | :---------------------- | :------------------ | :-------------------------------------------------------------------------------------------------------------------------------- | | platform | — | Must be Evohome | | name | Evohome | Shown in the log, used as the prefix for switch names | | username | — | Your Honeywell email address | | password | — | Your Honeywell password | | locationId | — | Only for accounts with several homes. Every location is printed in the log at startup, and the ID is stable, unlike the index | | locationIndex | 0 | Fallback when no locationId is set | | pollIntervalSeconds | 300 | How often the status is fetched. Values below 60 are raised to 60 | | setpointMode | keepExistingUntil | How long a temperature change applies — see below | | temperatureAboveAsOff | false | Show a zone as off when the room is warmer than the target. Display only | | logTemperatureChanges | false | Log every change of a room temperature | | history | true | Record history for the Elgato Eve app | | switchAway | true | Show an "Away" switch | | switchDayOff | true | Show a "Day Off" switch | | switchEco | true | Show an "Eco" switch | | switchHeatingOff | true | Show a "Heating Off" switch | | switchCustom | true | Show a "Custom" switch |

Several homes on one account

One platform block covers one location — locationIndex names a single position, and "locationIndex": 0,1 is not valid JSON. A second home needs a second block, and each block needs its own child bridge: Homebridge hands the cached accessories to only one platform of a given name, so two Evohome blocks on the same bridge would recreate each other's accessories on every start. In the Homebridge UI: the plugin's menu → Bridge Settings, once per block. The plugin says so in the log if you forget.

Every location is listed at startup with its ID, which is what belongs in locationId:

[Evohome] The account has 2 locations: Home (locationId 1234567), Cottage (locationId 7654321). Using "Home" …
{
  "platform": "Evohome",
  "name": "Evohome Home",
  "username": "[email protected]",
  "password": "your-password",
  "locationId": "1234567",
  "_bridge": { "username": "0E:11:22:33:44:55", "port": 51820 }
},
{
  "platform": "Evohome",
  "name": "Evohome Cottage",
  "username": "[email protected]",
  "password": "your-password",
  "locationId": "7654321",
  "_bridge": { "username": "0E:11:22:33:44:66", "port": 51821 }
}

How long a temperature change applies (setpointMode)

HomeKit has no concept of "until", so the rule is set once in the configuration.

| Value | Behaviour | | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | | keepExistingUntil (default) | If a temporary override is already running, its end time is preserved and only the temperature changes. Otherwise the change applies until the next switchpoint. | | untilNextSwitchpoint | Always until the next switchpoint. This is what 0.11.2 and earlier did. | | permanent | Applies until you pick Auto in HomeKit. |

Turning a thermostat off always writes a permanent override — a zone you switched off should not come back on at the next switchpoint.

What HomeKit shows

| HomeKit state | Meaning | | :------------ | :------------------------------------ | | Auto | The zone follows the Evohome schedule | | Heat | An override is active | | Off | The target is at the zone's minimum |

Faults and batteries

Evohome reports an activeFaults list per zone and for the hot water. Those faults now reach HomeKit instead of only the log:

| Fault reported by Evohome | In HomeKit | | :------------------------------------------------------ | :----------------------------------------------------------- | | Low battery, e.g. TempZoneActuatorLowBattery | Low battery on that accessory — the Home app shows a warning | | Anything else, e.g. TempZoneActuatorCommunicationLost | A fault on the accessory (StatusFault) |

A low battery deliberately does not count as a fault: an HR92 with a weak battery still measures and still heats. Only a real failure — radio link lost, sensor defective — makes the values untrustworthy.

The battery level knows only two values. The API reports whether a battery is low, never how full it is, so a zone shows 100 % while nothing is reported and 10 % once Evohome says the battery is low — below the threshold at which clients warn. Publishing no level at all was worse: apps render the missing value as 0 %, which looks like a dead battery on hardware that is fine. The charging state is "not chargeable", which is what an HR92 on AA cells is.

Every zone gets a battery status, including mains-powered ones such as a zone valve; those simply never report a battery fault.

Faults are logged as well, both when they appear and when they clear.

🔄 Upgrading from 0.11.x

Your accessories are recreated once. They appear in the default room and need to be moved back; scenes and automations must be recreated.

This is deliberate. Until now the accessory identity was derived from the position of a zone in Honeywell's response, so adding or reordering a zone silently renamed every following device — the cause of accessories vanishing for no obvious reason. Identity is now derived from the zone ID and stays stable.

Two options were removed and are ignored with a note in the log:

  • childBridge — it only suppressed an error path. A dynamic platform keeps its accessories on failure anyway, so a child bridge is no longer needed for this.
  • temperatureUnit — HomeKit takes the display unit from the iOS device.

🚧 Known limitations

  • Thermostats appear under "Humidity" in the Home app. The HomeKit thermostat service declares humidity as an optional characteristic, and the Home app groups by service, not by what the device actually reports. Nothing in the plugin can change this (#130).
  • Domestic hot water has no history graph. The API exposes no target temperature for hot water, and inventing one produces a misleading curve.
  • Schedules use the location's UTC offset as reported by the API, re-read once a day. The API only provides Windows time zone identifiers, which cannot be resolved properly, so the offset cannot be computed locally — between a daylight-saving change and the next refresh, a switchpoint may be off by an hour.
  • The Evohome security system (Total Connect 2.0E) is a different product and is not supported (#83).

🩺 Troubleshooting

Unexpected API response at "…" — Honeywell returned something the plugin did not expect. The path in the message says which field was missing. Please open an issue with that line.

Plugin fails to start with an error from googleapis — that package is pulled in by fakegato-history, which powers the Eve graphs. Set "history": false and it is never loaded (#166).

Login fails repeatedly — the plugin retries with a growing delay and re-authenticates when the session expires. It gives up only on rejected credentials, to avoid running into Honeywell's rate limit.

🧪 Testing a pre-release

npm install -g homebridge-evohome@beta

Pre-releases are published under the beta tag, so a plain npm install homebridge-evohome keeps giving you the stable version. Reports are very welcome.

🤝 Contributing

Development notes live in docs/: ARCHITECTURE.md describes version 0.11.2, MIGRATION-HB2.md the rewrite, TESTING.md how to run it locally.

npm install
npm run check     # lint, typecheck, tests
npm run dev       # build and start Homebridge against this repo

Credits for version 1.0: @MGMsystems for #207, which showed how to build the custom characteristics for HAP 2.x, and @PuzzledUser for #204 and the analysis in #149. Earlier contributions by @zizzex, @fredericvl, @rooi, @ebarnard and @sOckhamSter are what made this plugin work in the first place.