[Unit]
Description=Control Pi Service
+Wants=network-online.target
+After=network-online.target
[Service]
WorkingDirectory=/home/pi
return HTTPStatus.OK, response_headers, body
-def get_ip():
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- try:
- s.connect(('10.255.255.255', 1))
- ip = s.getsockname()[0]
- except Exception:
- ip = '127.0.0.1'
- finally:
- s.close()
+async def get_ip():
+ ip = None
+ while not ip:
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ try:
+ s.connect(('10.255.255.255', 1))
+ ip = s.getsockname()[0]
+ except Exception:
+ ip = None
+ await asyncio.sleep(0.1)
+ finally:
+ s.close()
return ip
async def setup_websocket(pins, queues, server_root):
parameterised_handler = functools.partial(handler, pins, queues)
parameterised_process_request = functools.partial(process_request, server_root)
- hostname = get_ip()
+ hostname = await get_ip()
await websockets.serve(parameterised_handler, hostname, 80,
process_request=parameterised_process_request)
print(f"Serving on ws://{hostname}:80")