Skip to content

Instantly share code, notes, and snippets.

@fliphess
Created January 15, 2018 17:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fliphess/255f3b5a9d5b605d4285be5754fb14bf to your computer and use it in GitHub Desktop.
Save fliphess/255f3b5a9d5b605d4285be5754fb14bf to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# Taken from: https://notes.jmsinfor.com/blog/post/admin/Xiaomi-Hub
import socket
import binascii
import struct
UDP_IP = "192.168.0.107"
UDP_PORT_FROM = 54322
UDP_PORT = 54321
MULTICAST_PORT = 9898
SERVER_PORT = 4321
MULTICAST_ADDRESS = '224.0.0.50'
SOCKET_BUFSIZE = 1024
MESSAGE = binascii.unhexlify('21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind(("0.0.0.0", MULTICAST_PORT))
mreq = struct.pack("=4sl", socket.inet_aton(MULTICAST_ADDRESS), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, SOCKET_BUFSIZE)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
data, addr = sock.recvfrom(SOCKET_BUFSIZE) # buffer size is 1024 bytes
print ("received message:", data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment