Update dependencies and fix the info module
This commit is contained in:
parent
e90f1e0ebb
commit
5c8e216809
7 changed files with 1309 additions and 676 deletions
1912
Cargo.lock
generated
1912
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
25
Cargo.toml
25
Cargo.toml
|
@ -4,32 +4,31 @@ version = "1.1.0"
|
|||
edition = "2021"
|
||||
license = "BlueOak-1.0.0"
|
||||
authors = ["Moritz Ruth <dev@moritzruth.de>"]
|
||||
homepage = "https://git.moritzruth.de/moritzruth/Hassliebe"
|
||||
repository = "https://git.moritzruth.de/moritzruth/Hassliebe"
|
||||
|
||||
[features]
|
||||
dry_run = [] # will prevent some actions like shutting down
|
||||
dry_run = [] # will prevent some actions like shutting down
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.69"
|
||||
base64 = "0.21.0"
|
||||
battery = "0.7.8"
|
||||
env_logger = "0.10.0"
|
||||
base64 = "0.22.1"
|
||||
env_logger = "0.11.5"
|
||||
exitcode = "1.1.2"
|
||||
image = "0.24.5"
|
||||
image = "0.25.2"
|
||||
json = "0.12.4"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.17"
|
||||
notify-rust = { version = "4.8.0", features = ["images"] }
|
||||
notify-rust = { version = "4.11.3", features = ["images"] }
|
||||
rand = "0.8.5"
|
||||
regex = "1.7.1"
|
||||
rumqttc = "0.20.0"
|
||||
rumqttc = "0.24.0"
|
||||
serde = { version = "1.0.152", features = ["derive"] }
|
||||
serde_json = "1.0.93"
|
||||
sysinfo = { version = "0.28.2", default-features = false }
|
||||
sysinfo = { version = "0.31.4", default-features = false, features = ["system"] }
|
||||
tokio = { version = "1.25.0", features = ["full"] }
|
||||
toml = "0.7.2"
|
||||
toml = "0.8.19"
|
||||
users = "0.11.0"
|
||||
validator = { version = "0.16.0", features = ["derive"] }
|
||||
void = "1.0.2"
|
||||
zbus = { version = "3.10.0", default-features = false, features = ["tokio"] }
|
||||
validator = { version = "0.18.1", features = ["derive"] }
|
||||
|
||||
[profile.release]
|
||||
strip = true # Automatically strip symbols from the binary.
|
||||
|
|
|
@ -9,13 +9,20 @@
|
|||
- [x] Notifications
|
||||
- [x] Actions
|
||||
- [x] System information reporting (CPU usage, RAM usage, battery status)
|
||||
- [ ] Media control (MPRIS)
|
||||
|
||||
The following sound like interesting ideas but as I don’t have a use case for them at the moment, I haven’t implemented them yet.
|
||||
Feel free to [open an issue and describe your use-case](https://git.moritzruth.de/moritzruth/Hassliebe/issues/new).
|
||||
|
||||
- [ ] PipeWire control
|
||||
- [ ] Exposing file contents as sensors
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
Hassliebe is a [single executable](https://git.moritzruth.de/moritzruth/Hassliebe/releases). Copy it somewhere and execute it.
|
||||
|
||||
For systemd users, a unit file is provided.
|
||||
|
||||
### As a systemd _system_ service
|
||||
|
||||
- Download [the latest binary](https://git.moritzruth.de/moritzruth/Hassliebe/releases) and put it into `/usr/bin`.
|
||||
|
|
|
@ -15,7 +15,7 @@ pub struct Mqtt {
|
|||
pub port: u16,
|
||||
|
||||
#[serde(default)]
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub credentials: Option<MqttCredentials>,
|
||||
}
|
||||
|
||||
|
@ -33,16 +33,16 @@ pub struct Internal {
|
|||
|
||||
#[derive(Deserialize, Validate)]
|
||||
pub struct Config {
|
||||
#[validate(custom = "crate::util::validate_hass_id")]
|
||||
#[validate(custom(function = "crate::util::validate_hass_id"))]
|
||||
pub friendly_id: String,
|
||||
|
||||
#[validate(length(min = 1))]
|
||||
pub display_name: String,
|
||||
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub mqtt: Mqtt,
|
||||
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub modules: modules::Config,
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ pub fn load(config_file_path: &Path) -> Result<Option<Config>> {
|
|||
file.read_to_string(&mut string_content).context("while reading the configuration file")?;
|
||||
|
||||
let parsed = toml::from_str::<Config>(string_content.as_str()).context("while parsing the configuration file")?;
|
||||
parsed.validate().context("while validating the configuration file")?;
|
||||
Validate::validate(&parsed).context("while validating the configuration file")?;
|
||||
|
||||
Ok(Some(parsed))
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ const BUTTON_TRIGGER_TEXT: &str = "press";
|
|||
|
||||
#[derive(Deserialize, Validate, Clone)]
|
||||
pub struct ButtonConfig {
|
||||
#[validate(custom = "crate::util::validate_hass_id")]
|
||||
#[validate(custom(function = "crate::util::validate_hass_id"))]
|
||||
pub id: String,
|
||||
|
||||
#[validate(length(min = 1))]
|
||||
|
|
|
@ -3,10 +3,10 @@ use std::time::Duration;
|
|||
use anyhow::{anyhow, Result};
|
||||
use rumqttc::QoS;
|
||||
use serde::Deserialize;
|
||||
use sysinfo::{CpuExt, System, SystemExt};
|
||||
use tokio::task::spawn_blocking;
|
||||
use tokio::time::MissedTickBehavior;
|
||||
use validator::Validate;
|
||||
use sysinfo::System;
|
||||
|
||||
use crate::modules::InitializationContext;
|
||||
|
||||
|
@ -46,13 +46,13 @@ pub async fn init(context: &mut InitializationContext) -> Result<()> {
|
|||
suggested_precision: Some(0),
|
||||
unit: Some("%"),
|
||||
force_update: true,
|
||||
device_class: "None"
|
||||
device_class: None
|
||||
},
|
||||
context,
|
||||
config.ram_usage,
|
||||
move || {
|
||||
sys.refresh_memory();
|
||||
Ok(format!("{:.2}", (sys.available_memory() as f64) / (sys.total_memory() as f64) * 100.0))
|
||||
Ok(format!("{:.2}", (sys.used_memory() as f64) / (sys.total_memory() as f64) * 100.0))
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
|
@ -68,13 +68,13 @@ pub async fn init(context: &mut InitializationContext) -> Result<()> {
|
|||
suggested_precision: Some(0),
|
||||
unit: Some("%"),
|
||||
force_update: true,
|
||||
device_class: "None"
|
||||
device_class: None
|
||||
},
|
||||
context,
|
||||
config.cpu_usage,
|
||||
move || {
|
||||
sys.refresh_cpu();
|
||||
Ok(format!("{:.2}", sys.global_cpu_info().cpu_usage()))
|
||||
sys.refresh_cpu_usage();
|
||||
Ok(format!("{:.2}", sys.global_cpu_usage()))
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
|
@ -90,8 +90,7 @@ pub async fn init(context: &mut InitializationContext) -> Result<()> {
|
|||
})
|
||||
.unwrap_or_default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
.await?;
|
||||
|
||||
if let Some(dir) = battery_dirs.first() {
|
||||
log::debug!(
|
||||
|
@ -113,7 +112,7 @@ pub async fn init(context: &mut InitializationContext) -> Result<()> {
|
|||
suggested_precision: Some(0),
|
||||
unit: Some("%"),
|
||||
force_update: true,
|
||||
device_class: "battery"
|
||||
device_class: Some("battery")
|
||||
},
|
||||
context,
|
||||
config.battery,
|
||||
|
@ -129,7 +128,7 @@ pub async fn init(context: &mut InitializationContext) -> Result<()> {
|
|||
suggested_precision: None,
|
||||
unit: None,
|
||||
force_update: false,
|
||||
device_class: "enum"
|
||||
device_class: Some("enum")
|
||||
},
|
||||
context,
|
||||
config.battery,
|
||||
|
@ -151,7 +150,7 @@ struct InfoEntityOptions<'a> {
|
|||
suggested_precision: Option<u64>,
|
||||
unit: Option<&'a str>,
|
||||
force_update: bool,
|
||||
device_class: &'a str
|
||||
device_class: Option<&'a str>
|
||||
}
|
||||
|
||||
async fn init_info_value(
|
||||
|
|
|
@ -13,13 +13,13 @@ mod notifications;
|
|||
|
||||
#[derive(Deserialize, Validate, Default)]
|
||||
pub struct Config {
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub buttons: Option<buttons::Config>,
|
||||
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub info: Option<info::Config>,
|
||||
|
||||
#[validate]
|
||||
#[validate(nested)]
|
||||
pub notifications: Option<notifications::Config>,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue