mirror of
https://github.com/mjg59/python-broadlink.git
synced 2024-11-13 03:00:11 +01:00
Allow string mac address in constructor
This commit is contained in:
parent
1d6d8d2aee
commit
77f11c8d49
@ -143,7 +143,7 @@ def discover(timeout=None, local_ip_address=None):
|
|||||||
class device:
|
class device:
|
||||||
def __init__(self, host, mac, devtype, timeout=10):
|
def __init__(self, host, mac, devtype, timeout=10):
|
||||||
self.host = host
|
self.host = host
|
||||||
self.mac = mac
|
self.mac = mac.encode() if isinstance(mac, str) else mac
|
||||||
self.devtype = devtype
|
self.devtype = devtype
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.count = random.randrange(0xffff)
|
self.count = random.randrange(0xffff)
|
||||||
@ -577,19 +577,19 @@ class hysen(device):
|
|||||||
self.type = "Hysen heating controller"
|
self.type = "Hysen heating controller"
|
||||||
|
|
||||||
# Send a request
|
# Send a request
|
||||||
# input_payload should be a bytearray, usually 6 bytes, e.g. bytearray([0x01,0x06,0x00,0x02,0x10,0x00])
|
# input_payload should be a bytearray, usually 6 bytes, e.g. bytearray([0x01,0x06,0x00,0x02,0x10,0x00])
|
||||||
# Returns decrypted payload
|
# Returns decrypted payload
|
||||||
# New behaviour: raises a ValueError if the device response indicates an error or CRC check fails
|
# New behaviour: raises a ValueError if the device response indicates an error or CRC check fails
|
||||||
# The function prepends length (2 bytes) and appends CRC
|
# The function prepends length (2 bytes) and appends CRC
|
||||||
def send_request(self,input_payload):
|
def send_request(self,input_payload):
|
||||||
|
|
||||||
from PyCRC.CRC16 import CRC16
|
from PyCRC.CRC16 import CRC16
|
||||||
crc = CRC16(modbus_flag=True).calculate(bytes(input_payload))
|
crc = CRC16(modbus_flag=True).calculate(bytes(input_payload))
|
||||||
|
|
||||||
# first byte is length, +2 for CRC16
|
# first byte is length, +2 for CRC16
|
||||||
request_payload = bytearray([len(input_payload) + 2,0x00])
|
request_payload = bytearray([len(input_payload) + 2,0x00])
|
||||||
request_payload.extend(input_payload)
|
request_payload.extend(input_payload)
|
||||||
|
|
||||||
# append CRC
|
# append CRC
|
||||||
request_payload.append(crc & 0xFF)
|
request_payload.append(crc & 0xFF)
|
||||||
request_payload.append((crc >> 8) & 0xFF)
|
request_payload.append((crc >> 8) & 0xFF)
|
||||||
@ -599,9 +599,9 @@ class hysen(device):
|
|||||||
|
|
||||||
# check for error
|
# check for error
|
||||||
err = response[0x22] | (response[0x23] << 8)
|
err = response[0x22] | (response[0x23] << 8)
|
||||||
if err:
|
if err:
|
||||||
raise ValueError('broadlink_response_error',err)
|
raise ValueError('broadlink_response_error',err)
|
||||||
|
|
||||||
response_payload = bytearray(self.decrypt(bytes(response[0x38:])))
|
response_payload = bytearray(self.decrypt(bytes(response[0x38:])))
|
||||||
|
|
||||||
# experimental check on CRC in response (first 2 bytes are len, and trailing bytes are crc)
|
# experimental check on CRC in response (first 2 bytes are len, and trailing bytes are crc)
|
||||||
@ -611,9 +611,9 @@ class hysen(device):
|
|||||||
crc = CRC16(modbus_flag=True).calculate(bytes(response_payload[2:response_payload_len]))
|
crc = CRC16(modbus_flag=True).calculate(bytes(response_payload[2:response_payload_len]))
|
||||||
if (response_payload[response_payload_len] == crc & 0xFF) and (response_payload[response_payload_len+1] == (crc >> 8) & 0xFF):
|
if (response_payload[response_payload_len] == crc & 0xFF) and (response_payload[response_payload_len+1] == (crc >> 8) & 0xFF):
|
||||||
return response_payload[2:response_payload_len]
|
return response_payload[2:response_payload_len]
|
||||||
else:
|
else:
|
||||||
raise ValueError('hysen_response_error','CRC check on response failed')
|
raise ValueError('hysen_response_error','CRC check on response failed')
|
||||||
|
|
||||||
|
|
||||||
# Get current room temperature in degrees celsius
|
# Get current room temperature in degrees celsius
|
||||||
def get_temp(self):
|
def get_temp(self):
|
||||||
@ -627,7 +627,7 @@ class hysen(device):
|
|||||||
|
|
||||||
# Get full status (including timer schedule)
|
# Get full status (including timer schedule)
|
||||||
def get_full_status(self):
|
def get_full_status(self):
|
||||||
payload = self.send_request(bytearray([0x01,0x03,0x00,0x00,0x00,0x16]))
|
payload = self.send_request(bytearray([0x01,0x03,0x00,0x00,0x00,0x16]))
|
||||||
data = {}
|
data = {}
|
||||||
data['remote_lock'] = payload[3] & 1
|
data['remote_lock'] = payload[3] & 1
|
||||||
data['power'] = payload[4] & 1
|
data['power'] = payload[4] & 1
|
||||||
@ -653,11 +653,11 @@ class hysen(device):
|
|||||||
data['min'] = payload[20]
|
data['min'] = payload[20]
|
||||||
data['sec'] = payload[21]
|
data['sec'] = payload[21]
|
||||||
data['dayofweek'] = payload[22]
|
data['dayofweek'] = payload[22]
|
||||||
|
|
||||||
weekday = []
|
weekday = []
|
||||||
for i in range(0, 6):
|
for i in range(0, 6):
|
||||||
weekday.append({'start_hour':payload[2*i + 23], 'start_minute':payload[2*i + 24],'temp':payload[i + 39]/2.0})
|
weekday.append({'start_hour':payload[2*i + 23], 'start_minute':payload[2*i + 24],'temp':payload[i + 39]/2.0})
|
||||||
|
|
||||||
data['weekday'] = weekday
|
data['weekday'] = weekday
|
||||||
weekend = []
|
weekend = []
|
||||||
for i in range(6, 8):
|
for i in range(6, 8):
|
||||||
@ -694,7 +694,7 @@ class hysen(device):
|
|||||||
# For backwards compatibility only. Prefer calling set_mode directly. Note this function invokes loop_mode=0 and sensor=0.
|
# For backwards compatibility only. Prefer calling set_mode directly. Note this function invokes loop_mode=0 and sensor=0.
|
||||||
def switch_to_auto(self):
|
def switch_to_auto(self):
|
||||||
self.set_mode(auto_mode=1, loop_mode=0)
|
self.set_mode(auto_mode=1, loop_mode=0)
|
||||||
|
|
||||||
def switch_to_manual(self):
|
def switch_to_manual(self):
|
||||||
self.set_mode(auto_mode=0, loop_mode=0)
|
self.set_mode(auto_mode=0, loop_mode=0)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user