#tokio #async #ups #nut #async-version

rusts

网络不间断电源工具(NUT)客户端库

6个版本

0.6.1 2023年8月15日
0.6.0 2023年7月1日
0.5.3 2022年8月20日
0.5.2 2021年8月1日

#1597 in 网络编程


用于 rupsc

MIT 许可证

125KB
3K SLoC

rusts

crates.io Documentation MIT licensed CI

一个针对Rust的网络不间断电源工具 (NUT) 客户端库。

  • 使用TCP连接到 upsd/nut-server
  • 使用用户名和密码登录
  • 列出不间断电源设备
  • 列出不间断电源设备的变量
  • 使用SSL安全连接(可选功能)
  • 支持阻塞和异步(Tokio)

入门指南

您需要运行一个NUT守护进程(upsd,版本 >= 2.6.4)和一个兼容的不间断电源设备,才能使用此库

  1. 安装NUT
  2. 配置并启动upsd

使用内置的upsc工具验证您的不间断电源是否已连接

upsc myupsname@localhost ups.status

示例

rupsc CLI是用此库编写的,并且是NUT内置的upsc工具的克隆。

以下是一个使用此库的示例程序(cargo run --example blocking)。

您还可以使用cargo run --example async --features async-rt(来源:rups/examples/async.rs)运行此代码的异步版本。

// rups/examples/blocking.rs

use std::env;

use rups::blocking::Connection;
use rups::{Auth, ConfigBuilder};
use std::convert::TryInto;

fn main() -> nut_client::Result<()> {
    let host = env::var("NUT_HOST").unwrap_or_else(|_| "localhost".into());
    let port = env::var("NUT_PORT")
        .ok()
        .map(|s| s.parse::<u16>().ok())
        .flatten()
        .unwrap_or(3493);

    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, port).try_into().unwrap_or_default())
        .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

您可以通过在ConfigBuilder中添加.with_ssl(true)来启用SSL支持。这需要ssl功能,它底层使用rustls

请注意,默认情况下,.with_ssl(true) 将启用 严格的 验证。这意味着它将验证服务器证书的 DNS 条目,检查撤销,并使用本地根信任验证链。您还必须确保连接的主机名是一个有效的 DNS 名称(例如 localhost,而不是 127.0.0.1)。

如果服务器使用的是自签名证书,并且您希望忽略严格的验证,则可以在 .with_ssl(true) 的同时添加 .with_insecure_ssl(true)

异步(Tokio)

rups 库支持异步网络请求。这需要 async 功能,它底层使用 Tokio v1。

为了支持 SSL,您还必须使用 async-ssl 功能。

发音

r-oops

许可证

本存储库中的 crate 以这种方式授权

  • rups: MIT 许可证,见 ./LICENSE
  • rupsc: GPL-3.0 或更高版本,见 ./rupsc/LICENSE

依赖关系

~0–12MB
~128K SLoC