aboutsummaryrefslogtreecommitdiff
path: root/src/bin/sctd.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/sctd.rs')
-rw-r--r--src/bin/sctd.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/bin/sctd.rs b/src/bin/sctd.rs
new file mode 100644
index 0000000..8161bee
--- /dev/null
+++ b/src/bin/sctd.rs
@@ -0,0 +1,58 @@
+#[macro_use]
+extern crate log;
+
+extern crate chrono;
+extern crate clap;
+extern crate spa;
+
+use chrono::prelude::*;
+use clap::{value_t_or_exit, App, Arg};
+use env_logger::Env;
+use spa::calc_sunrise_and_set;
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let env = Env::default().filter_or("SCTD_LOG_LEVEL", "info");
+ env_logger::init_from_env(env);
+
+ let matches = App::new("sctd")
+ .version("0.1.2")
+ .about("set color temperature daemon")
+ .arg(
+ Arg::with_name("latitude")
+ .long("latitude")
+ .takes_value(true)
+ .allow_hyphen_values(true),
+ )
+ .arg(
+ Arg::with_name("longitude")
+ .long("longitude")
+ .takes_value(true)
+ .allow_hyphen_values(true),
+ )
+ .arg(Arg::with_name("reset").long("reset"))
+ .get_matches();
+
+ if matches.is_present("reset") {
+ sctd::reset_temp();
+ } else {
+ let latitude = value_t_or_exit!(matches, "latitude", f64);
+ let longitude = value_t_or_exit!(matches, "longitude", f64);
+
+ loop {
+ let utc: DateTime<Utc> = Utc::now();
+ match calc_sunrise_and_set(utc, latitude, longitude) {
+ Ok(ss) => {
+ let temp = sctd::get_temp(utc, &ss, latitude, longitude) as u32;
+ info!("setting temprature to {}", temp);
+ sctd::set_temp(temp);
+ }
+ Err(e) => {
+ error!("error calculating sunrise and sunset for {}, {}: {:?}", latitude, longitude, e);
+ }
+ }
+ thread::sleep(Duration::from_secs(300));
+ }
+ }
+}