Streaming Cyrustek ES51922 DMM data protocol implementation over serial
The Cyrustek ES51922 is an IC found in several multimeters with "data-out" capability, including the UNI-T UT61E and Wintex TD2200 (source: sigrok.org).
The es51922
module provides both Observable (RxJS) and object-mode Readable Stream APIs.
$ npm install es51922
import {fromES51922} from 'es51922';
fromES51922('/dev/ttyUSB0').subscribe(data => {
console.log(`${data.value} ${data.range.unit}`);
});
Example output:
3.269 V
3.209 V
3.268 V
3.268 V
3.267 V
This is equivalent to the above:
import {readES51922Stream} from 'es51922';
readES51922Stream('/dev/ttyUSB0').on('data', data => {
console.log(`${data.value} ${data.range.unit}`);
});
TODO (describe shape of object)
Define the ES51922_PORT
environment variable to avoid needing to pass it directly to the API. This module also accepts an .env
file (for dotenv).
src/es51922.ksy.yml
contains a Kaitai Struct format description of the data protocol. The Kaitai Struct compiler generates the parser, which lives in vendor/es51922.js
.
The reference Kaitai Struct compiler is implemented in Scala, so it would be a hassle to compile as part of a build step. The Kaitai Struct team publishes a pure-JS implementation to npm, but it has not kept pace with the Scala implementation; it fails to parse our format description file.
Until the JS implementation ready for use, you can install the Kaitai Struct compiler from kaitai.io, and execute npm run compile-posix
(Windows users may need to tweak the run script). This (should) update vendor/es51922.js
.
- Temperature and ADP modes are unimplemented (and will likely remain so).
- The Python ut61e package helped immensely w/ understanding the protocol.
- This module won't work with Hoitek HE2325U or WCH CH9325 USB/HID adapter cables.
- I'm using a FTDI FT232R-based RS232-to-USB converter. YMMV.
- AFAIK there's no graphical viewer which supports this format available on macOS.
- My ultimate goal is to use this module in a nice graphical interface with real-time interactive charts and shit.
- ES51922 Datasheet
- ut61e - A Node.js package which wraps the ut61e Python package
PR's welcome! Please use the Conventional Commits specification.
Copyright © 2019 Christopher Hiller. Licensed Apache-2.0