add battery level & load setting by device.env

This commit is contained in:
Romulus21
2021-06-05 10:42:40 +02:00
parent 44ba86a985
commit 6c7d3f834a
7 changed files with 72 additions and 19 deletions

3
.gitignore vendored
View File

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

7
Cargo.lock generated
View File

@@ -31,16 +31,9 @@ dependencies = [
name = "device" name = "device"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"dotenv",
"paho-mqtt", "paho-mqtt",
] ]
[[package]]
name = "dotenv"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
[[package]] [[package]]
name = "futures" name = "futures"
version = "0.3.15" version = "0.3.15"

View File

@@ -8,4 +8,3 @@ edition = "2018"
[dependencies] [dependencies]
paho-mqtt = "0.9" paho-mqtt = "0.9"
dotenv = "0.15.0"

38
src/device_var.rs Normal file
View File

@@ -0,0 +1,38 @@
use std::env;
use std::fs;
use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;
pub fn read_env_var() {
let filename = "device.env";
// println!("In file {}", filename);
fs::read_to_string(filename)
.expect("Something went wrong reading the file : device.env");
if let Ok(lines) = read_lines(filename) {
// Consumes the iterator, returns an (Optional) String
for line in lines {
if let Ok(var) = line {
let new_var: Vec<&str> = var.split('=').collect();
env::set_var(new_var[0], new_var[1]);
// println!("Ma ligne : {:?}", new_var);
}
}
}
// println!("\n");
// for (key, value) in env::vars() {
// println!("{}: {}", key, value);
// }
// println!("\n");
}
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where P: AsRef<Path>, {
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}

View File

@@ -1,11 +1,15 @@
mod mqtt_pub; mod mqtt_pub;
mod system_values; mod system_values;
mod device_var;
use std::env;
extern crate paho_mqtt as mqtt; extern crate paho_mqtt as mqtt;
extern crate dotenv;
fn main() { fn main() {
device_var::read_env_var();
println!("Resp Temperature : {}", system_values::get_temperature()); println!("Resp Temperature : {}", system_values::get_temperature());
let mut cli = mqtt_pub::init_cli(); let mut cli = mqtt_pub::init_cli();
@@ -14,5 +18,10 @@ fn main() {
cli = mqtt_pub::publish_message(cli, "storage", &system_values::get_storage().to_string()); cli = mqtt_pub::publish_message(cli, "storage", &system_values::get_storage().to_string());
cli = mqtt_pub::publish_message(cli, "mem", &system_values::get_mem().to_string()); cli = mqtt_pub::publish_message(cli, "mem", &system_values::get_mem().to_string());
let battery = env::var("BATTERY").unwrap().to_string();
if battery == "true" {
cli = mqtt_pub::publish_message(cli, "battery", &system_values::get_battery().to_string());
}
mqtt_pub::disconnect(cli); mqtt_pub::disconnect(cli);
} }

View File

@@ -3,13 +3,11 @@ use std::{
process, process,
time::Duration time::Duration
}; };
use dotenv::dotenv;
// Define the qos. // Define the qos.
const QOS:i32 = 1; const QOS:i32 = 1;
pub fn init_cli() -> mqtt::Client { pub fn init_cli() -> mqtt::Client {
dotenv().ok();
let host = env::args().nth(1).unwrap_or_else(|| let host = env::args().nth(1).unwrap_or_else(||
env::var("BROKER_ADDRESS").unwrap().to_string() env::var("BROKER_ADDRESS").unwrap().to_string()
@@ -44,8 +42,8 @@ pub fn init_cli() -> mqtt::Client {
} }
pub fn publish_message(cli: mqtt::Client, topic: &str, message: &str) -> mqtt::Client { pub fn publish_message(cli: mqtt::Client, topic: &str, message: &str) -> mqtt::Client {
let topic = get_topic_name(topic); // let topic = get_topic_name(topic);
let msg = mqtt::Message::new(topic.clone(), message.clone(), QOS); let msg = mqtt::Message::new(get_topic_name(topic), message, QOS);
let tok = cli.publish(msg); let tok = cli.publish(msg);
if let Err(e) = tok { if let Err(e) = tok {
@@ -65,7 +63,6 @@ pub fn disconnect(cli: mqtt::Client) {
} }
pub fn get_topic_name(types: &str) -> String { pub fn get_topic_name(types: &str) -> String {
dotenv().ok();
let mut topic = env::var("SERVICE").unwrap().to_string(); let mut topic = env::var("SERVICE").unwrap().to_string();
topic.push('/'); topic.push('/');

View File

@@ -2,10 +2,8 @@ use std::{
env, env,
process::Command, process::Command,
}; };
use dotenv::dotenv;
pub fn get_temperature() -> f32 { pub fn get_temperature() -> f32 {
dotenv().ok();
let mut temperature = 0.0; let mut temperature = 0.0;
let system = env::var("SYSTEM").unwrap().to_string(); let system = env::var("SYSTEM").unwrap().to_string();
@@ -53,7 +51,7 @@ pub fn get_storage() -> i8 {
return storage; return storage;
} }
pub fn get_mem() -> f32 { pub fn get_mem() -> i8 {
let mem_command = Command::new("free") let mem_command = Command::new("free")
.arg("-m") .arg("-m")
.output().unwrap_or_else(|e| { .output().unwrap_or_else(|e| {
@@ -64,7 +62,25 @@ pub fn get_mem() -> f32 {
let vec_mem : Vec<&str> = mem_string.split_whitespace().collect(); let vec_mem : Vec<&str> = mem_string.split_whitespace().collect();
let total = vec_mem[7].parse::<f32>().unwrap(); let total = vec_mem[7].parse::<f32>().unwrap();
let mem_use = vec_mem[8].parse::<f32>().unwrap(); let mem_use = vec_mem[8].parse::<f32>().unwrap();
let result = mem_use / total * 100.0 ; let result = (mem_use / total * 100.0) as i8;
return result; return result;
}
pub fn get_battery() -> i8 {
let system = env::var("SYSTEM").unwrap().to_string();
let mut battery = 0;
if system == "ubuntu" {
let battery_command = Command::new("cat")
.arg("/sys/class/power_supply/BAT0/capacity")
.output().unwrap_or_else(|e| {
panic!("failed to execute process: {}", e)
});
let battery_string = &String::from_utf8_lossy(&battery_command.stdout);
battery = (&battery_string[..battery_string.len() - 1]).parse::<i8>().unwrap();
}
return battery;
} }