log sentry mode
All checks were successful
Build .deb on release / Build-Deb (push) Successful in 1m53s

This commit is contained in:
Alex Janka 2024-01-21 10:06:14 +11:00
parent 0a26850ce4
commit 76bc9708d3
4 changed files with 50 additions and 2 deletions

2
Cargo.lock generated
View file

@ -2567,7 +2567,7 @@ dependencies = [
[[package]] [[package]]
name = "tesla-charge-controller" name = "tesla-charge-controller"
version = "1.0.12" version = "1.0.13"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"chrono", "chrono",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "tesla-charge-controller" name = "tesla-charge-controller"
version = "1.0.12" version = "1.0.13"
edition = "2021" edition = "2021"
license = "MITNFA" license = "MITNFA"
description = "Controls Tesla charge rate based on solar charge data" description = "Controls Tesla charge rate based on solar charge data"

View file

@ -40,6 +40,8 @@ struct Metrics {
cabin_overheat_protection: CabinOverheatProtectionGauges, cabin_overheat_protection: CabinOverheatProtectionGauges,
hvac_auto: HvacAutoRequestGauges, hvac_auto: HvacAutoRequestGauges,
home: Gauge, home: Gauge,
sentry_mode: Gauge,
sentry_mode_available: Gauge,
} }
impl Metrics { impl Metrics {
@ -88,6 +90,10 @@ impl Metrics {
let hvac_auto = HvacAutoRequestGauges::new(); let hvac_auto = HvacAutoRequestGauges::new();
describe_gauge!("tesla_home", "Is home"); describe_gauge!("tesla_home", "Is home");
let home = gauge!("tesla_home"); let home = gauge!("tesla_home");
describe_gauge!("tesla_sentry_mode", "Sentry mode");
let sentry_mode = gauge!("tesla_sentry_mode");
describe_gauge!("tesla_sentry_mode_available", "Sentry mode available");
let sentry_mode_available = gauge!("tesla_sentry_mode_available");
Self { Self {
battery_level, battery_level,
@ -109,6 +115,8 @@ impl Metrics {
cabin_overheat_protection, cabin_overheat_protection,
hvac_auto, hvac_auto,
home, home,
sentry_mode,
sentry_mode_available,
} }
} }
} }
@ -459,6 +467,15 @@ impl TeslaInterface {
state.climate_state = Some(new_climate_state); state.climate_state = Some(new_climate_state);
} }
if let Some(new_vehicle_state) = new_state.vehicle_state {
self.metrics
.sentry_mode
.set(obf(new_vehicle_state.sentry_mode));
self.metrics
.sentry_mode_available
.set(obf(new_vehicle_state.sentry_mode_available));
state.vehicle_state = Some(new_vehicle_state);
}
} }
Err(e) => { Err(e) => {
self.metrics.tesla_online.set(0.); self.metrics.tesla_online.set(0.);
@ -518,6 +535,16 @@ impl TeslaInterface {
v.into() v.into()
}); });
let vehicle_state = self
.api
.vehicle_data(&GetVehicleData {
vehicle_id: self.vehicle.id,
endpoints: vec![Endpoint::VehicleState].into(),
})
.await?
.vehicle_state
.map(|v| v.into());
let (location_data, _) = self let (location_data, _) = self
.api .api
.vehicle_data(&GetVehicleData { .vehicle_data(&GetVehicleData {
@ -555,6 +582,7 @@ impl TeslaInterface {
charge_state, charge_state,
location_data, location_data,
climate_state, climate_state,
vehicle_state,
}) })
} }
} }
@ -566,3 +594,7 @@ fn bf(value: bool) -> f64 {
0.0 0.0
} }
} }
fn obf(value: Option<bool>) -> f64 {
value.map_or(-1., bf)
}

View file

@ -9,6 +9,7 @@ pub struct CarState {
pub charge_state: Option<ChargeState>, pub charge_state: Option<ChargeState>,
pub location_data: Option<LocationData>, pub location_data: Option<LocationData>,
pub climate_state: Option<ClimateState>, pub climate_state: Option<ClimateState>,
pub vehicle_state: Option<VehicleState>,
} }
impl CarState { impl CarState {
@ -19,6 +20,21 @@ impl CarState {
} }
} }
#[derive(Clone, Copy, Serialize, Deserialize, Debug)]
pub struct VehicleState {
pub sentry_mode: Option<bool>,
pub sentry_mode_available: Option<bool>,
}
impl From<teslatte::vehicles::VehicleState> for VehicleState {
fn from(value: teslatte::vehicles::VehicleState) -> Self {
Self {
sentry_mode: value.sentry_mode,
sentry_mode_available: value.sentry_mode_available,
}
}
}
#[derive(Clone, Copy, Serialize, Deserialize, Debug)] #[derive(Clone, Copy, Serialize, Deserialize, Debug)]
pub struct ClimateState { pub struct ClimateState {
pub inside_temp: f64, pub inside_temp: f64,