mirror of
https://codeberg.org/icewind/mitemp-prometheus.git
synced 2026-06-03 17:14:08 +02:00
mitemp 0.3
This commit is contained in:
parent
2e1102b1df
commit
4a940b0b4a
4 changed files with 293 additions and 712 deletions
974
Cargo.lock
generated
974
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -11,5 +11,6 @@ dotenv = "0.15.0"
|
||||||
main_error = "0.1.0"
|
main_error = "0.1.0"
|
||||||
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
|
||||||
warp = "0.3"
|
warp = "0.3"
|
||||||
mitemp = { version = "0.2.0", git = "https://github.com/icewind1991/mitemp-rs" }
|
mitemp = "0.3"
|
||||||
|
tokio-stream = "0.1"
|
||||||
|
btleplug = "0.9"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ Expose Xiaomi MI Temperature and Humidity Sensor to prometheus
|
||||||
Run the binary with the following environment variables
|
Run the binary with the following environment variables
|
||||||
|
|
||||||
```dotenv
|
```dotenv
|
||||||
ADAPTER=00:1A:7D:DA:71:01
|
|
||||||
PORT=3030
|
PORT=3030
|
||||||
NAMES="58:2d:34:39:1a:01=Sensor 1,58:2d:34:39:1a:02=Sensor 2"
|
NAMES="58:2d:34:39:1a:01=Sensor 1,58:2d:34:39:1a:02=Sensor 2"
|
||||||
```
|
```
|
||||||
|
|
|
||||||
35
src/main.rs
35
src/main.rs
|
|
@ -1,10 +1,13 @@
|
||||||
|
use btleplug::api::Manager as _;
|
||||||
|
use btleplug::platform::Manager;
|
||||||
use main_error::MainError;
|
use main_error::MainError;
|
||||||
use mitemp::{adapter_by_mac, listen, BDAddr, Sensor};
|
use mitemp::{listen, BDAddr, Sensor};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::thread::spawn;
|
use tokio::{pin, spawn};
|
||||||
|
use tokio_stream::StreamExt;
|
||||||
use warp::Filter;
|
use warp::Filter;
|
||||||
|
|
||||||
type Cache = Arc<Mutex<HashMap<BDAddr, Sensor>>>;
|
type Cache = Arc<Mutex<HashMap<BDAddr, Sensor>>>;
|
||||||
|
|
@ -14,8 +17,6 @@ async fn main() -> Result<(), MainError> {
|
||||||
let cache: Cache = Arc::default();
|
let cache: Cache = Arc::default();
|
||||||
|
|
||||||
let mut env: HashMap<String, String> = dotenv::vars().collect();
|
let mut env: HashMap<String, String> = dotenv::vars().collect();
|
||||||
let adapter = BDAddr::from_str(&env.remove("ADAPTER").ok_or("No ADDR set")?)
|
|
||||||
.map_err(|_| "Invalid adapter address")?;
|
|
||||||
let port = env
|
let port = env
|
||||||
.get("PORT")
|
.get("PORT")
|
||||||
.and_then(|s| u16::from_str(s).ok())
|
.and_then(|s| u16::from_str(s).ok())
|
||||||
|
|
@ -34,16 +35,24 @@ async fn main() -> Result<(), MainError> {
|
||||||
})
|
})
|
||||||
.collect::<Result<HashMap<BDAddr, String>, MainError>>()?;
|
.collect::<Result<HashMap<BDAddr, String>, MainError>>()?;
|
||||||
|
|
||||||
let adapter = adapter_by_mac(adapter).map_err(|_| "Adapter not found")?;
|
let manager = Manager::new().await?;
|
||||||
|
for adapter in manager.adapters().await? {
|
||||||
|
let rx_cache = cache.clone();
|
||||||
|
spawn(async move {
|
||||||
|
let stream = match listen(&adapter).await {
|
||||||
|
Ok(stream) => stream,
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Failed to listen to adapter: {:#}", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
pin!(stream);
|
||||||
|
|
||||||
let iter = listen(adapter).map_err(|e| format!("Failed to start btle listen: {}", e))?;
|
while let Some(sensor) = stream.next().await {
|
||||||
|
rx_cache.lock().unwrap().insert(sensor.mac, sensor);
|
||||||
let rx_cache = cache.clone();
|
}
|
||||||
spawn(move || {
|
});
|
||||||
for sensor in iter {
|
}
|
||||||
rx_cache.lock().unwrap().insert(sensor.mac, sensor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let metrics = warp::path!("metrics").map(move || {
|
let metrics = warp::path!("metrics").map(move || {
|
||||||
let mut result = String::new();
|
let mut result = String::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue