From ce989d70af74fc62fd3fa4dd6de5711da025a85b Mon Sep 17 00:00:00 2001 From: Alex Janka Date: Sat, 9 Mar 2024 09:01:47 +1100 Subject: [PATCH] fix the Weird Errors caused (?) by opt-level, plus minor tweaks --- .cargo/config.toml | 8 ++++++++ Cargo.lock | 4 ++-- homekit-controller/Cargo.toml | 2 +- homekit-controller/src/lib.rs | 2 ++ homekit-exporter/Cargo.toml | 2 +- homekit-exporter/packaging/PKGBUILD | 2 +- homekit-exporter/src/main.rs | 23 +++++++++++++++-------- 7 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..dcf98d7 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,8 @@ +[profile.release] +# somehow there are errors connecting to some devices +# - on linux +# - on release builds +# - when there are other devices too +# so i have turned the opt-level down to prevent this +# one day i will discover the root cause +opt-level = 0 diff --git a/Cargo.lock b/Cargo.lock index 697af3a..9a03c44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1120,7 +1120,7 @@ dependencies = [ [[package]] name = "homekit-controller" -version = "0.3.0" +version = "0.4.1" dependencies = [ "chacha20poly1305", "ed25519-dalek", @@ -1143,7 +1143,7 @@ dependencies = [ [[package]] name = "homekit-exporter" -version = "0.4.0" +version = "0.4.1" dependencies = [ "clap", "env_logger", diff --git a/homekit-controller/Cargo.toml b/homekit-controller/Cargo.toml index cc23571..a1fbba3 100644 --- a/homekit-controller/Cargo.toml +++ b/homekit-controller/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "homekit-controller" -version = "0.3.0" +version = "0.4.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/homekit-controller/src/lib.rs b/homekit-controller/src/lib.rs index b757d1f..23af8ff 100644 --- a/homekit-controller/src/lib.rs +++ b/homekit-controller/src/lib.rs @@ -340,6 +340,8 @@ impl DeviceConnection { #[derive(Debug, Error)] pub enum HomekitError { + #[error("could not connect to any devices")] + NoSuccessfulConnections, #[error("connection")] Connection(#[from] ConnectionError), #[error("io")] diff --git a/homekit-exporter/Cargo.toml b/homekit-exporter/Cargo.toml index add0a72..ee977d6 100644 --- a/homekit-exporter/Cargo.toml +++ b/homekit-exporter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "homekit-exporter" -version = "0.4.0" +version = "0.4.1" edition = "2021" license = "Apache-2.0" description = "Prometheus exporter for HomeKit sensors" diff --git a/homekit-exporter/packaging/PKGBUILD b/homekit-exporter/packaging/PKGBUILD index d50aad3..cb96fdd 100644 --- a/homekit-exporter/packaging/PKGBUILD +++ b/homekit-exporter/packaging/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Alex Janka pkgname=homekit-logger -pkgver=0.4.0 +pkgver=0.4.1 pkgrel=1 pkgdesc="Prometheus exporter for HomeKit sensors" arch=('x86_64' 'aarch64') diff --git a/homekit-exporter/src/main.rs b/homekit-exporter/src/main.rs index e4b781c..3732cbb 100644 --- a/homekit-exporter/src/main.rs +++ b/homekit-exporter/src/main.rs @@ -79,22 +79,29 @@ async fn init(pairing_data: PathBuf) -> Result let mut connected_devices = HashMap::new(); for (k, v) in devices { let mut num = 0; - let connected = loop { + loop { match v.connect(&discovered).await { - Ok(v) => break Some(v), + Ok(v) => { + connected_devices.insert(k, v); + break; + } Err(e) => { num += 1; + log::error!("error connecting to {k}: {e:?}"); if num > 10 { - log::error!("error connecting to {k}: {e:?}"); - break None; + log::error!("\t...not connecting"); + break; } } } - tokio::time::sleep(Duration::from_millis(250)).await; - }; - connected_devices.insert(k, connected.ok_or(HomekitError::DeviceNotFound)?); + tokio::time::sleep(Duration::from_millis(1000)).await; + } + } + if connected_devices.is_empty() { + Err(HomekitError::NoSuccessfulConnections) + } else { + Ok(connected_devices) } - Ok(connected_devices) } else { log::error!("{:?} is not a file!", pairing_data); Err(HomekitError::NoPairingData)