initial implementation

This commit is contained in:
Robin Appelman 2020-02-08 13:46:11 +01:00
commit 0619925304
4 changed files with 1929 additions and 2 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
/target /target
.env

1885
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,9 @@ authors = ["Robin Appelman <robin@icewind.nl>"]
edition = "2018" edition = "2018"
[dependencies] [dependencies]
dotenv = "0.15.0"
main_error = "0.1.0" main_error = "0.1.0"
tokio = { version = "0.2", features = ["macros"] }
warp = "0.2"
mitemp = { version = "0.1.0", git = "https://github.com/icewind1991/mitemp-rs" } mitemp = { version = "0.1.0", git = "https://github.com/icewind1991/mitemp-rs" }

View file

@ -1,3 +1,41 @@
fn main() { use main_error::MainError;
println!("Hello, world!"); use mitemp::{adapter_by_mac, BDAddr, Sensor};
use std::collections::HashMap;
use std::str::FromStr;
use warp::Filter;
#[tokio::main]
async fn main() -> Result<(), MainError> {
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 device = BDAddr::from_str(&env.remove("DEVICE").ok_or("No KEYFILE set")?)
.map_err(|_| "Invalid device address")?;
let port = env
.get("PORT")
.and_then(|s| u16::from_str(s).ok())
.unwrap_or(80);
let adapter = adapter_by_mac(adapter).map_err(|_| "Adapter not found")?;
let sensor = Sensor::new(adapter, device).start();
let metrics = warp::path!("metrics").map(move || {
let data = sensor.get_data();
if data.battery > 0 {
format!(
"sensor_temperature {}\nsensor_humidity {}\nsensor_battery {}\n",
data.temperature, data.humidity, data.battery
)
} else {
format!(
"sensor_temperature {}\nsensor_humidity {}\n",
data.temperature, data.humidity
)
}
});
warp::serve(metrics).run(([0, 0, 0, 0], port)).await;
Ok(())
} }