rups: A Network UPS Tools (NUT) implementation in Rust https://crates.io/crates/rups
Find a file
2021-07-31 10:01:33 -04:00
.cargo Implement rupsc, clone of upsc (#5) 2021-07-31 04:18:39 -04:00
.github/workflows Add SSL support (#7) 2021-07-31 08:43:26 -04:00
nut-client Improve SSL upgrade 2021-07-31 10:01:33 -04:00
rupsc Release 0.2.0 2021-07-31 08:51:49 -04:00
.gitignore Un-ignore Cargo.lock 2021-07-31 04:41:17 -04:00
Cargo.lock Release 0.2.0 2021-07-31 08:51:49 -04:00
Cargo.toml Implement rupsc, clone of upsc (#5) 2021-07-31 04:18:39 -04:00
LICENSE Implement rupsc, clone of upsc (#5) 2021-07-31 04:18:39 -04:00
README.md Release 0.2.0 2021-07-31 08:51:49 -04:00

nut-client

crates.io Documentation MIT licensed CI

A Network UPS Tools (NUT) client library for Rust.

  • Connect to upsd/nut-server using TCP
  • Login with username and password
  • List UPS devices
  • List variables for a UPS device
  • Connect securely with SSL (optional feature)

Getting Started

You'll need a running instance of the NUT daemon (upsd) and a compatible UPS device to use this library:

  1. Install NUT
  2. Configure and launch upsd

Verify that your UPS is connected using the built-in upsc tool:

upsc myupsname@localhost ups.status

Example

The rupsc CLI is written using this library, and is a clone of NUT's built-in upsc tool.

Below is a sample program using this library (cargo run --example blocking).

use std::env;
use std::net::ToSocketAddrs;

use nut_client::blocking::Connection;
use nut_client::{Auth, ConfigBuilder, Host};

fn main() -> nut_client::Result<()> {
    let addr = env::var("NUT_ADDR")
        .unwrap_or_else(|_| "localhost:3493".into())
        .to_socket_addrs()
        .unwrap()
        .next()
        .unwrap();

    let username = env::var("NUT_USER").ok();
    let password = env::var("NUT_PASSWORD").ok();
    let auth = username.map(|username| Auth::new(username, password));

    let config = ConfigBuilder::new()
        .with_host(Host::Tcp(addr))
        .with_auth(auth)
        .with_debug(false) // Turn this on for debugging network chatter
        .build();

    let mut conn = Connection::new(&config)?;

    // Print a list of all UPS devices
    println!("Connected UPS devices:");
    for (name, description) in conn.list_ups()? {
        println!("\t- Name: {}", name);
        println!("\t  Description: {}", description);

        // List UPS variables (key = val)
        println!("\t  Variables:");
        for var in conn.list_vars(&name)? {
            println!("\t\t- {}", var);
        }
    }

    Ok(())
}

SSL

You can turn on SSL support by adding .with_ssl(true) in the ConfigBuilder. This requires the ssl feature, which uses rustls under the hood.

Note that this crate turns off all certificate validation at the moment, effectively giving a false sense of security. If you'd like to contribute to this, see issue #8.