get readings from ZGm053UKA Mini CO₂ Monitor

Usage no npm install needed!

<script type="module">
  import zgm053uka from 'https://cdn.skypack.dev/zgm053uka';


zgm053uka JavaScript Style Guide

get CO₂ concentration and temperature readings from a ZGm053UKA Mini CO₂ Monitor


To let the program talk to the USB device on Linux create a file in /etc/udev/rules.d/ with a name something like 98-ZGm053UKA.rules with content:

SUBSYSTEM=="usb", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0664"
KERNEL=="hidraw*", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0664"

Be sure that the user the program runs as is part of the plugdev group.

For more help with installation, especially build errors, see the information about the modules this module depends on:


Create a new instance of the device and then listen for events. Invoke the .close() method when done.

import ZGm053UKA from '@robireton/zgm053uka'

const device = new ZGm053UKA()

device.on('co2', data => console.log(`CO₂ ${data}`))
device.on('temp', data => console.log(`Temp ${data}`))
device.on('other', data => console.log(data))
device.on('error', error => console.log('error %O', error))

for (const signal of ['SIGUSR2', 'SIGINT', 'SIGTERM']) {
  process.on(signal, s => {
    console.log(`signal: ${s}`)



emits the concentration of CO₂ in parts per million as an integer


emits the temperature in sixteenths of a Kelvin as an integer. To convert to degrees Celsius, divide by 16 and subtract 273.15. To convert to degrees Fahrenheit, divide by 16, multiply by 9∕5, then subtract 459.67.


The device emits other data points that I haven't deciphered yet. This event emits the code, value, ‘decrypted’ message, and raw message from the device.



Tell this module to stop listening to the underlying USB device.


I learned how to decrypt the messages from reading the code for vfilimonov/co2meter.

Henryk Plötz seems to have paved the way.

JavaScript Style Guide