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
125KB
3K SLoC
rusts
一个针对Rust的网络不间断电源工具 (NUT) 客户端库。
- 使用TCP连接到
upsd
/nut-server
- 使用用户名和密码登录
- 列出不间断电源设备
- 列出不间断电源设备的变量
- 使用SSL安全连接(可选功能)
- 支持阻塞和异步(Tokio)
入门指南
您需要运行一个NUT守护进程(upsd
,版本 >= 2.6.4)和一个兼容的不间断电源设备,才能使用此库
使用内置的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