teslatte/src/powerwall.rs

57 lines
1.9 KiB
Rust
Raw Normal View History

use crate::energy_sites::{HistoryKind, HistoryPeriod};
use crate::products::GatewayId;
2023-10-20 12:18:38 +11:00
use crate::{get_arg, get_args, join_query_pairs, rfc3339, OwnerApi, Values};
2022-07-25 10:00:55 +10:00
use chrono::{DateTime, FixedOffset};
use derive_more::{Display, FromStr};
2022-07-21 21:00:45 +10:00
use serde::{Deserialize, Serialize};
#[rustfmt::skip]
2023-10-20 12:18:38 +11:00
impl OwnerApi {
2022-07-21 21:00:45 +10:00
get_arg!(powerwall_status, PowerwallStatus, "/powerwalls/{}/status", PowerwallId);
2022-07-25 10:00:55 +10:00
get_args!(powerwall_energy_history, PowerwallEnergyHistory, "/powerwalls/{}/energyhistory", PowerwallEnergyHistoryValues);
2022-07-21 21:00:45 +10:00
}
2022-07-25 10:00:55 +10:00
#[derive(Debug, Clone, Serialize, Deserialize, Display, FromStr)]
2022-07-21 21:00:45 +10:00
pub struct PowerwallId(pub String);
#[derive(Debug, Clone, Deserialize)]
pub struct PowerwallStatus {
pub site_name: String,
pub id: GatewayId,
pub energy_left: f64,
pub total_pack_energy: i64,
pub percentage_charged: f64,
pub battery_power: i64,
}
2022-07-25 10:00:55 +10:00
#[derive(Debug, Clone)]
pub struct PowerwallEnergyHistoryValues {
pub powerwall_id: PowerwallId,
pub period: HistoryPeriod,
pub kind: HistoryKind,
pub start_date: Option<DateTime<FixedOffset>>,
pub end_date: Option<DateTime<FixedOffset>>,
}
impl Values for PowerwallEnergyHistoryValues {
fn format(&self, url: &str) -> String {
2023-08-29 11:41:40 +10:00
let url = url.replace("{}", &self.powerwall_id.0.to_string());
2022-07-25 10:00:55 +10:00
let mut pairs: Vec<(&str, String)> = vec![
("period", self.period.to_string()),
("kind", self.kind.to_string()),
];
if let Some(start_date) = self.start_date {
let start_date = rfc3339(&start_date);
pairs.push(("start_date", start_date));
}
if let Some(end_date) = self.end_date {
let end_date = rfc3339(&end_date);
pairs.push(("end_date", end_date));
}
format!("{}?{}", url, join_query_pairs(&pairs))
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct PowerwallEnergyHistory {}