Add custom css
This commit is contained in:
parent
aff80fa0f7
commit
80b61dc854
5 changed files with 35 additions and 12 deletions
|
@ -1,5 +1,3 @@
|
|||
table,
|
||||
th,
|
||||
td {
|
||||
border: 1px solid black;
|
||||
td>*:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
}
|
|
@ -9,6 +9,7 @@ async function startup() {
|
|||
);
|
||||
|
||||
let table = document.createElement('table');
|
||||
table.className = "pure-table pure-table-bordered";
|
||||
let json = JSON.parse(await response.json());
|
||||
|
||||
console.log(json);
|
||||
|
@ -54,9 +55,11 @@ async function startup() {
|
|||
// create device name column
|
||||
let device_name_entry = document.createElement('td');
|
||||
let device_name = document.createElement('input');
|
||||
device_name.className = "pure-u-2";
|
||||
device_name.value = device_descriptor;
|
||||
device_name.readOnly = true;
|
||||
let device_name_edit = document.createElement('button');
|
||||
device_name_edit.className = "pure-button";
|
||||
device_name_edit.onclick = async () => {
|
||||
if (device_name.readOnly) {
|
||||
device_name.readOnly = false;
|
||||
|
@ -88,12 +91,15 @@ async function startup() {
|
|||
let device_led_state_entry = document.createElement('td');
|
||||
let device_led_state = document.createElement('label');
|
||||
device_led_state.innerText = device_state["led"];
|
||||
device_led_state.className = "pure-u-2";
|
||||
device_led_state.id = "led_" + device_id;
|
||||
let device_led_on = document.createElement('button');
|
||||
device_led_on.innerText = "On"
|
||||
device_led_on.innerText = "On";
|
||||
device_led_on.className = "pure-button";
|
||||
device_led_on.onclick = async () => { await led_on(device_id) };
|
||||
let device_led_off = document.createElement('button');
|
||||
device_led_off.innerText = "Off"
|
||||
device_led_off.className = "pure-button";
|
||||
device_led_off.onclick = async () => { await led_off(device_id) };
|
||||
|
||||
device_led_state_entry.appendChild(device_led_state);
|
||||
|
@ -105,6 +111,7 @@ async function startup() {
|
|||
let device_power_state_entry = document.createElement('td');
|
||||
let device_power_state = document.createElement('label');
|
||||
device_power_state.innerText = device_state["power"];
|
||||
device_power_state.className = "pure-u-2";
|
||||
device_power_state.id = "power_" + device_id;
|
||||
|
||||
device_power_state_entry.appendChild(device_power_state);
|
||||
|
@ -112,9 +119,11 @@ async function startup() {
|
|||
if (devices[i][2] == true && device_state["power_draw"] < 15) {
|
||||
let device_power_on = document.createElement('button');
|
||||
device_power_on.innerText = "On"
|
||||
device_power_on.className = "pure-button";
|
||||
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.className = "pure-button";
|
||||
device_power_off.onclick = async () => { await power_off(device_id) };
|
||||
|
||||
device_power_state_entry.appendChild(device_power_on);
|
||||
|
@ -126,8 +135,10 @@ async function startup() {
|
|||
// create device power draw column
|
||||
let device_power_draw_entry = document.createElement('td');
|
||||
let device_power_draw = document.createElement('label');
|
||||
device_power_draw.className = "pure-u-2";
|
||||
device_power_draw.innerText = device_state["power_draw"] + " W";
|
||||
let device_power_draw_graph_button = document.createElement('button');
|
||||
device_power_draw_graph_button.className = "pure-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-line-chart";
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
<title>Smart Homeserver</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css"
|
||||
integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY=" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/purecss@3.0.0/build/pure-min.css"
|
||||
integrity="sha384-X38yfunGUhNzHpBaEBsWLO+A0HDYOQi8ufWDkZ0k9e0eXz/tH3II7uKZ9msv++Ls" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdn.korzh.com/metroui/v4/css/metro-all.min.css">
|
||||
<link href="/css/index.css" rel="stylesheet">
|
||||
</head>
|
||||
|
|
|
@ -4,7 +4,7 @@ use std::{
|
|||
time::{Duration, SystemTime, UNIX_EPOCH},
|
||||
};
|
||||
|
||||
use crate::{db::DataBase, web_server::plug_data_range};
|
||||
use crate::{db::DataBase, midea_helper::MideaDiscovery, web_server::plug_data_range};
|
||||
|
||||
mod data;
|
||||
mod db;
|
||||
|
@ -57,7 +57,7 @@ async fn run_web_server(
|
|||
const IP: &str = "0.0.0.0";
|
||||
const PORT: u16 = 8062;
|
||||
|
||||
println!("Starting server on {IP}:{PORT}");
|
||||
println!("Starting server on http://{IP}:{PORT}");
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
|
@ -89,7 +89,7 @@ async fn main() -> Result<()> {
|
|||
let db_future = DataBase::new("home_server.db");
|
||||
let devices_future = Devices::read("devices.conf");
|
||||
|
||||
let (db, devices) = try_join!(db_future, devices_future)?;
|
||||
let (db, devices, midea) = try_join!(db_future, devices_future, MideaDiscovery::discover())?;
|
||||
|
||||
db.register_devices(&devices)?;
|
||||
let shared_db = Arc::new(Mutex::new(db));
|
||||
|
@ -100,7 +100,7 @@ async fn main() -> Result<()> {
|
|||
.map(|(plug, _)| Tasmota::new(plug))
|
||||
.collect();
|
||||
|
||||
let dishwasher = MideaDishwasher::create(shared_db.clone())
|
||||
let dishwasher = MideaDishwasher::create(midea, shared_db.clone())
|
||||
.await?
|
||||
.into_iter()
|
||||
.map(|d| Arc::new(d))
|
||||
|
|
|
@ -43,17 +43,29 @@ impl LoginInfo {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct MideaDiscovery {
|
||||
infos: Vec<DeviceInfo>,
|
||||
}
|
||||
|
||||
impl MideaDiscovery {
|
||||
pub async fn discover() -> Result<Self> {
|
||||
Ok(Self {
|
||||
infos: Startup::discover().await?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub struct MideaDishwasher {
|
||||
device_info: DeviceInfo,
|
||||
device: Device,
|
||||
}
|
||||
|
||||
impl MideaDishwasher {
|
||||
pub async fn create(db: Arc<Mutex<DataBase>>) -> Result<Vec<Self>> {
|
||||
pub async fn create(discovery: MideaDiscovery, db: Arc<Mutex<DataBase>>) -> Result<Vec<Self>> {
|
||||
let mut v = Vec::new();
|
||||
|
||||
for device_info in Startup::discover()
|
||||
.await?
|
||||
for device_info in discovery
|
||||
.infos
|
||||
.into_iter()
|
||||
.filter(|device_info| device_info.device_type == 0xE1)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue