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-pax-calima

v2.4.4

Published

Bring your Pax Calima or Vent-Axia Svara bathroom fan into Apple Home via Bluetooth — live temperature and fan speed with Silent Hours scheduling and full automation support.

Readme

homebridge-pax-calima

Bring your bathroom fan into Apple Home — no hub, no cloud, just Bluetooth.

If you have a Pax Calima or Vent-Axia Lo-Carbon Svara extractor fan, this plugin connects it directly to HomeKit via Bluetooth. Once set up, your fan appears in the Home app with live temperature and fan speed — and you can build automations around all of them.

Homebridge 2.0 Ready npm


Is this the right plugin for your fan?

This plugin works with fans that connect via the official Pax or Vent-Axia Bluetooth app. If your fan has a MAC address starting with 58:2b:db, you're in the right place.

Confirmed compatible:

  • Pax Calima — Sweden, Norway, Denmark, Finland, Spain, Portugal
  • Vent-Axia Lo-Carbon Svara White — UK
  • Vent-Axia Lo-Carbon Svara Black — UK

These fans are hardware-identical. The same plugin works for all of them.


What you get in the Home app

Each fan appears as a single accessory with:

  • 💨 Fan speed — shows current RPM as a percentage, live and accurate
  • 🌡️ Temperature — live reading, updates every ~20 seconds
  • Boost — a button that triggers the fan's high-speed boost mode
  • 🌙 Silent Hours — keeps the fan quiet at night; set a schedule, a switch, or both (see below)
  • 💧 Humidity — available but off by default (read below before enabling)
  • 💡 Light level — available but off by default (read below before enabling)

Accessories appear in the Home app on your iPhone, not the Homebridge UI accessories tab — that's normal for child bridge plugins.


Before you start

