mirror of
https://github.com/mjg59/python-broadlink.git
synced 2024-11-11 02:10:12 +01:00
Add in AP Mode device setup for new Broadlink devices. (#53)
This commit is contained in:
parent
5195856200
commit
d989c27d36
14
README.md
14
README.md
@ -6,6 +6,20 @@ A simple Python API for controlling IR controllers from [Broadlink](http://www.i
|
|||||||
Example use
|
Example use
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
Setup a new device on your local wireless network:
|
||||||
|
|
||||||
|
1. Put the device into AP Mode
|
||||||
|
1. Long press the reset button until the blue LED is blinking quickly.
|
||||||
|
2. Long press again until blue LED is blinking slowly.
|
||||||
|
3. Manually connect to the WiFi SSID named BroadlinkProv.
|
||||||
|
2. Run setup() and provide your ssid, network password (if secured), and set the security mode
|
||||||
|
1. Security mode options are (0 = none, 1 = WEP, 2 = WPA1, 3 = WPA2, 4 = WPA1/2)
|
||||||
|
```
|
||||||
|
import broadlink
|
||||||
|
|
||||||
|
broadlink.setup('myssid', 'mynetworkpass', 3)
|
||||||
|
```
|
||||||
|
|
||||||
Discover available devices on the local network:
|
Discover available devices on the local network:
|
||||||
```
|
```
|
||||||
import broadlink
|
import broadlink
|
||||||
|
@ -503,3 +503,40 @@ class rm2(rm):
|
|||||||
dev = discover()
|
dev = discover()
|
||||||
self.host = dev.host
|
self.host = dev.host
|
||||||
self.mac = dev.mac
|
self.mac = dev.mac
|
||||||
|
|
||||||
|
# Setup a new Broadlink device via AP Mode. Review the README to see how to enter AP Mode.
|
||||||
|
# Only tested with Broadlink RM3 Mini (Blackbean)
|
||||||
|
def setup(ssid, password, security_mode):
|
||||||
|
# Security mode options are (0 - none, 1 = WEP, 2 = WPA1, 3 = WPA2, 4 = WPA1/2)
|
||||||
|
payload = bytearray(0x88)
|
||||||
|
payload[0x26] = 0x14 # This seems to always be set to 14
|
||||||
|
# Add the SSID to the payload
|
||||||
|
ssid_start = 68
|
||||||
|
ssid_length = 0
|
||||||
|
for letter in ssid:
|
||||||
|
payload[(ssid_start + ssid_length)] = ord(letter)
|
||||||
|
ssid_length += 1
|
||||||
|
# Add the WiFi password to the payload
|
||||||
|
pass_start = 100
|
||||||
|
pass_length = 0
|
||||||
|
for letter in password:
|
||||||
|
payload[(pass_start + pass_length)] = ord(letter)
|
||||||
|
pass_length += 1
|
||||||
|
|
||||||
|
payload[0x84] = ssid_length # Character length of SSID
|
||||||
|
payload[0x85] = pass_length # Character length of password
|
||||||
|
payload[0x86] = security_mode # Type of encryption (00 - none, 01 = WEP, 02 = WPA1, 03 = WPA2, 04 = WPA1/2)
|
||||||
|
|
||||||
|
checksum = 0xbeaf
|
||||||
|
for i in range(len(payload)):
|
||||||
|
checksum += payload[i]
|
||||||
|
checksum = checksum & 0xffff
|
||||||
|
|
||||||
|
payload[0x20] = checksum & 0xff # Checksum 1 position
|
||||||
|
payload[0x21] = checksum >> 8 # Checksum 2 position
|
||||||
|
|
||||||
|
sock = socket.socket(socket.AF_INET, # Internet
|
||||||
|
socket.SOCK_DGRAM) # UDP
|
||||||
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||||
|
sock.sendto(payload, ('255.255.255.255', 80))
|
21
protocol.md
21
protocol.md
@ -11,6 +11,25 @@ Checksum
|
|||||||
|
|
||||||
Construct the packet and set checksum bytes to zero. Add each byte to the starting value of 0xbeaf, wrapping after 0xffff.
|
Construct the packet and set checksum bytes to zero. Add each byte to the starting value of 0xbeaf, wrapping after 0xffff.
|
||||||
|
|
||||||
|
New device setup
|
||||||
|
----------------
|
||||||
|
|
||||||
|
To setup a new Broadlink device while in AP Mode a 136 byte packet needs to be sent to the device as follows:
|
||||||
|
|
||||||
|
| Offset | Contents |
|
||||||
|
|---------|----------|
|
||||||
|
|0x00-0x19|00|
|
||||||
|
|0x20-0x21|Checksum as a little-endian 16 bit integer|
|
||||||
|
|0x26|14 (Always 14)|
|
||||||
|
|0x44-0x63|SSID Name (zero padding is appended)|
|
||||||
|
|0x64-0x83|Password (zero padding is appended)|
|
||||||
|
|0x84|Character length of SSID|
|
||||||
|
|0x85|Character length of password|
|
||||||
|
|0x86|Wireless security mode (00 - none, 01 = WEP, 02 = WPA1, 03 = WPA2, 04 = WPA1/2)|
|
||||||
|
|0x87-88|00|
|
||||||
|
|
||||||
|
Send this packet as a UDP broadcast to 255.255.255.255 on port 80.
|
||||||
|
|
||||||
Network discovery
|
Network discovery
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@ -179,3 +198,5 @@ Todo
|
|||||||
|
|
||||||
* Support for other devices using the Broadlink protocol (various smart home devices)
|
* Support for other devices using the Broadlink protocol (various smart home devices)
|
||||||
* Figure out what the format of the data packets actually is.
|
* Figure out what the format of the data packets actually is.
|
||||||
|
* Deal with the response after AP Mode WiFi network setup.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user