Skip to content

Commit ea4ce70

Browse files
authored
Merge pull request #60 from t0mer/new-devices
Adding new devices
2 parents bcda0b1 + b378c1f commit ea4ce70

File tree

5 files changed

+205
-95
lines changed

5 files changed

+205
-95
lines changed

broadlinkmanager/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.8.3
1+
5.8.4

broadlinkmanager/broadlink/__init__.py

Lines changed: 109 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .alarm import S1C
99
from .climate import hysen
1010
from .cover import dooya
11+
from .hub import s3
1112
from .device import Device, ping, scan
1213
from .light import lb1, lb2
1314
from .remote import rm, rm4, rm4mini, rm4pro, rmmini, rmminib, rmpro
@@ -19,140 +20,155 @@
1920

2021
SUPPORTED_TYPES = {
2122
sp1: {
22-
0x0000: ("SP1", broadlink),
23+
0x0000: ("SP1", "Broadlink"),
2324
},
2425
sp2: {
2526
0x2717: ("NEO", "Ankuoo"),
2627
0x2719: ("SP2-compatible", "Honeywell"),
2728
0x271A: ("SP2-compatible", "Honeywell"),
28-
0x2720: ("SP mini", broadlink),
29+
0x2720: ("SP mini", "Broadlink"),
2930
0x2728: ("SP2-compatible", "URANT"),
30-
0x273E: ("SP mini", broadlink),
31-
0x7530: ("SP2", broadlink_oem),
32-
0x7539: ("SP2-IL",broadlink_oem),
33-
0x753E: ("SP mini 3", broadlink),
34-
0x7540: ("MP2", broadlink),
35-
0x7544: ("SP2-CL", broadlink),
36-
0x7546: ("SP2-UK/BR/IN", broadlink_oem),
37-
0x7547: ("SC1", broadlink),
38-
0x7918: ("SP2", broadlink_oem),
31+
0x273E: ("SP mini", "Broadlink"),
32+
0x7530: ("SP2", "Broadlink (OEM)"),
33+
0x7539: ("SP2-IL", "Broadlink (OEM)"),
34+
0x753E: ("SP mini 3", "Broadlink"),
35+
0x7540: ("MP2", "Broadlink"),
36+
0x7544: ("SP2-CL", "Broadlink"),
37+
0x7546: ("SP2-UK/BR/IN", "Broadlink (OEM)"),
38+
0x7547: ("SC1", "Broadlink"),
39+
0x7918: ("SP2", "Broadlink (OEM)"),
3940
0x7919: ("SP2-compatible", "Honeywell"),
4041
0x791A: ("SP2-compatible", "Honeywell"),
41-
0x7D0D: ("SP mini 3", broadlink_oem),
42+
0x7D0D: ("SP mini 3", "Broadlink (OEM)"),
4243
},
4344
sp2s: {
44-
0x2711: ("SP2", broadlink),
45+
0x2711: ("SP2", "Broadlink"),
4546
0x2716: ("NEO PRO", "Ankuoo"),
4647
0x271D: ("Ego", "Efergy"),
47-
0x2736: ("SP mini+", broadlink),
48+
0x2736: ("SP mini+", "Broadlink"),
4849
},
4950
sp3: {
50-
0x2733: ("SP3", broadlink),
51-
0x7D00: ("SP3-EU", broadlink_oem),
51+
0x2733: ("SP3", "Broadlink"),
52+
0x7D00: ("SP3-EU", "Broadlink (OEM)"),
5253
},
5354
sp3s: {
54-
0x9479: ("SP3S-US", broadlink),
55-
0x947A: ("SP3S-EU", broadlink),
55+
0x9479: ("SP3S-US", "Broadlink"),
56+
0x947A: ("SP3S-EU", "Broadlink"),
5657
},
5758
sp4: {
58-
0x7568: ("SP4L-CN", broadlink),
59-
0x756C: ("SP4M", broadlink),
60-
0x756F: ("MCB1", broadlink),
61-
0x7579: ("SP4L-EU", broadlink),
62-
0x757B: ("SP4L-AU", broadlink),
63-
0x7583: ("SP mini 3", broadlink),
64-
0x7587: ("SP4L-UK", broadlink),
65-
0x7D11: ("SP mini 3", broadlink),
66-
0xA56A: ("MCB1", broadlink),
67-
0xA56B: ("SCB1E", broadlink),
68-
0xA56C: ("SP4L-EU", broadlink),
69-
0xA589: ("SP4L-UK", broadlink),
70-
0xA5D3: ("SP4L-EU", broadlink),
59+
0x7568: ("SP4L-CN", "Broadlink"),
60+
0x756C: ("SP4M", "Broadlink"),
61+
0x756F: ("MCB1", "Broadlink"),
62+
0x7579: ("SP4L-EU", "Broadlink"),
63+
0x757B: ("SP4L-AU", "Broadlink"),
64+
0x7583: ("SP mini 3", "Broadlink"),
65+
0x7587: ("SP4L-UK", "Broadlink"),
66+
0x7D11: ("SP mini 3", "Broadlink"),
67+
0xA569: ("SP4L-UK", "Broadlink"),
68+
0xA56A: ("MCB1", "Broadlink"),
69+
0xA56B: ("SCB1E", "Broadlink"),
70+
0xA56C: ("SP4L-EU", "Broadlink"),
71+
0xA589: ("SP4L-UK", "Broadlink"),
72+
0xA5D3: ("SP4L-EU", "Broadlink"),
7173
},
7274
sp4b: {
73-
0x5115: ("SCB1E", broadlink),
75+
0x5115: ("SCB1E", "Broadlink"),
7476
0x51E2: ("AHC/U-01", "BG Electrical"),
75-
0x6111: ("MCB1", broadlink),
76-
0x6113: ("SCB1E", broadlink),
77-
0x618B: ("SP4L-EU", broadlink),
78-
0x6489: ("SP4L-AU", broadlink),
79-
0x648B: ("SP4M-US", broadlink),
80-
0x6494: ("SCB2", broadlink),
77+
0x6111: ("MCB1", "Broadlink"),
78+
0x6113: ("SCB1E", "Broadlink"),
79+
0x618B: ("SP4L-EU", "Broadlink"),
80+
0x6489: ("SP4L-AU", "Broadlink"),
81+
0x648B: ("SP4M-US", "Broadlink"),
82+
0x6494: ("SCB2", "Broadlink"),
8183
},
8284
rmmini: {
83-
0x2737: ("RM mini 3", broadlink),
84-
0x278F: ("RM mini", broadlink),
85-
0x27C2: ("RM mini 3", broadlink),
86-
0x27C7: ("RM mini 3", broadlink),
87-
0x27CC: ("RM mini 3", broadlink),
88-
0x27CD: ("RM mini 3", broadlink),
89-
0x27D0: ("RM mini 3", broadlink),
90-
0x27D1: ("RM mini 3", broadlink),
91-
0x27D3: ("RM mini 3", broadlink),
92-
0x27DC: ("RM mini 3", broadlink),
93-
0x27DE: ("RM mini 3", broadlink),
85+
0x2737: ("RM mini 3", "Broadlink"),
86+
0x278F: ("RM mini", "Broadlink"),
87+
0x27C2: ("RM mini 3", "Broadlink"),
88+
0x27C7: ("RM mini 3", "Broadlink"),
89+
0x27CC: ("RM mini 3", "Broadlink"),
90+
0x27CD: ("RM mini 3", "Broadlink"),
91+
0x27D0: ("RM mini 3", "Broadlink"),
92+
0x27D1: ("RM mini 3", "Broadlink"),
93+
0x27D3: ("RM mini 3", "Broadlink"),
94+
0x27DC: ("RM mini 3", "Broadlink"),
95+
0x27DE: ("RM mini 3", "Broadlink"),
9496
},
9597
rmpro: {
96-
0x2712: ("RM pro/pro+", broadlink),
97-
0x272A: ("RM pro", broadlink),
98-
0x273D: ("RM pro", broadlink),
99-
0x277C: ("RM home", broadlink),
100-
0x2783: ("RM home", broadlink),
101-
0x2787: ("RM pro", broadlink),
102-
0x278B: ("RM plus", broadlink),
103-
0x2797: ("RM pro+", broadlink),
104-
0x279D: ("RM pro+", broadlink),
105-
0x27A1: ("RM plus", broadlink),
106-
0x27A6: ("RM plus", broadlink),
107-
0x27A9: ("RM pro+", broadlink),
108-
0x27C3: ("RM pro+", broadlink),
98+
0x2712: ("RM pro/pro+", "Broadlink"),
99+
0x272A: ("RM pro", "Broadlink"),
100+
0x273D: ("RM pro", "Broadlink"),
101+
0x277C: ("RM home", "Broadlink"),
102+
0x2783: ("RM home", "Broadlink"),
103+
0x2787: ("RM pro", "Broadlink"),
104+
0x278B: ("RM plus", "Broadlink"),
105+
0x2797: ("RM pro+", "Broadlink"),
106+
0x279D: ("RM pro+", "Broadlink"),
107+
0x27A1: ("RM plus", "Broadlink"),
108+
0x27A6: ("RM plus", "Broadlink"),
109+
0x27A9: ("RM pro+", "Broadlink"),
110+
0x27C3: ("RM pro+", "Broadlink"),
109111
},
110112
rmminib: {
111-
0x5F36: ("RM mini 3", broadlink),
112-
0x6507: ("RM mini 3", broadlink),
113-
0x6508: ("RM mini 3", broadlink),
113+
0x5F36: ("RM mini 3", "Broadlink"),
114+
0x6507: ("RM mini 3", "Broadlink"),
115+
0x6508: ("RM mini 3", "Broadlink"),
114116
},
115117
rm4mini: {
116-
0x51DA: ("RM4 mini", broadlink),
117-
0x6070: ("RM4C mini", broadlink),
118-
0x610E: ("RM4 mini", broadlink),
119-
0x610F: ("RM4C mini", broadlink),
120-
0x62BC: ("RM4 mini", broadlink),
121-
0x62BE: ("RM4C mini", broadlink),
122-
0x6364: ("RM4S", broadlink),
123-
0x648D: ("RM4 mini", broadlink),
124-
0x6539: ("RM4C mini", broadlink),
125-
0x653A: ("RM4 mini", broadlink),
118+
0x51DA: ("RM4 mini", "Broadlink"),
119+
0x5209: ("RM4 TV mate", "Broadlink"),
120+
0x520C: ("RM4 mini", "Broadlink"),
121+
0x5212: ("RM4 TV mate", "Broadlink"),
122+
0x5216: ("RM4 mini", "Broadlink"),
123+
0x6070: ("RM4C mini", "Broadlink"),
124+
0x610E: ("RM4 mini", "Broadlink"),
125+
0x610F: ("RM4C mini", "Broadlink"),
126+
0x62BC: ("RM4 mini", "Broadlink"),
127+
0x62BE: ("RM4C mini", "Broadlink"),
128+
0x6364: ("RM4S", "Broadlink"),
129+
0x648D: ("RM4 mini", "Broadlink"),
130+
0x6539: ("RM4C mini", "Broadlink"),
131+
0x653A: ("RM4 mini", "Broadlink"),
126132
},
127133
rm4pro: {
128-
0x6026: ("RM4 pro", broadlink),
129-
0x6184: ("RM4C pro", broadlink),
130-
0x61A2: ("RM4 pro", broadlink),
131-
0x649B: ("RM4 pro", broadlink),
132-
0x653C: ("RM4 pro", broadlink),
134+
0x520B: ("RM4 pro", "Broadlink"),
135+
0x5213: ("RM4 pro", "Broadlink"),
136+
0x5218: ("RM4C pro", "Broadlink"),
137+
0x6026: ("RM4 pro", "Broadlink"),
138+
0x6184: ("RM4C pro", "Broadlink"),
139+
0x61A2: ("RM4 pro", "Broadlink"),
140+
0x649B: ("RM4 pro", "Broadlink"),
141+
0x653C: ("RM4 pro", "Broadlink"),
133142
},
134143
a1: {
135-
0x2714: ("e-Sensor", broadlink),
144+
0x2714: ("e-Sensor", "Broadlink"),
136145
},
137146
mp1: {
138-
0x4EB5: ("MP1-1K4S", broadlink),
139-
0x4EF7: ("MP1-1K4S", broadlink_oem),
140-
0x4F1B: ("MP1-1K3S2U", broadlink_oem),
141-
0x4F65: ("MP1-1K3S2U", broadlink),
147+
0x4EB5: ("MP1-1K4S", "Broadlink"),
148+
0x4EF7: ("MP1-1K4S", "Broadlink (OEM)"),
149+
0x4F1B: ("MP1-1K3S2U", "Broadlink (OEM)"),
150+
0x4F65: ("MP1-1K3S2U", "Broadlink"),
142151
},
143152
lb1: {
144-
0x5043: ("SB800TD", broadlink_oem),
145-
0x504E: ("LB1", broadlink),
146-
0x606E: ("SB500TD",broadlink_oem),
147-
0x60C7: ("LB1", broadlink),
148-
0x60C8: ("LB1", broadlink),
149-
0x6112: ("LB1", broadlink),
153+
0x5043: ("SB800TD", "Broadlink (OEM)"),
154+
0x504E: ("LB1", "Broadlink"),
155+
0x606E: ("SB500TD", "Broadlink (OEM)"),
156+
0x60C7: ("LB1", "Broadlink"),
157+
0x60C8: ("LB1", "Broadlink"),
158+
0x6112: ("LB1", "Broadlink"),
159+
0x644C: ("LB27 R1", "Broadlink"),
160+
0x644E: ("LB26 R1", "Broadlink"),
150161
},
151162
lb2: {
152-
0xA4F4: ("LB27 R1", broadlink),
163+
0xA4F4: ("LB27 R1", "Broadlink"),
164+
0xA5F7: ("LB27 R1", "Broadlink"),
153165
},
154166
S1C: {
155-
0x2722: ("S2KIT", broadlink),
167+
0x2722: ("S2KIT", "Broadlink"),
168+
},
169+
s3: {
170+
0xA59C:("S3", "Broadlink"),
171+
0xA64D:("S3", "Broadlink"),
156172
},
157173
hysen: {
158174
0x4EAD: ("HY02/HY03", "Hysen"),

broadlinkmanager/broadlink/hub.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
"""Support for hubs."""
2+
import struct
3+
import json
4+
5+
from . import exceptions as e
6+
from .device import Device
7+
8+
9+
class s3(Device):
10+
"""Controls a Broadlink S3."""
11+
12+
TYPE = "S3"
13+
MAX_SUBDEVICES = 8
14+
15+
def get_subdevices(self) -> list:
16+
"""Return the lit of sub devices."""
17+
sub_devices = []
18+
step = 5
19+
20+
for index in range(0, self.MAX_SUBDEVICES, step):
21+
state = {"count": step, "index": index}
22+
packet = self._encode(14, state)
23+
resp = self.send_packet(0x6A, packet)
24+
e.check_error(resp[0x22:0x24])
25+
resp = self._decode(resp)
26+
27+
sub_devices.extend(resp["list"])
28+
if len(sub_devices) == resp["total"]:
29+
break
30+
31+
return sub_devices
32+
33+
def get_state(self, did: str = None) -> dict:
34+
"""Return the power state of the device."""
35+
state = {}
36+
if did is not None:
37+
state["did"] = did
38+
39+
packet = self._encode(1, state)
40+
response = self.send_packet(0x6A, packet)
41+
e.check_error(response[0x22:0x24])
42+
return self._decode(response)
43+
44+
def set_state(
45+
self,
46+
did: str = None,
47+
pwr1: bool = None,
48+
pwr2: bool = None,
49+
pwr3: bool = None,
50+
) -> dict:
51+
"""Set the power state of the device."""
52+
state = {}
53+
if did is not None:
54+
state["did"] = did
55+
if pwr1 is not None:
56+
state["pwr1"] = int(bool(pwr1))
57+
if pwr2 is not None:
58+
state["pwr2"] = int(bool(pwr2))
59+
if pwr3 is not None:
60+
state["pwr3"] = int(bool(pwr3))
61+
62+
packet = self._encode(2, state)
63+
response = self.send_packet(0x6A, packet)
64+
e.check_error(response[0x22:0x24])
65+
return self._decode(response)
66+
67+
def _encode(self, flag: int, state: dict) -> bytes:
68+
"""Encode a JSON packet."""
69+
# flag: 1 for reading, 2 for writing.
70+
packet = bytearray(12)
71+
data = json.dumps(state, separators=(",", ":")).encode()
72+
struct.pack_into("<HHHBBI", packet, 0, 0xA5A5, 0x5A5A, 0, flag, 0x0B, len(data))
73+
packet.extend(data)
74+
checksum = sum(packet, 0xBEAF) & 0xFFFF
75+
packet[0x04:0x06] = checksum.to_bytes(2, "little")
76+
return packet
77+
78+
def _decode(self, response: bytes) -> dict:
79+
"""Decode a JSON packet."""
80+
payload = self.decrypt(response[0x38:])
81+
js_len = struct.unpack_from("<I", payload, 0x08)[0]
82+
state = json.loads(payload[0x0C : 0x0C + js_len])
83+
return state

broadlinkmanager/broadlinkmanager.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,17 @@ def getDeviceName(deviceType):
291291
0x4EAD: "HY02/HY03 ( Hysen)",
292292
0x4E4D: "DT360E-45/20 ( Dooya)",
293293
0x51E3: "BG800/BG900 ( BGElectrical)",
294+
0xA569: "SP4L-UK ( Broadlink)",
295+
0x520C: "RM4 mini ( Broadlink)",
296+
0x5212: "RM4 TV (mate Broadlink)",
297+
0x5216: "RM4 mini (Broadlink)",
298+
0x520B: "RM4 pro (Broadlink)",
299+
0x5218: "RM4C pro (Broadlink)",
300+
0x5209: "RM4 TV mate (Broadlink)",
301+
0x5213: "RM4 pro (Broadlink)",
302+
0x644C: "LB27 R1 (Broadlink)",
303+
0x644E: "LB26 R1 (Broadlink)",
304+
0xA5F7: "LB27 R1 (Broadlink)",
294305

295306
}
296307
return name.get(deviceType, "Not Supported")

config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: "Broadlink Manager"
22
description: "Easely learn and send IR/RF Command"
33
codenotary: [email protected]
4-
version: "5.8.3"
4+
version: "5.8.4"
55
slug: "broadlink_manager"
66
panel_icon: mdi:remote
77
# panel_admin: false

0 commit comments

Comments
 (0)