Add site mode, UI tweaks
This commit is contained in:
parent
ec8e9f3dec
commit
ea1d3ab379
@ -1,4 +1,3 @@
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::convert::Infallible;
|
||||
use std::sync::{Arc, Mutex};
|
||||
@ -76,7 +75,8 @@ pub fn start(
|
||||
.find(|s| s.id == reg.site_id)
|
||||
.ok_or(anyhow!("Invalid site id {}", reg.site_id))?
|
||||
.details(&mut ctx)?
|
||||
.circuits.into_iter()
|
||||
.circuits
|
||||
.into_iter()
|
||||
.find(|c| c.id == reg.circuit_id)
|
||||
.ok_or(anyhow!("Invalid circuit id {}", reg.circuit_id))?;
|
||||
|
||||
|
66
src/main.rs
66
src/main.rs
@ -3,7 +3,7 @@ use std::error::Error;
|
||||
use anyhow::{Context as AnyhowContext, Result};
|
||||
use clap::ValueEnum;
|
||||
use clap::{Parser, Subcommand};
|
||||
use easee::api::{ApiError, Charger, ChargerState, ChargingSession, Context};
|
||||
use easee::api::{ApiError, Charger, ChargerState, ChargingSession, Context, SetCurrent, Triphase};
|
||||
use easee::observation;
|
||||
|
||||
use tracing::info;
|
||||
@ -27,6 +27,16 @@ enum Session {
|
||||
Latest,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Subcommand)]
|
||||
enum SiteCommand {
|
||||
Set {
|
||||
phase1: f64,
|
||||
phase2: f64,
|
||||
phase3: f64,
|
||||
ttl: i32,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Subcommand)]
|
||||
enum Mode {
|
||||
Login,
|
||||
@ -39,6 +49,12 @@ enum Mode {
|
||||
Charge {
|
||||
command: Command,
|
||||
},
|
||||
Site {
|
||||
site_id: i32,
|
||||
circuit_id: i32,
|
||||
#[command(subcommand)]
|
||||
cmd: Option<SiteCommand>,
|
||||
},
|
||||
Stream,
|
||||
Power,
|
||||
Control,
|
||||
@ -49,7 +65,7 @@ struct CLI {
|
||||
#[arg(short, long)]
|
||||
debug: bool,
|
||||
|
||||
#[arg(short, long)]
|
||||
#[arg(short = 'i', long)]
|
||||
charger_id: Vec<String>,
|
||||
|
||||
#[arg(short, long, default_value = "./config.json")]
|
||||
@ -141,7 +157,7 @@ fn status(id: &str, c: ChargerState) {
|
||||
let cable = if c.cable_locked { "LOCK" } else { "open" };
|
||||
let mode = c.charger_op_mode;
|
||||
let power = c.total_power;
|
||||
println!("{id}: [{mode:?}] ({power}W) cable:{cable}");
|
||||
println!("{id}: [{mode:?}] ({power:.3}kW) cable:{cable}");
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
@ -158,20 +174,20 @@ fn main() -> Result<()> {
|
||||
}
|
||||
|
||||
let mut ctx = load_context()?;
|
||||
let config = config::load_config(&args.config)?;
|
||||
let config = config::load_config(&args.config).context("config file")?;
|
||||
|
||||
match args.mode {
|
||||
Mode::Login => login()?,
|
||||
Mode::List => {
|
||||
for site in ctx.sites()? {
|
||||
println!(
|
||||
"Site {} (level {})",
|
||||
site.id, site.level_of_access
|
||||
);
|
||||
println!("Site {} (level {})", site.id, site.level_of_access);
|
||||
for circuit in site.details(&mut ctx)?.circuits {
|
||||
println!(" Circuit {} ({}A)", circuit.id, circuit.rated_current);
|
||||
for charger in circuit.chargers {
|
||||
println!(" Charger {} (level {})", charger.id, charger.level_of_access);
|
||||
println!(
|
||||
" Charger {} (level {})",
|
||||
charger.id, charger.level_of_access
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -204,6 +220,38 @@ fn main() -> Result<()> {
|
||||
let chargers = load_chargers(&mut ctx, &args.charger_id)?;
|
||||
control::start(ctx, config, chargers)?;
|
||||
}
|
||||
Mode::Site {
|
||||
site_id,
|
||||
circuit_id,
|
||||
cmd,
|
||||
} => {
|
||||
let site = ctx.circuit(site_id, circuit_id)?;
|
||||
match cmd {
|
||||
Some(SiteCommand::Set {
|
||||
phase1,
|
||||
phase2,
|
||||
phase3,
|
||||
ttl,
|
||||
}) => {
|
||||
let current = Triphase {
|
||||
phase1,
|
||||
phase2,
|
||||
phase3,
|
||||
};
|
||||
site.set_dynamic_current(
|
||||
&mut ctx,
|
||||
SetCurrent {
|
||||
time_to_live: Some(ttl),
|
||||
current,
|
||||
},
|
||||
)?;
|
||||
}
|
||||
None => {
|
||||
let current = site.dynamic_current(&mut ctx)?;
|
||||
println!("{:?}", current);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Ok(())
|
||||
|
Loading…
Reference in New Issue
Block a user