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

lib-comfoair

v0.8.2

Published

Library to communicate with Zehnder ComfoAirQ ventilation unit through the ComfoControl gateway

Downloads

11

Readme

lib-comfoair 🌬️

lib-comfoair is a TypeScript library for interacting with Zehnder ComfoAirQ ventilation units through the ComfoConnect LAN C gateway. It enables you to discover these gateways on your local network, read and write device properties, and subscribe to property change notifications.

This library is completely written in TypeScript and strongly typed, making development more reliable and maintainable.

Features ✨

  • 🔍 Discover Zehnder ComfoConnect LAN C gateways on your network.
  • 📖 Read and write properties of Zehnder ComfoAirQ ventilation units.
  • 🔄 Listen for real-time updates of changing properties.
  • ⚙️ Strong typing ensures reliable code and easy maintainability.

Installation 📦

NPM

npm i lib-comfoair

PNPM

pnpm add lib-comfoair

Usage 🚀

Below are basic usage examples. The library can discover devices, start sessions to communicate with ventilation units, and request property updates.

Discovering Devices

Use the discovery feature to find Zehnder ComfoConnect LAN C gateways on the same network. You can await the discovery process or attach event listeners.

import { ComfoControlClient } from 'lib-comfoair';

// Discover a gateway with an optional limit:
ComfoControlClient.discover({ limit: 1 })
  .then(devices => {
    console.log('Discovered devices:', devices);
    // If desired, create a client and make requests:
    // const client = new ComfoControlClient(devices[0]);
    // await client.getServerTime();
  });

// Or listen for discovery events:
const discovery = ComfoControlClient.discover({ limit: 10 });
discovery.on('discover', device => {
  console.log('Discovered device:', device);
});
discovery.on('completed', () => {
  console.log('Discovery finished');
});

How Device Discovery Works 🕵️‍♂️

Discovery sends a broadcast message and waits for devices to respond. This works only if the gateway is on the same subnet as the host running the discovery. Most routers do not forward broadcast messages to other subnets by default.

Listening for Property Changes

After obtaining the device’s info, you can register property listeners that trigger when values change:

import { ComfoControlClient, ComfoAirProperties } from 'lib-comfoair';

// Example usage (simplified):
const client = new ComfoControlClient({
  address: '192.168.1.10',
  uuid: 'your-device-uuid-here',
});

// Register a listener for OUTDOOR_AIR_TEMPERATURE:
await client.registerPropertyListener(ComfoAirProperties.OUTDOOR_AIR_TEMPERATURE, ({ value }) => {
  console.log(`Outdoor air temperature: ${value / 10} °C`);
});

// You may then connect or make a request:
console.log(await client.getServerTime());

Available Opcodes

