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

v0.1.4

Published

Homebridge plugin to control a Zehnder ComfoAir ventilation unit via the zcangate HTTP API

Readme

homebridge-zcangate

Homebridge accessory plugin that exposes a Zehnder ComfoAir ventilation unit (via zcangate) as a HomeKit fan, so it can be controlled from the Home app and Siri.

Installation

Once published to npm (see Publishing below), install it like any other Homebridge plugin — either via Homebridge UI X's plugin search, or:

npm install -g homebridge-zcangate

Installing from source (unpublished changes)

This plugin lives in a subdirectory of the zcangate repo, so a plain npm install github:marco-hoyer/zcangate won't find its package.json. To run it from a local checkout instead:

cd homebridge-zcangate
npm install
npm run build
npm link

Then in your Homebridge installation's directory: npm link homebridge-zcangate.

Publishing

For maintainers cutting a new release:

cd homebridge-zcangate
npm version patch   # or minor / major — also runs `npm run build` via prepublishOnly
npm publish
git push --follow-tags

npm version bumps the version in package.json, and prepublishOnly ensures dist/ is rebuilt from the latest source before npm publish packs the tarball. The files field in package.json keeps the published package limited to dist/, config.schema.json, README.md, and LICENSE — no source, tests, or dev config ship to consumers.

Configuration

Add an entry to Homebridge's config.json accessories array (or use Homebridge UI X, which reads config.schema.json to render a form):

{
  "accessory": "ZcangateVentilation",
  "name": "Ventilation",
  "apiBaseUrl": "http://raspberrypi:8080",
  "authToken": "",
  "pollInterval": 30
}

| Key | Type | Required | Default | Description | |---|---|---|---|---| | name | string | no | Ventilation | Accessory display name in the Home app. | | apiBaseUrl | string | yes | — | Base URL of the zcangate HTTP server, e.g. http://raspberrypi:8080. | | authToken | string | no | (unset) | Sent as Authorization: Bearer <token> on command requests only. Matches zcangate's COMMAND_AUTH_TOKEN. Leave unset if that's not configured on the server. | | pollInterval | number (seconds) | no | 30 | How often to poll /measurements to refresh HomeKit state. Minimum 5. |

HomeKit mapping

| HomeKit characteristic | Behavior | |---|---| | Active (on/off) | Off sends ventilation_level_0. On sends ventilation_level_N for the last remembered non-zero speed (default level 1). | | RotationSpeed (0–100%) | Quantized to the nearest of 4 buckets — 0/33/66/100 — mapped to ventilation_level_0.._3. Changing speed while in Auto mode first switches to Manual. The slider drags smoothly (no native HomeKit snap points — see the design spec's addenda for why) but settles on the nearest valid percentage immediately after release. | | TargetFanState(Auto/Manual) | Sends theauto_mode/manual_modecommands. Reconciled from the polledventilation_control_mode measurement (0=auto, 1=manual — the inverse of HAP's TargetFanState). | | CurrentFanState` (read-only) | Derived from the polled fan speed. |

Because zcangate passively listens to the whole CAN bus, ventilation_control_mode also reflects mode changes made from the physical remote or the official app, not just changes made through this plugin.