.cargo | ||
.github/workflows | ||
nut-client | ||
rupsc | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md |
nut-client
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:
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, by default, .with_ssl(true)
will enable strict verification. This means it will verify the server
certificate's DNS entries, check for revocation, and verify the chain using the local root trust. You must also ensure
that the connection hostname is a valid DNS name (e.g. localhost
, not 127.0.0.1
).
If the server is using a self-signed certificate, and you'd like to ignore the strict validation, you can add
.with_insecure_ssl(true)
along with .with_ssl(true)
.