Switch light colormode to be bitfields instead of enums (#95)
This commit is contained in:
parent
b5047689c7
commit
6f131f4bf6
|
@ -356,18 +356,6 @@ message FanCommandRequest {
|
|||
}
|
||||
|
||||
// ==================== LIGHT ====================
|
||||
enum ColorMode {
|
||||
COLOR_MODE_UNKNOWN = 0;
|
||||
COLOR_MODE_ON_OFF = 1;
|
||||
COLOR_MODE_BRIGHTNESS = 2;
|
||||
COLOR_MODE_WHITE = 7;
|
||||
COLOR_MODE_COLOR_TEMPERATURE = 11;
|
||||
COLOR_MODE_COLD_WARM_WHITE = 19;
|
||||
COLOR_MODE_RGB = 35;
|
||||
COLOR_MODE_RGB_WHITE = 39;
|
||||
COLOR_MODE_RGB_COLOR_TEMPERATURE = 47;
|
||||
COLOR_MODE_RGB_COLD_WARM_WHITE = 51;
|
||||
}
|
||||
message ListEntitiesLightResponse {
|
||||
option (id) = 15;
|
||||
option (source) = SOURCE_SERVER;
|
||||
|
@ -378,7 +366,7 @@ message ListEntitiesLightResponse {
|
|||
string name = 3;
|
||||
string unique_id = 4;
|
||||
|
||||
repeated ColorMode supported_color_modes = 12;
|
||||
repeated int32 supported_color_modes = 12;
|
||||
// next four supports_* are for legacy clients, newer clients should use color modes
|
||||
bool legacy_supports_brightness = 5 [deprecated=true];
|
||||
bool legacy_supports_rgb = 6 [deprecated=true];
|
||||
|
@ -398,7 +386,7 @@ message LightStateResponse {
|
|||
fixed32 key = 1;
|
||||
bool state = 2;
|
||||
float brightness = 3;
|
||||
ColorMode color_mode = 11;
|
||||
int32 color_mode = 11;
|
||||
float color_brightness = 10;
|
||||
float red = 4;
|
||||
float green = 5;
|
||||
|
@ -421,7 +409,7 @@ message LightCommandRequest {
|
|||
bool has_brightness = 4;
|
||||
float brightness = 5;
|
||||
bool has_color_mode = 22;
|
||||
ColorMode color_mode = 23;
|
||||
int32 color_mode = 23;
|
||||
bool has_color_brightness = 20;
|
||||
float color_brightness = 21;
|
||||
bool has_rgb = 6;
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -88,7 +88,6 @@ from .model import (
|
|||
FanState,
|
||||
HomeassistantServiceCall,
|
||||
LegacyCoverCommand,
|
||||
LightColorMode,
|
||||
LightInfo,
|
||||
LightState,
|
||||
LogLevel,
|
||||
|
@ -431,7 +430,7 @@ class APIClient:
|
|||
key: int,
|
||||
state: Optional[bool] = None,
|
||||
brightness: Optional[float] = None,
|
||||
color_mode: Optional[LightColorMode] = None,
|
||||
color_mode: Optional[int] = None,
|
||||
color_brightness: Optional[float] = None,
|
||||
rgb: Optional[Tuple[float, float, float]] = None,
|
||||
white: Optional[float] = None,
|
||||
|
|
|
@ -210,23 +210,19 @@ class FanState(EntityState):
|
|||
|
||||
|
||||
# ==================== LIGHT ====================
|
||||
class LightColorMode(APIIntEnum):
|
||||
UNKNOWN = 0
|
||||
ON_OFF = 1
|
||||
BRIGHTNESS = 2
|
||||
WHITE = 7
|
||||
COLOR_TEMPERATURE = 11
|
||||
COLD_WARM_WHITE = 19
|
||||
RGB = 35
|
||||
RGB_WHITE = 39
|
||||
RGB_COLOR_TEMPERATURE = 47
|
||||
RGB_COLD_WARM_WHITE = 51
|
||||
class LightColorCapability(enum.IntFlag):
|
||||
ON_OFF = 1 << 0
|
||||
BRIGHTNESS = 1 << 1
|
||||
WHITE = 1 << 2
|
||||
COLOR_TEMPERATURE = 1 << 3
|
||||
COLD_WARM_WHITE = 1 << 4
|
||||
RGB = 1 << 5
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class LightInfo(EntityInfo):
|
||||
supported_color_modes: List[LightColorMode] = converter_field(
|
||||
default_factory=list, converter=LightColorMode.convert_list
|
||||
supported_color_modes: List[int] = converter_field(
|
||||
default_factory=list, converter=list
|
||||
)
|
||||
min_mireds: float = 0.0
|
||||
max_mireds: float = 0.0
|
||||
|
@ -238,9 +234,7 @@ class LightInfo(EntityInfo):
|
|||
legacy_supports_white_value: bool = False
|
||||
legacy_supports_color_temperature: bool = False
|
||||
|
||||
def supported_color_modes_compat(
|
||||
self, api_version: APIVersion
|
||||
) -> List[LightColorMode]:
|
||||
def supported_color_modes_compat(self, api_version: APIVersion) -> List[int]:
|
||||
if api_version < APIVersion(1, 6):
|
||||
key = (
|
||||
self.legacy_supports_brightness,
|
||||
|
@ -251,16 +245,42 @@ class LightInfo(EntityInfo):
|
|||
# map legacy flags to color modes,
|
||||
# key: (brightness, rgb, white, color_temp)
|
||||
modes_map = {
|
||||
(False, False, False, False): [LightColorMode.ON_OFF],
|
||||
(True, False, False, False): [LightColorMode.BRIGHTNESS],
|
||||
(True, False, False, True): [LightColorMode.COLOR_TEMPERATURE],
|
||||
(True, True, False, False): [LightColorMode.RGB],
|
||||
(True, True, True, False): [LightColorMode.RGB_WHITE],
|
||||
(True, True, False, True): [LightColorMode.RGB_COLOR_TEMPERATURE],
|
||||
(True, True, True, True): [LightColorMode.RGB_COLOR_TEMPERATURE],
|
||||
(False, False, False, False): [LightColorCapability.ON_OFF],
|
||||
(True, False, False, False): [
|
||||
LightColorCapability.ON_OFF | LightColorCapability.BRIGHTNESS
|
||||
],
|
||||
(True, False, False, True): [
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
],
|
||||
(True, True, False, False): [
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.RGB
|
||||
],
|
||||
(True, True, True, False): [
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
],
|
||||
(True, True, False, True): [
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.RGB
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
],
|
||||
(True, True, True, True): [
|
||||
LightColorCapability.ON_OFF
|
||||
| LightColorCapability.BRIGHTNESS
|
||||
| LightColorCapability.RGB
|
||||
| LightColorCapability.WHITE
|
||||
| LightColorCapability.COLOR_TEMPERATURE
|
||||
],
|
||||
}
|
||||
|
||||
return modes_map[key] if key in modes_map else []
|
||||
return cast(List[int], modes_map[key]) if key in modes_map else []
|
||||
|
||||
return self.supported_color_modes
|
||||
|
||||
|
@ -269,9 +289,7 @@ class LightInfo(EntityInfo):
|
|||
class LightState(EntityState):
|
||||
state: bool = False
|
||||
brightness: float = 0.0
|
||||
color_mode: Optional[LightColorMode] = converter_field(
|
||||
default=LightColorMode.UNKNOWN, converter=LightColorMode.convert
|
||||
)
|
||||
color_mode: int = 0
|
||||
color_brightness: float = 0.0
|
||||
red: float = 0.0
|
||||
green: float = 0.0
|
||||
|
|
Loading…
Reference in New Issue