def receive_udp(self):
#set up UDP socket to receive data from robot
port = 5678
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(10)
if self.address == '255.255.255.255':
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(("", port)) #bind all intefaces to port
print("waiting on port: %d for data" % port)
message = 'irobotmcs'
s.sendto(message.encode(), (self.address, port))
roomba_dict = {}
while True:
try:
udp_data, addr = s.recvfrom(1024) #wait for udp data
#print('Received: Robot addr: %s Data: %s ' % (addr, udp_data))
if len(udp_data) > 0:
if udp_data != message:
try:
if self.address != addr[0]:
self.log.warn(
"supplied address %s does not match "
"discovered address %s, using discovered "
"address..." % (self.address, addr[0]))
if udp_data.decode() != message:
parsedMsg = json.loads(udp_data)
roomba_dict[addr]=parsedMsg
except Exception as e:
print("json decode error: %s" % e)
print('RECEIVED: %s', pformat(udp_data))
# print('Robot Data: %s '
# % json.dumps(parsedMsg, indent=2))
else:
break
except socket.timeout:
break
s.close()
return roomba_dict
评论列表
文章目录