1 """Support for wake on lan."""
3 from __future__
import annotations
6 import subprocess
as sp
9 import voluptuous
as vol
13 PLATFORM_SCHEMA
as SWITCH_PLATFORM_SCHEMA,
17 CONF_BROADCAST_ADDRESS,
30 from .const
import CONF_OFF_ACTION, DEFAULT_NAME, DEFAULT_PING_TIMEOUT, DOMAIN
32 _LOGGER = logging.getLogger(__name__)
34 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
36 vol.Required(CONF_MAC): cv.string,
37 vol.Optional(CONF_BROADCAST_ADDRESS): cv.string,
38 vol.Optional(CONF_BROADCAST_PORT): cv.port,
39 vol.Optional(CONF_HOST): cv.string,
40 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
41 vol.Optional(CONF_OFF_ACTION): cv.SCRIPT_SCHEMA,
49 async_add_entities: AddEntitiesCallback,
50 discovery_info: DiscoveryInfoType |
None =
None,
52 """Set up a wake on lan switch."""
53 broadcast_address: str |
None = config.get(CONF_BROADCAST_ADDRESS)
54 broadcast_port: int |
None = config.get(CONF_BROADCAST_PORT)
55 host: str |
None = config.get(CONF_HOST)
56 mac_address: str = config[CONF_MAC]
57 name: str = config[CONF_NAME]
58 off_action: list[Any] |
None = config.get(CONF_OFF_ACTION)
77 """Representation of a wake on lan switch."""
85 off_action: list[Any] |
None,
86 broadcast_address: str |
None,
87 broadcast_port: int |
None,
89 """Initialize the WOL switch."""
96 Script(hass, off_action, name, DOMAIN)
if off_action
else None
105 """Return true if switch is on."""
109 """Turn the device on."""
110 service_kwargs: dict[str, Any] = {}
117 "Send magic packet to mac %s (broadcast: %s, port: %s)",
123 wakeonlan.send_magic_packet(self.
_mac_address_mac_address, **service_kwargs)
130 """Turn the device off if an off action is present."""
139 """Check if device is on and update the state. Only called if assumed state is false."""
145 str(DEFAULT_PING_TIMEOUT),
149 status = sp.call(ping_cmd, stdout=sp.DEVNULL, stderr=sp.DEVNULL)
None turn_off(self, **Any kwargs)
None turn_on(self, **Any kwargs)
None __init__(self, HomeAssistant hass, str name, str|None host, str mac_address, list[Any]|None off_action, str|None broadcast_address, int|None broadcast_port)
None schedule_update_ha_state(self, bool force_refresh=False)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
int run(RuntimeConfig runtime_config)