| Opcode | Description | |-------------------------------|--------------------------------------------------------| | NO_OPERATION | No operation (placeholder). | | SET_ADDRESS_REQUEST | Sets the device address. | | REGISTER_DEVICE_REQUEST | Registers a device/client. | | START_SESSION_REQUEST | Initiates a session. | | CLOSE_SESSION_REQUEST | Ends an existing session. | | LIST_REGISTERED_APPS_REQUEST | Lists registered apps/clients. | | UNREGISTER_DEVICE_REQUEST | Unregisters a device/client. | | CHANGE_PIN_REQUEST | Changes the device PIN code. | | GET_REMOTE_ACCESS_ID_REQUEST | Retrieves the remote access ID. | | SET_REMOTE_ACCESS_ID_REQUEST | Sets the remote access ID. | | GET_SUPPORT_ID_REQUEST | Retrieves the support ID. | | SET_SUPPORT_ID_REQUEST | Sets the support ID. | | GET_WEB_ID_REQUEST | Retrieves the web ID. | | SET_WEB_ID_REQUEST | Sets the web ID. | | SET_PUSH_ID_REQUEST | Sets the push message ID. | | DEBUG_REQUEST | Debug request. | | UPGRADE_REQUEST | Initiates firmware upgrade. | | SET_DEVICE_SETTINGS_REQUEST | Adjusts device settings. | | VERSION_REQUEST | Queries version information. | | SET_ADDRESS_CONFIRM | Confirms address setup. | | REGISTER_DEVICE_CONFIRM | Acknowledges registration. | | START_SESSION_CONFIRM | Confirms session initiation. | | CLOSE_SESSION_CONFIRM | Confirms session closure. | | LIST_REGISTERED_APPS_CONFIRM | Confirms list of registered apps. | | UNREGISTER_DEVICE_CONFIRM | Confirms device unregistration. | | CHANGE_PIN_CONFIRM | Confirms PIN change. | | GET_REMOTE_ACCESS_ID_CONFIRM | Remote access ID confirmation. | | SET_REMOTE_ACCESS_ID_CONFIRM | Remote access ID setup confirmed. | | GET_SUPPORT_ID_CONFIRM | Support ID confirmation. | | SET_SUPPORT_ID_CONFIRM | Support ID setup confirmed. | | GET_WEB_ID_CONFIRM | Web ID confirmation. | | SET_WEB_ID_CONFIRM | Web ID setup confirmed. | | SET_PUSH_ID_CONFIRM | Push ID setup confirmed. | | DEBUG_CONFIRM | Debug request confirmation. | | UPGRADE_CONFIRM | Confirms firmware upgrade. | | SET_DEVICE_SETTINGS_CONFIRM | Confirms device settings update. | | VERSION_CONFIRM | Confirms version request. | | GATEWAY_NOTIFICATION | Notification from the gateway. | | KEEP_ALIVE | Keeps the session alive. | | FACTORY_RESET | Resets the device to factory defaults. | | CN_TIME_REQUEST | Requests current time. | | CN_TIME_CONFIRM | Confirms time update. | | CN_NODE_REQUEST | Node-related request (internal). | | CN_NODE_NOTIFICATION | Node status/update notification. | | CN_RMI_REQUEST | Remote method invocation request. | | CN_RMI_RESPONSE | Response to RMI request. | | CN_RMI_ASYNC_REQUEST | Asynchronous RMI request. | | CN_RMI_ASYNC_CONFIRM | Acknowledges async RMI. | | CN_RMI_ASYNC_RESPONSE | Response to async RMI. | | CN_RPDO_REQUEST | Requests updates for a property. | | CN_RPDO_CONFIRM | Confirms property update subscription. | | CN_RPDO_NOTIFICATION | Notifies of a property update. | | CN_ALARM_NOTIFICATION | Notifies of alarms from the device. | | CN_FUP_READ_REGISTER_REQUEST | Firmware update read register request. | | CN_FUP_READ_REGISTER_CONFIRM | Confirms read register request. | | CN_FUP_PROGRAM_BEGIN_REQUEST | Begins firmware update programming. | | CN_FUP_PROGRAM_BEGIN_CONFIRM | Confirms program begin. | | CN_FUP_PROGRAM_REQUEST | Firmware update programming data request. | | CN_FUP_PROGRAM_CONFIRM | Confirms firmware programming data request. | | CN_FUP_PROGRAM_END_REQUEST | Ends firmware update programming. | | CN_FUP_PROGRAM_END_CONFIRM | Confirms end of firmware programming. | | CN_FUP_READ_REQUEST | Requests firmware read. | | CN_FUP_READ_CONFIRM | Confirms firmware read request. | | CN_FUP_RESET_REQUEST | Requests firmware reset. | | CN_FUP_RESET_CONFIRM | Confirms firmware reset. |

Strongly Typed Library

This library is strongly typed, ensuring that you benefit from autocompletion and reduced runtime errors. It adds clarity when dealing with ComfoAirQ properties and messages by leveraging TypeScript’s type system.

Credits 🙏

This project is based on the protocol specifications documented by Michaël Arnauts. Thank you to Michaël for making this information available.