Utilities

Solarman Scan Utility

 1""" Scan local network for Solarman data loggers """
 2
 3import socket
 4
 5
 6def main():
 7    """Solarman data logger scanner"""
 8    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
 9    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
10    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
11    sock.settimeout(1.0)
12
13    request = "WIFIKIT-214028-READ"
14    address = ("<broadcast>", 48899)
15
16    sock.sendto(request.encode(), address)
17    while True:
18        try:
19            data = sock.recv(1024)
20        except socket.timeout:
21            break
22        keys = dict.fromkeys(["ipaddress", "mac", "serial"])
23        values = data.decode().split(",")
24        result = dict(zip(keys, values))
25        print(result)
26
27
28if __name__ == "__main__":
29    main()