mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 12:47:08 +00:00
Implement Wake On Lan Dummy State (#47719)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
8239fb76d1
commit
93c38551d3
@ -521,6 +521,7 @@ homeassistant/components/vizio/* @raman325
|
||||
homeassistant/components/vlc_telnet/* @rodripf @dmcc
|
||||
homeassistant/components/volkszaehler/* @fabaff
|
||||
homeassistant/components/volumio/* @OnFreund
|
||||
homeassistant/components/wake_on_lan/* @ntilley905
|
||||
homeassistant/components/waqi/* @andrey-git
|
||||
homeassistant/components/watson_tts/* @rutkai
|
||||
homeassistant/components/weather/* @fabaff
|
||||
|
@ -3,5 +3,5 @@
|
||||
"name": "Wake on LAN",
|
||||
"documentation": "https://www.home-assistant.io/integrations/wake_on_lan",
|
||||
"requirements": ["wakeonlan==1.1.6"],
|
||||
"codeowners": []
|
||||
"codeowners": ["@ntilley905"]
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
broadcast_port,
|
||||
)
|
||||
],
|
||||
True,
|
||||
host is not None,
|
||||
)
|
||||
|
||||
|
||||
@ -86,6 +86,7 @@ class WolSwitch(SwitchEntity):
|
||||
Script(hass, off_action, name, domain) if off_action else None
|
||||
)
|
||||
self._state = False
|
||||
self._assumed_state = host is None
|
||||
|
||||
@property
|
||||
def is_on(self):
|
||||
@ -97,6 +98,16 @@ class WolSwitch(SwitchEntity):
|
||||
"""Return the name of the switch."""
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def assumed_state(self):
|
||||
"""Return true if no host is provided."""
|
||||
return self._assumed_state
|
||||
|
||||
@property
|
||||
def should_poll(self):
|
||||
"""Return false if assumed state is true."""
|
||||
return not self._assumed_state
|
||||
|
||||
def turn_on(self, **kwargs):
|
||||
"""Turn the device on."""
|
||||
service_kwargs = {}
|
||||
@ -114,13 +125,21 @@ class WolSwitch(SwitchEntity):
|
||||
|
||||
wakeonlan.send_magic_packet(self._mac_address, **service_kwargs)
|
||||
|
||||
if self._assumed_state:
|
||||
self._state = True
|
||||
self.async_write_ha_state()
|
||||
|
||||
def turn_off(self, **kwargs):
|
||||
"""Turn the device off if an off action is present."""
|
||||
if self._off_script is not None:
|
||||
self._off_script.run(context=self._context)
|
||||
|
||||
if self._assumed_state:
|
||||
self._state = False
|
||||
self.async_write_ha_state()
|
||||
|
||||
def update(self):
|
||||
"""Check if device is on and update the state."""
|
||||
"""Check if device is on and update the state. Only called if assumed state is false."""
|
||||
if platform.system().lower() == "windows":
|
||||
ping_cmd = [
|
||||
"ping",
|
||||
|
@ -275,3 +275,44 @@ async def test_invalid_hostname_windows(hass):
|
||||
|
||||
state = hass.states.get("switch.wake_on_lan")
|
||||
assert STATE_OFF == state.state
|
||||
|
||||
|
||||
async def test_no_hostname_state(hass):
|
||||
"""Test that the state updates if we do not pass in a hostname."""
|
||||
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
switch.DOMAIN,
|
||||
{
|
||||
"switch": {
|
||||
"platform": "wake_on_lan",
|
||||
"mac": "00-01-02-03-04-05",
|
||||
}
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get("switch.wake_on_lan")
|
||||
assert state.state == STATE_OFF
|
||||
|
||||
with patch.object(subprocess, "call", return_value=0):
|
||||
|
||||
await hass.services.async_call(
|
||||
switch.DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: "switch.wake_on_lan"},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
state = hass.states.get("switch.wake_on_lan")
|
||||
assert state.state == STATE_ON
|
||||
|
||||
await hass.services.async_call(
|
||||
switch.DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: "switch.wake_on_lan"},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
state = hass.states.get("switch.wake_on_lan")
|
||||
assert state.state == STATE_OFF
|
||||
|
Loading…
x
Reference in New Issue
Block a user