feat(driver-kasa): support color temperature

This commit is contained in:
2026-07-08 14:10:50 -04:00
parent fde59d05ab
commit e42397e072
2 changed files with 36 additions and 8 deletions

View File

@@ -1,14 +1,14 @@
use std::convert::Infallible;
use palette::{encoding::Srgb, Hsv, IntoColor};
use protocol::light::{GetState, Kelvin, SetState, TurnToColor, TurnToTemperature};
use protocol::light::{GetState, SetState, TurnToColor, TurnToTemperature};
use snafu::{ResultExt, Snafu};
use crate::{
connection::{HandleError, LB130USHandle},
messages::{
Angle, Hsb, LightState, Off, On, Percentage, SetLightHsv, SetLightLastOn, SetLightOff,
SetLightStateArgs, SetLightTo,
Angle, Hsb, LightState, Off, On, Percentage, SetLightHsv, SetLightKelvin, SetLightLastOn,
SetLightOff, SetLightStateArgs, SetLightTo,
},
};
@@ -64,11 +64,33 @@ impl SetState for LB130USHandle {
}
}
impl TurnToTemperature for LB130USHandle {
type Error = Infallible; // TODO
#[derive(Debug, Snafu)]
#[snafu(module)]
pub enum TurnToTemperatureError {
HandleError { source: HandleError },
}
async fn turn_to_temperature(&mut self, temperature: Kelvin) -> Result<(), Self::Error> {
todo!()
impl TurnToTemperature for LB130USHandle {
type Error = TurnToTemperatureError;
async fn turn_to_temperature(
&mut self,
temperature: protocol::light::Kelvin,
) -> Result<(), Self::Error> {
// TODO: re-evaluate saturating
let color_temp = crate::messages::Kelvin::new_saturating(temperature.get());
self.set_light_state(SetLightStateArgs {
to: SetLightTo::Kelvin(SetLightKelvin {
on_off: On,
color_temp,
}),
transition: None,
})
.await
.context(turn_to_temperature_error::HandleSnafu)?;
Ok(())
}
}

View File

@@ -388,13 +388,19 @@ pub struct SetLightHsv {
pub hsb: Hsb,
}
#[derive(Debug, Clone, Serialize)]
pub struct SetLightKelvin {
pub on_off: On,
pub color_temp: Kelvin,
}
#[derive(Debug, Clone, Serialize)]
#[serde(untagged)]
pub enum SetLightTo {
Off(SetLightOff),
LastOn(SetLightLastOn),
Hsv(SetLightHsv),
// TODO: kelvin
Kelvin(SetLightKelvin),
}
#[derive(Debug, Clone, derive_more::From)]