Skip to content

Commit acb45be

Browse files
authored
Merge pull request #507 from felipediel/0.16.1
0.16.1
2 parents b3542a8 + ebbdcb4 commit acb45be

File tree

11 files changed

+490
-406
lines changed

11 files changed

+490
-406
lines changed

.github/workflows/flake8.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Python flake8
2+
3+
on:
4+
push:
5+
branches: [ main, master, dev, development ]
6+
pull_request:
7+
branches: [ main, master, dev, development ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: [3.6, 3.7, 3.8, 3.9]
15+
steps:
16+
- uses: actions/checkout@v2
17+
- name: Set up Python ${{ matrix.python-version }}
18+
uses: actions/setup-python@v2
19+
with:
20+
python-version: ${{ matrix.python-version }}
21+
- name: Install dependencies
22+
run: |
23+
python -m pip install --upgrade pip
24+
pip install flake8 wemake-python-styleguide
25+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
26+
- name: Lint with flake8
27+
run: |
28+
# stop the build if there are Python syntax errors or undefined names
29+
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
30+
# exit-zero treats all errors as warnings. ignore magic numbers and use double quotes and ignore numbers with zeroes before them.
31+
# and ignore lowercase hex numbers and ignore isort incorrect imports
32+
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=90 --ignore=WPS432,WPS339,WPS341,I --inline-quotes double --statistics

broadlink/__init__.py

Lines changed: 86 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -20,88 +20,103 @@
2020
0x2716: (sp2, "NEO PRO", "Ankuoo"),
2121
0x2717: (sp2, "NEO", "Ankuoo"),
2222
0x2719: (sp2, "SP2-compatible", "Honeywell"),
23-
0x271a: (sp2, "SP2-compatible", "Honeywell"),
23+
0x271A: (sp2, "SP2-compatible", "Honeywell"),
24+
0x271D: (sp2, "Ego", "Efergy"),
2425
0x2720: (sp2, "SP mini", "Broadlink"),
2526
0x2728: (sp2, "SP2-compatible", "URANT"),
2627
0x2733: (sp2, "SP3", "Broadlink"),
2728
0x2736: (sp2, "SP mini+", "Broadlink"),
28-
0x273e: (sp2, "SP mini", "Broadlink"),
29+
0x273E: (sp2, "SP mini", "Broadlink"),
2930
0x7530: (sp2, "SP2", "Broadlink (OEM)"),
3031
0x7539: (sp2, "SP2-IL", "Broadlink (OEM)"),
31-
0x753e: (sp2, "SP mini 3", "Broadlink"),
32+
0x753E: (sp2, "SP mini 3", "Broadlink"),
3233
0x7540: (sp2, "MP2", "Broadlink"),
33-
0X7544: (sp2, "SP2-CL", "Broadlink"),
34+
0x7544: (sp2, "SP2-CL", "Broadlink"),
3435
0x7546: (sp2, "SP2-UK/BR/IN", "Broadlink (OEM)"),
3536
0x7547: (sp2, "SC1", "Broadlink"),
3637
0x7918: (sp2, "SP2", "Broadlink (OEM)"),
3738
0x7919: (sp2, "SP2-compatible", "Honeywell"),
38-
0x791a: (sp2, "SP2-compatible", "Honeywell"),
39-
0x7d00: (sp2, "SP3-EU", "Broadlink (OEM)"),
40-
0x7d0d: (sp2, "SP mini 3", "Broadlink (OEM)"),
39+
0x791A: (sp2, "SP2-compatible", "Honeywell"),
40+
0x7D00: (sp2, "SP3-EU", "Broadlink (OEM)"),
41+
0x7D0D: (sp2, "SP mini 3", "Broadlink (OEM)"),
4142
0x9479: (sp2, "SP3S-US", "Broadlink"),
42-
0x947a: (sp2, "SP3S-EU", "Broadlink"),
43-
0x756c: (sp4, "SP4M", "Broadlink"),
43+
0x947A: (sp2, "SP3S-EU", "Broadlink"),
44+
0x756C: (sp4, "SP4M", "Broadlink"),
45+
0x756F: (sp4, "MCB1", "Broadlink"),
4446
0x7579: (sp4, "SP4L-EU", "Broadlink"),
4547
0x7583: (sp4, "SP mini 3", "Broadlink"),
46-
0x7d11: (sp4, "SP mini 3", "Broadlink"),
47-
0x648b: (sp4b, "SP4M-US", "Broadlink"),
48+
0x7D11: (sp4, "SP mini 3", "Broadlink"),
49+
0xA56A: (sp4, "MCB1", "Broadlink"),
50+
0xA589: (sp4, "SP4L-UK", "Broadlink"),
51+
0x5115: (sp4b, "SCB1E", "Broadlink"),
52+
0x51E2: (sp4b, "AHC/U-01", "BG Electrical"),
53+
0x6111: (sp4b, "MCB1", "Broadlink"),
54+
0x6113: (sp4b, "SCB1E", "Broadlink"),
55+
0x618B: (sp4b, "SP4L-EU", "Broadlink"),
56+
0x6489: (sp4b, "SP4L-AU", "Broadlink"),
57+
0x648B: (sp4b, "SP4M-US", "Broadlink"),
4858
0x2712: (rm, "RM pro/pro+", "Broadlink"),
49-
0x272a: (rm, "RM pro", "Broadlink"),
59+
0x272A: (rm, "RM pro", "Broadlink"),
5060
0x2737: (rm, "RM mini 3", "Broadlink"),
51-
0x273d: (rm, "RM pro", "Broadlink"),
52-
0x277c: (rm, "RM home", "Broadlink"),
61+
0x273D: (rm, "RM pro", "Broadlink"),
62+
0x277C: (rm, "RM home", "Broadlink"),
5363
0x2783: (rm, "RM home", "Broadlink"),
5464
0x2787: (rm, "RM pro", "Broadlink"),
55-
0x278b: (rm, "RM plus", "Broadlink"),
56-
0x278f: (rm, "RM mini", "Broadlink"),
65+
0x278B: (rm, "RM plus", "Broadlink"),
66+
0x278F: (rm, "RM mini", "Broadlink"),
5767
0x2797: (rm, "RM pro+", "Broadlink"),
58-
0x279d: (rm, "RM pro+", "Broadlink"),
59-
0x27a1: (rm, "RM plus", "Broadlink"),
60-
0x27a6: (rm, "RM plus", "Broadlink"),
61-
0x27a9: (rm, "RM pro+", "Broadlink"),
62-
0x27c2: (rm, "RM mini 3", "Broadlink"),
63-
0x27c3: (rm, "RM pro+", "Broadlink"),
64-
0x27c7: (rm, "RM mini 3", "Broadlink"),
65-
0x27cc: (rm, "RM mini 3", "Broadlink"),
66-
0x27cd: (rm, "RM mini 3", "Broadlink"),
67-
0x27d0: (rm, "RM mini 3", "Broadlink"),
68-
0x27d1: (rm, "RM mini 3", "Broadlink"),
69-
0x27de: (rm, "RM mini 3", "Broadlink"),
70-
0x51da: (rm4, "RM4 mini", "Broadlink"),
71-
0x5f36: (rm4, "RM mini 3", "Broadlink"),
68+
0x279D: (rm, "RM pro+", "Broadlink"),
69+
0x27A1: (rm, "RM plus", "Broadlink"),
70+
0x27A6: (rm, "RM plus", "Broadlink"),
71+
0x27A9: (rm, "RM pro+", "Broadlink"),
72+
0x27C2: (rm, "RM mini 3", "Broadlink"),
73+
0x27C3: (rm, "RM pro+", "Broadlink"),
74+
0x27C7: (rm, "RM mini 3", "Broadlink"),
75+
0x27CC: (rm, "RM mini 3", "Broadlink"),
76+
0x27CD: (rm, "RM mini 3", "Broadlink"),
77+
0x27D0: (rm, "RM mini 3", "Broadlink"),
78+
0x27D1: (rm, "RM mini 3", "Broadlink"),
79+
0x27D3: (rm, "RM mini 3", "Broadlink"),
80+
0x27DE: (rm, "RM mini 3", "Broadlink"),
81+
0x51DA: (rm4, "RM4 mini", "Broadlink"),
82+
0x5F36: (rm4, "RM mini 3", "Broadlink"),
7283
0x6026: (rm4, "RM4 pro", "Broadlink"),
7384
0x6070: (rm4, "RM4C mini", "Broadlink"),
74-
0x610e: (rm4, "RM4 mini", "Broadlink"),
75-
0x610f: (rm4, "RM4C mini", "Broadlink"),
76-
0x61a2: (rm4, "RM4 pro", "Broadlink"),
77-
0x62bc: (rm4, "RM4 mini", "Broadlink"),
78-
0x62be: (rm4, "RM4C mini", "Broadlink"),
79-
0x648d: (rm4, "RM4 mini", "Broadlink"),
80-
0x649b: (rm4, "RM4 pro", "Broadlink"),
81-
0x653a: (rm4, "RM4 mini", "Broadlink"),
85+
0x610E: (rm4, "RM4 mini", "Broadlink"),
86+
0x610F: (rm4, "RM4C mini", "Broadlink"),
87+
0x61A2: (rm4, "RM4 pro", "Broadlink"),
88+
0x62BC: (rm4, "RM4 mini", "Broadlink"),
89+
0x62BE: (rm4, "RM4C mini", "Broadlink"),
90+
0x6364: (rm4, "RM4S", "Broadlink"),
91+
0x648D: (rm4, "RM4 mini", "Broadlink"),
92+
0x649B: (rm4, "RM4 pro", "Broadlink"),
93+
0x6508: (rm4, "RM mini 3", "Broadlink"),
94+
0x6539: (rm4, "RM4C mini", "Broadlink"),
95+
0x653A: (rm4, "RM4 mini", "Broadlink"),
96+
0x653C: (rm4, "RM4 pro", "Broadlink"),
8297
0x2714: (a1, "e-Sensor", "Broadlink"),
83-
0x4eb5: (mp1, "MP1-1K4S", "Broadlink"),
84-
0x4ef7: (mp1, "MP1-1K4S", "Broadlink (OEM)"),
85-
0x4f1b: (mp1, "MP1-1K3S2U", "Broadlink (OEM)"),
86-
0x4f65: (mp1, "MP1-1K3S2U", "Broadlink"),
98+
0x4EB5: (mp1, "MP1-1K4S", "Broadlink"),
99+
0x4EF7: (mp1, "MP1-1K4S", "Broadlink (OEM)"),
100+
0x4F1B: (mp1, "MP1-1K3S2U", "Broadlink (OEM)"),
101+
0x4F65: (mp1, "MP1-1K3S2U", "Broadlink"),
87102
0x5043: (lb1, "SB800TD", "Broadlink (OEM)"),
88-
0x504e: (lb1, "LB1", "Broadlink"),
89-
0x60c7: (lb1, "LB1", "Broadlink"),
90-
0x60c8: (lb1, "LB1", "Broadlink"),
103+
0x504E: (lb1, "LB1", "Broadlink"),
104+
0x60C7: (lb1, "LB1", "Broadlink"),
105+
0x60C8: (lb1, "LB1", "Broadlink"),
91106
0x6112: (lb1, "LB1", "Broadlink"),
92107
0x2722: (S1C, "S2KIT", "Broadlink"),
93-
0x4ead: (hysen, "HY02B05H", "Hysen"),
94-
0x4e4d: (dooya, "DT360E-45/20", "Dooya"),
95-
0x51e3: (bg1, "BG800/BG900", "BG Electrical"),
108+
0x4EAD: (hysen, "HY02B05H", "Hysen"),
109+
0x4E4D: (dooya, "DT360E-45/20", "Dooya"),
110+
0x51E3: (bg1, "BG800/BG900", "BG Electrical"),
96111
}
97112

