95 lines
2.8 KiB
Python
95 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()
|
||
|
|