-
NUT Command Support : Most NUT commands are supported, with automatic parsing of responses to simplify integration. Additionally, a manual mode is available for full control.
import { NUTClient } from 'nut-client'
const client = new NUTClient('127.0.0.1', 3493);
console.log(client.listUps());
console.log(client.listVariables('ups'));
console.log(client.send(['LOGIN', "myups"]))
-
Parallel Request Handling : Unlike other NUT libraries, nut-client
manages an internal queue to handle parallel requests without conflicts, using Promises for efficient request handling.
import { NUTClient } from 'nut-client'
const client = new NUTClient('127.0.0.1', 3493);
const [ups1, ups2, ups3] = await Promise.all([
client.getUPS('ups1'),
client.getUPS('ups2'),
client.getUPS('ups3'),
])
-
StartTLS Support : Communicate securely with the NUT server using StartTLS for encryption.
import { NUTClient } from 'nut-client'
const client = new NUTClient('127.0.0.1', 3493);
console.log(await client.version());
await client.startTLS({
rejectUnauthorized: false
});
console.log(await client.version());
-
Built-in Monitor : A Monitor
module reads variables at regular intervals, emitting UPS events similar to upsmon
(plus some additional ones).
const client = new NUTClient('127.0.0.1', 3493);
const monitor = new Monitor(client, 'myUps');
monitor.on('ONBATT', () => {
console.log('UPS "myUps" lost power and is now on battery');
});
monitor.on('VARIABLE_CHANGED', (key: string, oldValue: number, newValue: number) => {
if(key !== "battery.charge" || isNaN(oldValue) || isNaN(newValue)) {
return;
}
console.log(`battery is ${oldValue > newValue ? 'dis':''}charging`)
})
monitor.on('*', (event: string, ...args) => {
console.log(`receive event ${event} with args`, args);
})
await monitor.start();
-
Fully Typed with TypeScript (ESM + CJS) : Built with TypeScript, nut-client
is distributed in both ESM and CommonJS modules for maximum compatibility.
Contributions are welcome! If you have suggestions, feel free to open an issue or a pull request.