101 lines
3.6 KiB
Python
101 lines
3.6 KiB
Python
|
from ...core.message import (
|
||
|
MessageType,
|
||
|
MessageRequest,
|
||
|
MessageResponse,
|
||
|
MessageBody,
|
||
|
)
|
||
|
|
||
|
|
||
|
class MessageECBase(MessageRequest):
|
||
|
def __init__(self, device_protocol_version, message_type, body_type):
|
||
|
super().__init__(
|
||
|
device_protocol_version=device_protocol_version,
|
||
|
device_type=0xEA,
|
||
|
message_type=message_type,
|
||
|
body_type=body_type
|
||
|
)
|
||
|
|
||
|
@property
|
||
|
def _body(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
|
||
|
class MessageQuery(MessageECBase):
|
||
|
def __init__(self, device_protocol_version):
|
||
|
super().__init__(
|
||
|
device_protocol_version=device_protocol_version,
|
||
|
message_type=MessageType.query,
|
||
|
body_type=None)
|
||
|
|
||
|
@property
|
||
|
def body(self):
|
||
|
return bytearray([
|
||
|
0xAA, 0x55, self._device_protocol_version, 0x03, 0x00
|
||
|
])
|
||
|
|
||
|
@property
|
||
|
def _body(self):
|
||
|
return bytearray([])
|
||
|
|
||
|
|
||
|
class EABody1(MessageBody):
|
||
|
def __init__(self, body):
|
||
|
super().__init__(body)
|
||
|
self.mode = body[6] + (body[7] << 8)
|
||
|
self.progress = body[14]
|
||
|
self.cooking = self.progress == 2
|
||
|
self.keep_warm = self.progress == 3
|
||
|
self.top_temperature = body[18]
|
||
|
self.bottom_temperature = body[19]
|
||
|
self.time_remaining = body[22] * 60 + body[23]
|
||
|
self.keep_warm_time = body[26] * 60 + body[27]
|
||
|
|
||
|
|
||
|
class EABody2(MessageBody):
|
||
|
def __init__(self, body):
|
||
|
super().__init__(body)
|
||
|
self.progress = body[9]
|
||
|
self.cooking = self.progress == 2
|
||
|
self.keep_warm = self.progress == 3
|
||
|
self.mode = body[58] + (body[59] << 8)
|
||
|
self.time_remaining = body[50] * 60 + body[51]
|
||
|
self.keep_warm_time = body[54] * 60 + body[55]
|
||
|
self.top_temperature = body[21]
|
||
|
self.bottom_temperature = body[20]
|
||
|
|
||
|
|
||
|
class EABody3(MessageBody):
|
||
|
def __init__(self, body):
|
||
|
super().__init__(body)
|
||
|
self.mode = body[4] + (body[5] << 8)
|
||
|
self.progress = body[8]
|
||
|
self.cooking = self.progress == 2
|
||
|
self.keep_warm = self.progress == 3
|
||
|
self.time_remaining = body[12] * 60 + body[13]
|
||
|
self.top_temperature = body[20]
|
||
|
self.bottom_temperature = body[21]
|
||
|
self.keep_warm_time = body[22] * 60 + body[23]
|
||
|
|
||
|
|
||
|
class MessageEAResponse(MessageResponse):
|
||
|
def __init__(self, message):
|
||
|
super().__init__(message)
|
||
|
if self._device_protocol_version == 0:
|
||
|
if self.message_type == MessageType.set and super().body[5] == 0x16: # 381
|
||
|
self.set_body(EABody1(super().body))
|
||
|
elif self.message_type == MessageType.query:
|
||
|
if super().body[6] == 0x52 and super().body[7] == 0xc3: # 404
|
||
|
self.set_body(EABody2(super().body))
|
||
|
elif super().body[5] == 0x3d: # 420
|
||
|
self.set_body(EABody1(super().body))
|
||
|
elif self.message_type == MessageType.notify1 and super().body[5] == 0x3d: # 463
|
||
|
self.set_body(EABody1(super().body))
|
||
|
else:
|
||
|
if(self.message_type == MessageType.set and super().body[3] == 0x02) or \
|
||
|
(self.message_type == MessageType.query and super().body[3] == 0x03) or \
|
||
|
(self.message_type == MessageType.notify1 and super().body[3] == 0x04): # 351
|
||
|
self.set_body(EABody3(super().body))
|
||
|
elif self.message_type == MessageType.notify1 and super().body[3] == 0x06:
|
||
|
self.mode = super().body[4] + (super().body[5] << 8)
|
||
|
self.set_attr()
|