Midea/midea_ac_lan/midea/devices/x13/message.py
2023-09-22 07:45:40 +02:00

94 lines
2.8 KiB
Python

from ...core.message import (
MessageType,
MessageRequest,
MessageResponse,
MessageBody
)
class Message13Base(MessageRequest):
def __init__(self, device_protocol_version, message_type, body_type):
super().__init__(
device_protocol_version=device_protocol_version,
device_type=0x13,
message_type=message_type,
body_type=body_type
)
@property
def _body(self):
raise NotImplementedError
class MessageQuery(Message13Base):
def __init__(self, device_protocol_version):
super().__init__(
device_protocol_version=device_protocol_version,
message_type=MessageType.query,
body_type=0x24)
@property
def _body(self):
return bytearray([
0x00, 0x00, 0x00, 0x00
])
class MessageSet(Message13Base):
def __init__(self, device_protocol_version):
super().__init__(
device_protocol_version=device_protocol_version,
message_type=MessageType.set,
body_type=0x00)
self.brightness = None
self.color_temperature = None
self.effect = None
self.power = None
@property
def _body(self):
body_byte = 0x00
if self.power is not None:
self.body_type = 0x01
body_byte = 0x01 if self.power else 0x00
elif self.effect is not None and self.effect in range(1, 6):
self.body_type = 0x02
body_byte = self.effect + 1
elif self.color_temperature is not None:
self.body_type = 0x03
body_byte = self.color_temperature
elif self.brightness is not None:
self.body_type = 0x04
body_byte = self.brightness
return bytearray([body_byte, 0x00, 0x00, 0x00])
class MessageMainLightBody(MessageBody):
def __init__(self, body):
super().__init__(body)
self.brightness = self.read_byte(body, 1)
self.color_temperature = self.read_byte(body, 2)
self.effect = self.read_byte(body, 3) - 1
if self.effect > 5:
self.effect = 1
'''
self.rgb_color = [self.read_byte(body, 5),
self.read_byte(body, 6),
self.read_byte(body, 7)]
'''
self.power = self.read_byte(body, 8) > 0
class MessageMainLightResponseBody(MessageBody):
def __init__(self, body):
super().__init__(body)
self.control_success = body[1] > 0
class Message13Response(MessageResponse):
def __init__(self, message):
super().__init__(message)
if self.body_type == 0xa4:
self.set_body(MessageMainLightBody(super().body))
elif self.message_type == MessageType.set and self.body_type > 0x80:
self.set_body(MessageMainLightResponseBody(super().body))
self.set_attr()