mirror of
https://github.com/esphome/esphome.git
synced 2025-01-09 14:21:46 +01:00
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import os
|
|
import socket
|
|
|
|
from esphome.storage_json import EsphomeStorageJSON, esphome_storage_path
|
|
|
|
from .core import DASHBOARD
|
|
from .web_server import make_app, start_web_server
|
|
|
|
ENV_DEV = "ESPHOME_DASHBOARD_DEV"
|
|
|
|
settings = DASHBOARD.settings
|
|
|
|
|
|
def start_dashboard(args) -> None:
|
|
"""Start the dashboard."""
|
|
settings.parse_args(args)
|
|
|
|
if settings.using_auth:
|
|
path = esphome_storage_path()
|
|
storage = EsphomeStorageJSON.load(path)
|
|
if storage is None:
|
|
storage = EsphomeStorageJSON.get_default()
|
|
storage.save(path)
|
|
settings.cookie_secret = storage.cookie_secret
|
|
|
|
try:
|
|
asyncio.run(async_start(args))
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
|
|
async def async_start(args) -> None:
|
|
"""Start the dashboard."""
|
|
dashboard = DASHBOARD
|
|
await dashboard.async_setup()
|
|
sock: socket.socket | None = args.socket
|
|
address: str | None = args.address
|
|
port: int | None = args.port
|
|
|
|
start_web_server(make_app(args.verbose), sock, address, port, settings.config_dir)
|
|
|
|
if args.open_ui:
|
|
import webbrowser
|
|
|
|
webbrowser.open(f"http://{args.address}:{args.port}")
|
|
|
|
try:
|
|
await dashboard.async_run()
|
|
finally:
|
|
if sock:
|
|
os.remove(sock)
|