diff --git a/devices.conf b/devices.conf index 9ed1d37..8be4159 100644 --- a/devices.conf +++ b/devices.conf @@ -1,8 +1,8 @@ { "plugs": [ - "Tasmota-Plug-1", - "Tasmota-Plug-2", - "Tasmota-Plug-3", - "Tasmota-Plug-4" + ["Tasmota-Plug-1", false], + ["Tasmota-Plug-2", false], + ["Tasmota-Plug-3", true], + ["Tasmota-Plug-4", true] ] } \ No newline at end of file diff --git a/midea.py b/midea.py deleted file mode 100644 index decb0ab..0000000 --- a/midea.py +++ /dev/null @@ -1,3 +0,0 @@ -import midea_ac_lan.midea.core as midea_core - -midea_core \ No newline at end of file diff --git a/resources/js/main.js b/resources/js/main.js index 2748ffe..6430c3a 100644 --- a/resources/js/main.js +++ b/resources/js/main.js @@ -67,7 +67,7 @@ async function startup() { } } let button_icon = document.createElement('i'); - button_icon.className = "fa fa-edit"; + button_icon.className = "fa fa-pencil-square-o"; device_name_entry.appendChild(device_name); device_name_edit.appendChild(button_icon); @@ -106,16 +106,21 @@ async function startup() { let device_power_state = document.createElement('label'); device_power_state.innerText = device_state["power"]; device_power_state.id = "power_" + device_id; - let device_power_on = document.createElement('button'); - device_power_on.innerText = "On" - device_power_on.onclick = async () => { await power_on(device_id) }; - let device_power_off = document.createElement('button'); - device_power_off.innerText = "Off" - device_power_off.onclick = async () => { await power_off(device_id) }; device_power_state_entry.appendChild(device_power_state); - device_power_state_entry.appendChild(device_power_on); - device_power_state_entry.appendChild(device_power_off); + + if (devices[i][2] == true) { + let device_power_on = document.createElement('button'); + device_power_on.innerText = "On" + device_power_on.onclick = async () => { await power_on(device_id) }; + let device_power_off = document.createElement('button'); + device_power_off.innerText = "Off" + device_power_off.onclick = async () => { await power_off(device_id) }; + + device_power_state_entry.appendChild(device_power_on); + device_power_state_entry.appendChild(device_power_off); + } + row_device.appendChild(device_power_state_entry); // create device power draw column @@ -125,7 +130,7 @@ async function startup() { let device_power_draw_graph_button = document.createElement('button'); device_power_draw_graph_button.onclick = async () => { await render_graph(device_id, device_descriptor) }; let device_power_draw_graph_button_icon = document.createElement('i'); - device_power_draw_graph_button_icon.className = "fa fa-chart-bar"; + device_power_draw_graph_button_icon.className = "fa fa-line-chart"; device_power_draw_graph_button.appendChild(device_power_draw_graph_button_icon); device_power_draw_entry.appendChild(device_power_draw); diff --git a/resources/static/index.html b/resources/static/index.html index 26023d9..fa9bd51 100644 --- a/resources/static/index.html +++ b/resources/static/index.html @@ -4,7 +4,8 @@ Smart Homeserver - + diff --git a/src/data.rs b/src/data.rs index 0887dab..95a8921 100644 --- a/src/data.rs +++ b/src/data.rs @@ -192,7 +192,7 @@ mod test { let db = DataBase::new("home_server.db").await?; let devices = Devices::read("devices.conf").await?; - for plug in devices.plugs { + for (plug, _) in devices.plugs { println!("===== data for plug {plug} ====="); let days: HashMap>> = split_into_days( diff --git a/src/db.rs b/src/db.rs index baeaba2..60b0e59 100644 --- a/src/db.rs +++ b/src/db.rs @@ -37,6 +37,7 @@ impl DataBase { id INTEGER PRIMARY KEY, device VARCHAR(60) NOT NULL, type VARCHAR(30) NOT NULL, + control INTEGER NOT NULL, name VARCHAR(80) )", [], @@ -75,7 +76,7 @@ impl DataBase { } pub fn register_devices(&self, devices: &Devices) -> Result<()> { - for device in devices.plugs.iter() { + for (device, control) in devices.plugs.iter() { self.sql.execute( &format!( "INSERT INTO devices (device, type) @@ -90,6 +91,19 @@ impl DataBase { ), [], )?; + + let ctl = if *control { 1 } else { 0 }; + + self.sql.execute( + &format!( + " + UPDATE devices + SET control=\"{ctl}\" + WHERE device=\"{device}\" + " + ), + [], + )?; } Ok(()) @@ -116,16 +130,18 @@ impl DataBase { .sql .prepare(&format!( " - SELECT device, type, name + SELECT device, type, name, control FROM devices " ))? - .query_map([], |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)))? + .query_map([], |row| { + Ok((row.get(0)?, row.get(1)?, row.get(2)?, row.get(3)?)) + })? { - let (device, dev_type, name): (String, String, Option) = row?; + let (device, dev_type, name, control): (String, String, Option, i32) = row?; match dev_type.as_str() { - "plug" => devices.plugs.push((device, name)), + "plug" => devices.plugs.push((device, name, control != 0)), _ => panic!(), } @@ -195,7 +211,7 @@ mod test { let db = DataBase::new("startup_test.db").await?; db.register_devices(&Devices { - plugs: vec!["test".to_string()], + plugs: vec![("test".to_string(), true)], })?; fs::remove_file("startup_test.db")?; @@ -210,7 +226,7 @@ mod test { let device_name = "test"; db.register_devices(&Devices { - plugs: vec![device_name.to_string()], + plugs: vec![(device_name.to_string(), true)], })?; db.write(device_name, 0, 5.5)?; diff --git a/src/devices.rs b/src/devices.rs index fe5c8c0..596ec71 100644 --- a/src/devices.rs +++ b/src/devices.rs @@ -6,7 +6,7 @@ use serde_json::{from_str, to_string, to_string_pretty}; #[derive(Clone, PartialEq, Eq, Deserialize, Serialize, Debug)] pub struct Devices { - pub plugs: Vec, + pub plugs: Vec<(String, bool)>, } impl Devices { @@ -24,7 +24,7 @@ impl Devices { #[derive(Debug, Clone, Deserialize, Serialize, Default)] pub struct DevicesWithName { - pub plugs: Vec<(String, Option)>, + pub plugs: Vec<(String, Option, bool)>, } impl DevicesWithName { @@ -41,7 +41,7 @@ mod test { #[test] fn create_conf() -> Result<()> { let devices = Devices { - plugs: vec!["Dev1".to_string(), "Dev2".to_string()], + plugs: vec![("Dev1".to_string(), true), ("Dev2".to_string(), false)], }; devices.save("test_devices.conf") diff --git a/src/main.rs b/src/main.rs index b187072..254df92 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,7 +89,7 @@ async fn main() -> Result<()> { let tasmota_plugs: Vec = devices .plugs .iter() - .map(|plug| Tasmota::new(plug)) + .map(|(plug, _)| Tasmota::new(plug)) .collect(); try_join!(