Files
linux-voice-assistant/linux_voice_assistant/zeroconf.py
Florian Asche 1fc29241b4 Add linting scripts and pipeline (#201)
* Add linting scripts and pipeline
2026-03-05 01:58:39 +01:00

51 lines
1.4 KiB
Python

"""Runs mDNS zeroconf service for Home Assistant discovery."""
import logging
import socket
from typing import Optional
_LOGGER = logging.getLogger(__name__)
try:
from zeroconf.asyncio import AsyncServiceInfo, AsyncZeroconf
except ImportError:
_LOGGER.fatal("zeroconf not installed. Please install it with: pip install zeroconf")
raise
MDNS_TARGET_IP = "224.0.0.251"
class HomeAssistantZeroconf:
def __init__(
self,
port: int,
mac_address: str,
host_ip_address: str,
name: Optional[str] = None,
) -> None:
self.port = port
self.mac_address = mac_address
self.name = name or self.mac_address
self.host_ip_address = host_ip_address
self._aiozc = AsyncZeroconf()
async def register_server(self) -> None:
service_info = AsyncServiceInfo(
"_esphomelib._tcp.local.",
f"{self.name}._esphomelib._tcp.local.",
addresses=[socket.inet_aton(self.host_ip_address)],
port=self.port,
properties={
"version": "2025.9.0",
"mac": self.mac_address,
"board": "host",
"platform": "HOST",
"network": "ethernet", # or "wifi"
},
server=f"{self.name}.local.",
)
await self._aiozc.async_register_service(service_info)
_LOGGER.debug("Zeroconf discovery enabled: %s", service_info)