Skip to content

Instantly share code, notes, and snippets.

@Yepoleb
Created June 22, 2024 23:32
Show Gist options
  • Save Yepoleb/3fe906b7035788c92aa4594a8a1cdb13 to your computer and use it in GitHub Desktop.
Save Yepoleb/3fe906b7035788c92aa4594a8a1cdb13 to your computer and use it in GitHub Desktop.
Discover Daikin devices in LAN
import socket
import urllib.parse
ADAPTER_TYPE = {
"2": "DX2",
"3": "DX3",
"4": "DX4",
}
DEVICE_TYPE = {
"NA": "Unknown",
"1D": "AirPurifier",
"RA": "RoomAirco",
"PA": "MiniVRV"
}
REGION_CODE = {
"au": "Australia",
"th": "Aziose",
"eu": "Europe",
"jp": "Japan",
"us": "NorthAmerica"
}
USAGE_METHODS = {
"home only": "LocalNetworkDX23",
"home_only": "LocalNetworkDX4",
"polling": "Cloud"
}
bcast_msg = b"DAIKIN_UDP/common/basic_info"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 6125))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.sendto(bcast_msg, ("255.255.255.255", 30050))
sock.settimeout(1)
while True:
try:
resp, addr = sock.recvfrom(2048)
resp_dec = resp.decode("utf-8")
split_pairs = [pair_str.split("=") for pair_str in resp_dec.split(",")]
print("Device at", addr[0])
for key, value in split_pairs:
if key == "adp_kind":
print(f"{key} = {value} ({ADAPTER_TYPE.get(value, 'Unknown')})")
elif key == "cdev":
print(f"{key} = {value} ({DEVICE_TYPE.get(value, 'Unknown')})")
elif key == "reg":
print(f"{key} = {value} ({REGION_CODE.get(value, 'Unknown')})")
elif key == "method":
print(f"{key} = {value} ({USAGE_METHODS.get(value, 'Unknown')})")
elif key == "name":
name = urllib.parse.unquote(value)
print(f"{key} = {value} ({name})")
else:
print(f"{key} = {value}")
print()
except TimeoutError:
break
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment