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-myresideo

v1.3.0

Published

A Homebridge plugin for Resideo (Honeywell Home) WiFi Water Leak & Freeze Detectors

Downloads

3,475

Readme

homebridge-myresideo

Tests npm version npm downloads Node.js Homebridge License

Monitor your Resideo / Honeywell Home WiFi Water Leak & Freeze Detectors in Apple HomeKit through Homebridge.

Features

Device Support

  • Automatic Discovery — At startup, finds every water leak detector across all locations on your account, and removes detectors that disappear from your account (restart Homebridge to pick up newly-added detectors)
  • Leak Detection — HomeKit Leak Sensor that reflects the water-present state on each polling cycle (default every 120s; see polling)
  • Temperature & Humidity — Exposed as standard HomeKit sensors (each can be hidden); a missing reading is flagged as a fault rather than shown as a stale value
  • Battery — Battery level plus low-battery status
  • Connectivity & Alarms — An offline detector or any active device alarm (e.g. high humidity) is surfaced as a HomeKit fault on the Leak Sensor, and the alarm type is logged when it changes
  • Freeze Sensor (optional) — A HomeKit contact sensor that trips when the temperature drops to or below a configurable threshold

Reliability

  • Resilient OAuth2 — Access tokens are refreshed proactively, before they expire, so polling never stalls on an expired token
  • Refresh-Token Rotation — Rotated refresh tokens are persisted automatically and survive restarts
  • Single-Flight Refresh — Concurrent calls share one token refresh instead of stampeding the auth endpoint
  • Automatic Retry — Transient network, timeout, and 5xx errors are retried with exponential backoff (for both API calls and token refresh)
  • Self-Healing Discovery — A transient outage at startup is retried with capped backoff instead of leaving the plugin inert until a restart
  • Clear Re-Link Signaling — An expired/invalid refresh token, or rejected API credentials, produce a clear, actionable log message instead of a silent failure loop
  • Readable Logs — Each poll logs only what changed (leak, online/offline, low battery, freeze, alarms) once per transition, so the log reflects events without per-cycle noise; a full snapshot is available at debug level
  • Per-Check-In Reports — Each detector reports to the cloud on its configured schedule (the Resideo app's 1–3×/day update frequency); when fresh data arrives, the plugin logs a one-line summary — prefixed with that detector's name — of its current readings and poll latency
  • Health Diagnostics (opt-in) — Set diagnosticsInterval to log a periodic health report: API latency (p50/p95), poll success/failure, token expiry, device online/leak/low-battery counts, and a healthy/degraded rollup with reasons. Healthy↔degraded transitions are logged as they happen, and structuredLogs adds a machine-readable JSON line alongside the human summary
  • Secret Hygiene — Credentials are never logged; the apikey is redacted from any logged URLs

Quality

  • Strict TypeScriptstrict mode (noImplicitAny, strictNullChecks, no unused locals/params, no implicit returns, and more)
  • Tested Core — Jest suite with a ≥80% coverage gate across statements, branches, functions, and lines
  • CI on Every PR — Build, lint, and test across Node 20/22/24, plus a dependency audit
  • No Analytics — Zero tracking or data collection

Quick Start

1. Install

Homebridge UI (recommended): Plugins → Search homebridge-myresideo → Install

Command line:

npm install -g homebridge-myresideo

2. Get API credentials

Create a developer application at developer.honeywellhome.com to obtain a Consumer Key (API Key) and Consumer Secret (API Secret).

Link your account in the plugin settings. After installing, open this plugin's settings in the Homebridge UI and use the Link your Resideo account panel: enter your Consumer Key and Secret, click Open Resideo sign-in, approve access, then paste the redirected URL (or just the code it contains) back to finish — the access/refresh tokens are exchanged and saved for you. The code travels in the redirect URL itself, so this works the same whether Homebridge runs locally or on a remote host. Prefer the command line? The included get-tokens helper runs the same flow from a clone of this repo (npm install && npm run get-tokens). The full walkthrough — registering the redirect URL, the paste step, and the script fallback — is in docs/AUTH.md; the underlying API is documented in docs/API.md.

3. Configure

Use the Homebridge UI (recommended) or add the platform to your config:

{
  "platforms": [
    {
      "platform": "MyResideo",
      "name": "MyResideo",
      "credentials": {
        "consumerKey": "your-api-key",
        "consumerSecret": "your-api-secret",
        "accessToken": "obtained-when-linking",
        "refreshToken": "obtained-when-linking"
      },
      "options": {
        "refreshRate": 120
      }
    }
  ]
}

4. Restart Homebridge

Your detectors are discovered at startup and appear in the Home app automatically. If you add a new detector to your Honeywell Home account later, restart Homebridge to pick it up.

Supported Devices

| Type | Description | |------|-------------| | WiFi Water Leak & Freeze Detector | Resideo / Honeywell Home water leak detectors (deviceClass: LeakDetector), including temperature, humidity, and battery reporting |

Configuration Options

| Option | Required | Description | |--------|:--------:|-------------| | name | ✓ | Plugin instance name shown in the Homebridge log (required by the schema; pre-filled with MyResideo) | | credentials.consumerKey | ✓ | Resideo developer application API Key | | credentials.consumerSecret | ✓ | Resideo developer application API Secret | | credentials.refreshToken | ✓ | OAuth2 refresh token (set when linking your account) | | credentials.accessToken | | OAuth2 access token (set when linking your account) | | options.refreshRate | | Seconds between status polls (default: 120, minimum: 30) | | options.freezeThresholdCelsius | | Default freeze threshold in °C. Leave unset to use each device's own configured low-temperature limit (falling back to 4 °C if the device reports none). A per-device override takes precedence. | | options.diagnosticsInterval | | Seconds between opt-in health-report log lines; 0 (default) disables it. A non-zero value below 30 is clamped up to 30. | | options.structuredLogs | | When diagnostics are enabled, also emit a machine-readable JSON line alongside the human-readable summary (default: false) | | options.devices[] | | Per-device overrides (see below) |

Per-device overrides (options.devices[]), keyed by deviceID:

| Option | Required | Description | |--------|:--------:|-------------| | deviceID | ✓ | Honeywell device ID the override applies to (entries without it are ignored) | | name | | Display-name override for the accessory | | hideTemperatureSensor | | Hide the temperature sensor service | | hideHumiditySensor | | Hide the humidity sensor service | | enableFreezeSensor | | Expose a freeze contact sensor for this device | | freezeThresholdCelsius | | Freeze threshold override in °C for this device |

Not Working?

  1. Check credentials — Consumer Key/Secret must match your Resideo developer app, and the account must be linked
  2. Re-link if prompted — A "refresh token invalid" log message means you need to re-link your account
  3. Check device status — Detectors must be online in the Honeywell Home app
  4. Restart Homebridge — Required after any config change

Security

This plugin uses Resideo's OAuth2 flow, so it stores OAuth tokens (not your account password) in Homebridge's config.json. Because Homebridge keeps plugin config in plain text, those tokens live unencrypted on the Homebridge host.

  • Secure the Homebridge host. Anyone who can read files on it can read your tokens.
  • Scrub before sharing. Redact credentials from config.json before posting logs or backups.

The plugin talks to Resideo over TLS only, redacts tokens and the apikey from its logs, and never collects analytics. See SECURITY.md.

Requirements

  • Homebridge 1.6.0+ or 2.0+
  • Node.js 20+
  • A Resideo developer application and at least one registered water leak detector

More Info

License

Copyright 2026 tbaur

Licensed under the Apache License, Version 2.0. See LICENSE for details and NOTICE for third-party attribution.