You'll need:

  • Homebridge ^1.6.0 or ^2.0.0
  • Node.js 18.20.4 or later
  • A Bluetooth adapter on your Homebridge host (the Pi 4's built-in adapter works well)

Running Homebridge OS on a Raspberry Pi? There's one extra step after installation. Run this once in the Homebridge terminal:

sudo setcap cap_net_raw+eip /opt/homebridge/bin/node

If Bluetooth shows as off after that:

sudo rfkill unblock bluetooth

If things still aren't working after both of those — unplug the Pi, wait 10 seconds, plug it back in. A full power cycle rather than a software restart is sometimes needed to reinitialise the Bluetooth stack cleanly.


Installation

Search for Pax Calima or Svara in the Homebridge UI and click Install.

Or via terminal:

npm install -g homebridge-pax-calima

Configuration

You don't need to configure anything to get started. The plugin finds your fan automatically and registers it in HomeKit.

A full config example with all options:

{
  "platform": "PaxCalima",
  "name": "Pax Calima / Vent-Axia Svara",
  "silentHoursStart": "23:00",
  "silentHoursEnd": "07:00",
  "showSilentSwitch": false,
  "showHumidity": false,
  "showLight": false,
  "fans": [
    {
      "name": "Wetroom Fan",
      "mac": "58:2b:db:xx:xx:xx",
      "pin": "012345"
    }
  ]
}

| Setting | Default | What it does | |---|---|---| | silentHoursStart | — | Time the fan stops boosting at night, e.g. "23:00" | | silentHoursEnd | — | Time the fan resumes boosting, e.g. "07:00" | | showSilentSwitch | false | Adds a Silent Hours switch to the Home app — great for Goodnight scenes | | showHumidity | false | Shows humidity tile — read the note below first | | showLight | false | Shows light tile — read the note below first | | fans[].name | Auto | Friendly name for a specific fan | | fans[].mac | — | Only needed to assign a custom name or PIN | | fans[].pin | 012345 | 6-digit PIN — only change if set via the official app |


Silent Hours

Silent Hours tells the fan not to boost during a set period — useful for not being woken by a noisy fan at 3am.

Two ways to use it — pick one or combine both:

Schedule (set and forget): Set silentHoursStart and silentHoursEnd in your config using 24-hour format. The plugin calculates whether you're in the quiet window on every poll and writes the schedule to the fan automatically. Overnight spans work correctly — 23:00 to 07:00 does what you'd expect.

Switch (for scenes and shift workers): Set showSilentSwitch: true to add a Silent Hours on/off switch to your accessory. This is ideal for including in a Goodnight scene alongside lights and heating — one tap and the fan goes quiet with everything else. It's also the right choice if your sleep schedule changes regularly, like shift work, where a fixed time window doesn't suit.

Using both together: If you set a schedule AND enable the switch, the switch takes priority when you toggle it manually. The schedule still runs in the background — useful as a safety net if you forget to turn the switch back on.


A note on humidity and light

Both tiles are off by default, and for good reason.

During testing we confirmed that both sensors — while active on the device — don't expose live readings via Bluetooth. The fan uses them internally to decide when to boost, but the BLE characteristic returns the fan's last internal threshold state rather than a continuous measurement. In practical terms:

  • With all lights off at 21:20, the fan's Bluetooth still reported 52 lux
  • After a shower that raised the room to 89% humidity, the Bluetooth still reported 50%

This isn't a bug in the plugin — it's how the fan's firmware works (confirmed on firmware 02.08, and consistent with observations from the Home Assistant community).

If you turn them on, be aware that:

  • Asking Siri "what's the humidity in the bathroom?" will likely return a stale number
  • Automations based on these values won't fire reliably

What does work well for shower detection: when the fan's internal humidity sensor detects a sharp rise, it boosts to near full speed automatically. A Fan Speed > 75% automation in Apple Home is a reliable, practical trigger for "shower in use."

If you want to enable humidity or light anyway — perhaps for settled ambient readings — set showHumidity: true or showLight: true in your config.


Fan speed control — it depends on how your fan is wired

The fan can be installed in two wiring modes:

Intermittent mode — the fan is off by default and spins up when triggered. In this mode the speed slider in Apple Home works as expected.

Always-on (trickle) mode — the fan runs continuously at a speed managed by its own controller. Speed commands are accepted via Bluetooth but the fan resets to its own setpoint within seconds. The slider shows the current speed accurately but can't override it.

Not sure which mode you have? If your fan is always running — even quietly — you're in always-on mode. In either mode, temperature, fan speed and automations work perfectly.


Something not working?

Fan not showing up in Home Run hciconfig in the Homebridge terminal — you should see UP RUNNING. If it shows RF-KILL, run sudo rfkill unblock bluetooth. If still nothing, unplug the Pi and power cycle it.

setcap not taking effect Make sure you're targeting the right binary — on Homebridge OS it's /opt/homebridge/bin/node, not the system Node.

Wrong PIN Default is 012345. If you changed it in the official app, add the fan to the fans config array with the correct PIN.

Speed slider does nothing Your fan is in always-on mode — see above. Everything else works normally.

Humidity or light reading seems stuck This is expected firmware behaviour — see the sensor note above.

Accessories not appearing in Home Go to Homebridge UI → plugin settings → Remove Accessory Cache, then restart. They'll reappear within a few seconds.


Homebridge 2.0 compliance

This plugin meets all Homebridge 2.0 requirements:

  • Registered as a dynamic platform
  • Waits for didFinishLaunching before any BLE or accessory work
  • All errors caught and logged — no unhandled exceptions
  • No analytics, tracking or post-install scripts
  • Accessories restored from cache cleanly without re-registration
  • Compatible with Node.js 18, 20 and 22

Release notes

2.4.4

  • Fixed: Silent Hours time fields no longer show a raw regex pattern as validation hint in the Homebridge UI — replaced with plain human-readable placeholder text (e.g. 23:00) and a description
  • Improved: Invalid time format now logs a clear warning message rather than silently disabling the schedule

2.4.3

  • Silent Hours reworked — now supports a config schedule (silentHoursStart / silentHoursEnd) that runs automatically, an optional HomeKit switch (showSilentSwitch: true) for Goodnight scenes and irregular schedules, or both together. The switch takes priority when toggled manually; the schedule runs as a background default. Any existing Silent Hours switch from earlier versions is automatically removed unless showSilentSwitch is enabled.
  • Light sensor (showLight) added as opt-in — confirmed via live testing that the characteristic returns a static value regardless of lighting conditions.
  • showSilentSwitch, showHumidity and showLight grouped under "Optional Sensors" in the Homebridge UI config for a cleaner settings experience.
  • displayName added to package.json — shows correctly as "Vent-Axia Svara / Pax Calima" in the Homebridge UI.
  • Sensor characteristic only read when at least one optional sensor is enabled — slightly leaner poll cycle for most users.
  • Silent Hours written to fan on every poll — stays in sync after power cuts.

2.4.2

  • Humidity sensor disabled by default — opt-in via showHumidity: true
  • README rewritten with a more human tone

2.4.1

  • Fixed sensors returning stale values — reverted to connect→read→disconnect per poll

2.4.0

  • Rebuilt with persistent connection architecture

2.3.x / 2.2.1 / 2.1.0

  • Correct sensor UUIDs and byte mappings confirmed via live device testing
  • Homebridge 2.0 initialisation fixes; duplicate accessory registration resolved

1.0.x

  • Initial releases