1 """Support for sending Wake-On-LAN magic packets."""
3 from functools
import partial
6 import voluptuous
as vol
15 from .const
import DOMAIN, PLATFORMS
17 _LOGGER = logging.getLogger(__name__)
19 SERVICE_SEND_MAGIC_PACKET =
"send_magic_packet"
21 WAKE_ON_LAN_SEND_MAGIC_PACKET_SCHEMA = vol.Schema(
23 vol.Required(CONF_MAC): cv.string,
24 vol.Optional(CONF_BROADCAST_ADDRESS): cv.string,
25 vol.Optional(CONF_BROADCAST_PORT): cv.port,
29 CONFIG_SCHEMA = cv.empty_config_schema(DOMAIN)
32 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
33 """Set up the wake on LAN component."""
35 async
def send_magic_packet(call: ServiceCall) ->
None:
36 """Send magic packet to wake up a device."""
37 mac_address = call.data.get(CONF_MAC)
38 broadcast_address = call.data.get(CONF_BROADCAST_ADDRESS)
39 broadcast_port = call.data.get(CONF_BROADCAST_PORT)
42 if broadcast_address
is not None:
43 service_kwargs[
"ip_address"] = broadcast_address
44 if broadcast_port
is not None:
45 service_kwargs[
"port"] = broadcast_port
48 "Send magic packet to mac %s (broadcast: %s, port: %s)",
54 await hass.async_add_executor_job(
55 partial(wakeonlan.send_magic_packet, mac_address, **service_kwargs)
58 hass.services.async_register(
60 SERVICE_SEND_MAGIC_PACKET,
62 schema=WAKE_ON_LAN_SEND_MAGIC_PACKET_SCHEMA,
69 """Set up a Wake on LAN component entry."""
71 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
72 entry.async_on_unload(entry.add_update_listener(update_listener))
77 """Unload a config entry."""
78 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
82 """Handle options update."""
83 await hass.config_entries.async_reload(entry.entry_id)
bool async_setup(HomeAssistant hass, ConfigType config)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
None update_listener(HomeAssistant hass, ConfigEntry entry)