|
@@ -0,0 +1,47 @@
|
|
|
+extern crate time;
|
|
|
+
|
|
|
+use comm::Channel;
|
|
|
+use std::fs::File;
|
|
|
+use std::io::prelude::*;
|
|
|
+use std::thread;
|
|
|
+
|
|
|
+pub fn sensors(tx: &Channel) {
|
|
|
+ loop {
|
|
|
+ let right = vec![
|
|
|
+ temp(),
|
|
|
+ time_utc(),
|
|
|
+ datetime()
|
|
|
+ ];
|
|
|
+
|
|
|
+ tx.send(format!("{}", reduce(right))).ok().expect("Couldn't send data");
|
|
|
+ thread::sleep_ms(1000);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+fn reduce(arr: Vec<String>) -> String {
|
|
|
+ let result = arr.into_iter()
|
|
|
+ .fold("".to_string(), |acc, elem| format!("{} | {}", acc, elem));
|
|
|
+ if result.len() > 0 { result[3..].to_string() } else { result }
|
|
|
+}
|
|
|
+
|
|
|
+fn temp() -> String {
|
|
|
+ let path = "/sys/class/thermal/thermal_zone0/temp";
|
|
|
+ let mut f = File::open(path).unwrap();
|
|
|
+ let mut s = String::new();
|
|
|
+ assert!(f.read_to_string(&mut s).is_ok());
|
|
|
+ let i : u32 = s.trim().parse().unwrap();
|
|
|
+ format!("{}°C", i/1000)
|
|
|
+}
|
|
|
+
|
|
|
+fn datetime() -> String {
|
|
|
+ let now = time::now();
|
|
|
+ let localtime = time::strftime("%Y-%m-%d %H:%M", &now);
|
|
|
+ localtime.unwrap()
|
|
|
+}
|
|
|
+
|
|
|
+fn time_utc() -> String {
|
|
|
+ let now = time::now_utc();
|
|
|
+ let utctime = time::strftime("%H:%M", &now);
|
|
|
+ format!("UTC {}", utctime.unwrap())
|
|
|
+}
|
|
|
+
|