@meterbus/wired-datalink-wasm
v0.0.1
Published
WebAssembly wired M-Bus data-link frame codecs
Downloads
77
Maintainers
Readme
Meterbus Wired Data-Link for WebAssembly
Wired M-Bus data-link frames and codecs for WebAssembly.
This package provides typed, validated frame construction plus exact and
streaming decoders for the wired M-Bus link layer defined by
EN 13757-2:2018+A1:2023. It uses
browser-native WebAssembly generated from the
meterbus-wired-datalink
Rust crate with wasm-bindgen.
Highlights
- ACK, NACK, short, control, and long frame formats
- Exact decoding for complete frames
- Incremental decoding across arbitrary byte chunks
- Strict and noise-resynchronizing stream recovery
- Typed
Frame,StreamDecoder, and recovery results Uint8Arrayinput and output- Browser-native WebAssembly without Node-API emulation
- ESM-only package with generated TypeScript declarations
- Browser ESM TypeScript
examples
Installation
Add the package with pnpm:
pnpm add @meterbus/wired-datalink-wasmInitialize the WebAssembly module before using its exports.
Usage
Construct, encode, and decode a REQ-UD2 short frame:
import init, { Frame } from "@meterbus/wired-datalink-wasm";
await init();
const request = Frame.short(0x5b, 1);
const encoded = request.encode();
const decoded = Frame.decode(encoded);
console.log(decoded.kind); // "short"Decode frames incrementally:
import init, {
StreamDecoder,
} from "@meterbus/wired-datalink-wasm";
await init();
const decoder = new StreamDecoder();
decoder.push(Uint8Array.of(0x10, 0x5b));
const result = decoder.push(Uint8Array.of(0x01, 0x5c, 0x16));
console.log(result.frames[0].kind); // "short"Errors
Every data-link failure has a concrete error type with fields describing the
invalid input. All concrete errors extend DatalinkError.
import { Frame, UnknownStartByteError } from "@meterbus/wired-datalink-wasm";
try {
Frame.decode(Uint8Array.of(0xff));
} catch (error) {
if (error instanceof UnknownStartByteError) {
console.log(error.actual); // 255
}
}License
Copyright © 2026 Nicolas HEDGER.
Licensed under either of:
at your option.