98113

99114
def gendevice(
100-
dev_type: int,
101-
host: Tuple[str, int],
102-
mac: Union[bytes, str],
103-
name: str = None,
104-
is_locked: bool = None,
115+
dev_type: int,
116+
host: Tuple[str, int],
117+
mac: Union[bytes, str],
118+
name: str = None,
119+
is_locked: bool = None,
105120
) -> device:
106121
"""Generate a device."""
107122
try:
@@ -122,10 +137,10 @@ def gendevice(
122137

123138

124139
def hello(
125-
host: str,
126-
port: int = 80,
127-
timeout: int = 10,
128-
local_ip_address: str = None,
140+
host: str,
141+
port: int = 80,
142+
timeout: int = 10,
143+
local_ip_address: str = None,
129144
) -> device:
130145
"""Direct device discovery.
131146
@@ -138,31 +153,27 @@ def hello(
138153

139154

140155
def discover(
141-
timeout: int = 10,
142-
local_ip_address: str = None,
143-
discover_ip_address: str = '255.255.255.255',
144-
discover_ip_port: int = 80,
156+
timeout: int = 10,
157+
local_ip_address: str = None,
158+
discover_ip_address: str = "255.255.255.255",
159+
discover_ip_port: int = 80,
145160
) -> List[device]:
146161
"""Discover devices connected to the local network."""
147-
responses = scan(
148-
timeout, local_ip_address, discover_ip_address, discover_ip_port
149-
)
162+
responses = scan(timeout, local_ip_address, discover_ip_address, discover_ip_port)
150163
return [gendevice(*resp) for resp in responses]
151164

152165

153166
def xdiscover(
154-
timeout: int = 10,
155-
local_ip_address: str = None,
156-
discover_ip_address: str = '255.255.255.255',
157-
discover_ip_port: int = 80,
167+
timeout: int = 10,
168+
local_ip_address: str = None,
169+
discover_ip_address: str = "255.255.255.255",
170+
discover_ip_port: int = 80,
158171
) -> Generator[device, None, None]:
159172
"""Discover devices connected to the local network.
160173
161174
This function returns a generator that yields devices instantly.
162175
"""
163-
responses = scan(
164-
timeout, local_ip_address, discover_ip_address, discover_ip_port
165-
)
176+
responses = scan(timeout, local_ip_address, discover_ip_address, discover_ip_port)
166177
for resp in responses:
167178
yield gendevice(*resp)
168179

@@ -191,13 +202,12 @@ def setup(ssid: str, password: str, security_mode: int) -> None:
191202
payload[0x85] = pass_length # Character length of password
192203
payload[0x86] = security_mode # Type of encryption
193204

194-
checksum = sum(payload, 0xbeaf) & 0xffff
195-
payload[0x20] = checksum & 0xff # Checksum 1 position
205+
checksum = sum(payload, 0xBEAF) & 0xFFFF
206+
payload[0x20] = checksum & 0xFF # Checksum 1 position
196207
payload[0x21] = checksum >> 8 # Checksum 2 position
197208

198-
sock = socket.socket(socket.AF_INET, # Internet
199-
socket.SOCK_DGRAM) # UDP
209+
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Internet # UDP
200210
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
201211
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
202-
sock.sendto(payload, ('255.255.255.255', 80))
212+
sock.sendto(payload, ("255.255.255.255", 80))
203213
sock.close()

broadlink/alarm.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,42 @@ class S1C(device):
77
"""Controls a Broadlink S1C."""
88

99
_SENSORS_TYPES = {
10-
0x31: 'Door Sensor', # 49 as hex
11-
0x91: 'Key Fob', # 145 as hex, as serial on fob corpse
12-
0x21: 'Motion Sensor' # 33 as hex
10+
0x31: "Door Sensor", # 49 as hex
11+
0x91: "Key Fob", # 145 as hex, as serial on fob corpse
12+
0x21: "Motion Sensor", # 33 as hex
1313
}
1414

1515
def __init__(self, *args, **kwargs) -> None:
1616
"""Initialize the controller."""
1717
device.__init__(self, *args, **kwargs)
18-
self.type = 'S1C'
18+
self.type = "S1C"
1919

2020
def get_sensors_status(self) -> dict:
2121
"""Return the state of the sensors."""
2222
packet = bytearray(16)
2323
packet[0] = 0x06 # 0x06 - get sensors info, 0x07 - probably add sensors
24-
response = self.send_packet(0x6a, packet)
24+
response = self.send_packet(0x6A, packet)
2525
check_error(response[0x22:0x24])
2626
payload = self.decrypt(response[0x38:])
2727
if not payload:
2828
return None
2929
count = payload[0x4]
3030
sensor_data = payload[0x6:]
3131
sensors = [
32-
bytearray(sensor_data[i * 83:(i + 1) * 83])
32+
bytearray(sensor_data[i * 83 : (i + 1) * 83])
3333
for i in range(len(sensor_data) // 83)
3434
]
3535
return {
36-
'count': count,
37-
'sensors': [
36+
"count": count,
37+
"sensors": [
3838
{
39-
'status': sensor[0],
40-
'name': sensor[4:26].decode().strip('\x00'),
41-
'type': self._SENSORS_TYPES.get(sensor[3], 'Unknown'),
42-
'order': sensor[1],
43-
'serial': sensor[26:30].hex(),
39+
"status": sensor[0],
40+
"name": sensor[4:26].decode().strip("\x00"),
41+
"type": self._SENSORS_TYPES.get(sensor[3], "Unknown"),
42+
"order": sensor[1],
43+
"serial": sensor[26:30].hex(),
4444
}
4545
for sensor in sensors
4646
if any(sensor[26:30])
47-
]
47+
],
4848
}

0 commit comments

Comments
 (0)