Merge pull request #37668 from home-assistant/rc
This commit is contained in:
commit
aa39dede59
17 changed files with 206 additions and 76 deletions
|
@ -351,7 +351,7 @@ async def _async_log_pending_setups(
|
|||
remaining = [domain for domain in domains if domain in setup_started]
|
||||
|
||||
if remaining:
|
||||
_LOGGER.info(
|
||||
_LOGGER.warning(
|
||||
"Waiting on integrations to complete setup: %s", ", ".join(remaining),
|
||||
)
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ _LOGGER = logging.getLogger(__name__)
|
|||
|
||||
DOMAIN = "denonavr"
|
||||
|
||||
SUPPORTED_MANUFACTURERS = ["Denon", "DENON", "Marantz"]
|
||||
SUPPORTED_MANUFACTURERS = ["Denon", "DENON", "DENON PROFESSIONAL", "Marantz"]
|
||||
IGNORED_MODELS = ["HEOS 1", "HEOS 3", "HEOS 5", "HEOS 7"]
|
||||
|
||||
CONF_SHOW_ALL_SOURCES = "show_all_sources"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Denon AVR Network Receivers",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/denonavr",
|
||||
"requirements": ["denonavr==0.9.3", "getmac==0.8.2"],
|
||||
"requirements": ["denonavr==0.9.4", "getmac==0.8.2"],
|
||||
"codeowners": ["@scarface-4711", "@starkillerOG"],
|
||||
"ssdp": [
|
||||
{
|
||||
|
@ -14,6 +14,10 @@
|
|||
"manufacturer": "DENON",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "DENON PROFESSIONAL",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "Marantz",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1"
|
||||
|
@ -26,6 +30,10 @@
|
|||
"manufacturer": "DENON",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "DENON PROFESSIONAL",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "Marantz",
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1"
|
||||
|
@ -38,6 +46,10 @@
|
|||
"manufacturer": "DENON",
|
||||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "DENON PROFESSIONAL",
|
||||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1"
|
||||
},
|
||||
{
|
||||
"manufacturer": "Marantz",
|
||||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"domain": "dunehd",
|
||||
"name": "Dune HD",
|
||||
"documentation": "https://www.home-assistant.io/integrations/dunehd",
|
||||
"requirements": ["pdunehd==1.3.1"],
|
||||
"requirements": ["pdunehd==1.3.2"],
|
||||
"codeowners": ["@bieniu"],
|
||||
"config_flow": true
|
||||
}
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
"name": "KEF",
|
||||
"documentation": "https://www.home-assistant.io/integrations/kef",
|
||||
"codeowners": ["@basnijholt"],
|
||||
"requirements": ["aiokef==0.2.12", "getmac==0.8.2"]
|
||||
"requirements": ["aiokef==0.2.13", "getmac==0.8.2"]
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"documentation": "https://www.home-assistant.io/integrations/smappee",
|
||||
"dependencies": ["http"],
|
||||
"requirements": [
|
||||
"pysmappee==0.1.2"
|
||||
"pysmappee==0.1.4"
|
||||
],
|
||||
"codeowners": [
|
||||
"@bsmappee"
|
||||
|
|
|
@ -16,13 +16,6 @@ TREND_SENSORS = {
|
|||
"total_power",
|
||||
DEVICE_CLASS_POWER,
|
||||
],
|
||||
"total_reactive_power": [
|
||||
"Total consumption - Reactive power",
|
||||
None,
|
||||
POWER_WATT,
|
||||
"total_reactive_power",
|
||||
DEVICE_CLASS_POWER,
|
||||
],
|
||||
"alwayson": [
|
||||
"Always on - Active power",
|
||||
None,
|
||||
|
@ -59,6 +52,15 @@ TREND_SENSORS = {
|
|||
None,
|
||||
],
|
||||
}
|
||||
REACTIVE_SENSORS = {
|
||||
"total_reactive_power": [
|
||||
"Total consumption - Reactive power",
|
||||
None,
|
||||
POWER_WATT,
|
||||
"total_reactive_power",
|
||||
DEVICE_CLASS_POWER,
|
||||
]
|
||||
}
|
||||
SOLAR_SENSORS = {
|
||||
"solar_power": [
|
||||
"Total production - Active power",
|
||||
|
@ -88,48 +90,48 @@ VOLTAGE_SENSORS = {
|
|||
"mdi:flash",
|
||||
VOLT,
|
||||
"phase_voltage_a",
|
||||
["ONE", "TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
None,
|
||||
["ONE", "TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
],
|
||||
"phase_voltages_b": [
|
||||
"Phase voltages - B",
|
||||
"mdi:flash",
|
||||
VOLT,
|
||||
"phase_voltage_b",
|
||||
["TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
None,
|
||||
["TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
],
|
||||
"phase_voltages_c": [
|
||||
"Phase voltages - C",
|
||||
"mdi:flash",
|
||||
VOLT,
|
||||
"phase_voltage_c",
|
||||
["THREE_STAR"],
|
||||
None,
|
||||
["THREE_STAR"],
|
||||
],
|
||||
"line_voltages_a": [
|
||||
"Line voltages - A",
|
||||
"mdi:flash",
|
||||
VOLT,
|
||||
"line_voltage_a",
|
||||
["ONE", "TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
None,
|
||||
["ONE", "TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
],
|
||||
"line_voltages_b": [
|
||||
"Line voltages - B",
|
||||
"mdi:flash",
|
||||
VOLT,
|
||||
"line_voltage_b",
|
||||
["TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
None,
|
||||
["TWO", "THREE_STAR", "THREE_DELTA"],
|
||||
],
|
||||
"line_voltages_c": [
|
||||
"Line voltages - C",
|
||||
"mdi:flash",
|
||||
VOLT,
|
||||
"line_voltage_c",
|
||||
["THREE_STAR", "THREE_DELTA"],
|
||||
None,
|
||||
["THREE_STAR", "THREE_DELTA"],
|
||||
],
|
||||
}
|
||||
|
||||
|
@ -151,6 +153,17 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||
)
|
||||
)
|
||||
|
||||
if service_location.has_reactive_value:
|
||||
for reactive_sensor in REACTIVE_SENSORS:
|
||||
entities.append(
|
||||
SmappeeSensor(
|
||||
smappee_base=smappee_base,
|
||||
service_location=service_location,
|
||||
sensor=reactive_sensor,
|
||||
attributes=REACTIVE_SENSORS[reactive_sensor],
|
||||
)
|
||||
)
|
||||
|
||||
# Add solar sensors
|
||||
if service_location.has_solar_production:
|
||||
for sensor in SOLAR_SENSORS:
|
||||
|
@ -180,9 +193,10 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||
)
|
||||
)
|
||||
|
||||
# Add phase- and line voltages
|
||||
# Add phase- and line voltages if available
|
||||
if service_location.has_voltage_values:
|
||||
for sensor_name, sensor in VOLTAGE_SENSORS.items():
|
||||
if service_location.phase_type in sensor[4]:
|
||||
if service_location.phase_type in sensor[5]:
|
||||
entities.append(
|
||||
SmappeeSensor(
|
||||
smappee_base=smappee_base,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Sonarr",
|
||||
"documentation": "https://www.home-assistant.io/integrations/sonarr",
|
||||
"codeowners": ["@ctalkington"],
|
||||
"requirements": ["sonarr==0.2.2"],
|
||||
"requirements": ["sonarr==0.2.3"],
|
||||
"config_flow": true,
|
||||
"quality_scale": "silver"
|
||||
}
|
||||
|
|
|
@ -31,23 +31,23 @@ async def async_setup(hass, config):
|
|||
mac_address = call.data.get(CONF_MAC)
|
||||
broadcast_address = call.data.get(CONF_BROADCAST_ADDRESS)
|
||||
broadcast_port = call.data.get(CONF_BROADCAST_PORT)
|
||||
|
||||
service_kwargs = {}
|
||||
if broadcast_address is not None:
|
||||
service_kwargs["ip_address"] = broadcast_address
|
||||
if broadcast_port is not None:
|
||||
service_kwargs["port"] = broadcast_port
|
||||
|
||||
_LOGGER.info(
|
||||
"Send magic packet to mac %s (broadcast: %s, port: %s)",
|
||||
mac_address,
|
||||
broadcast_address,
|
||||
broadcast_port,
|
||||
)
|
||||
if broadcast_address is not None:
|
||||
|
||||
await hass.async_add_job(
|
||||
partial(
|
||||
wakeonlan.send_magic_packet,
|
||||
mac_address,
|
||||
ip_address=broadcast_address,
|
||||
port=broadcast_port,
|
||||
partial(wakeonlan.send_magic_packet, mac_address, **service_kwargs)
|
||||
)
|
||||
)
|
||||
else:
|
||||
await hass.async_add_job(partial(wakeonlan.send_magic_packet, mac_address))
|
||||
|
||||
hass.services.async_register(
|
||||
DOMAIN,
|
||||
|
|
|
@ -96,14 +96,20 @@ class WolSwitch(SwitchEntity):
|
|||
|
||||
def turn_on(self, **kwargs):
|
||||
"""Turn the device on."""
|
||||
if self._broadcast_address:
|
||||
wakeonlan.send_magic_packet(
|
||||
service_kwargs = {}
|
||||
if self._broadcast_address is not None:
|
||||
service_kwargs["ip_address"] = self._broadcast_address
|
||||
if self._broadcast_port is not None:
|
||||
service_kwargs["port"] = self._broadcast_port
|
||||
|
||||
_LOGGER.info(
|
||||
"Send magic packet to mac %s (broadcast: %s, port: %s)",
|
||||
self._mac_address,
|
||||
ip_address=self._broadcast_address,
|
||||
port=self._broadcast_port,
|
||||
self._broadcast_address,
|
||||
self._broadcast_port,
|
||||
)
|
||||
else:
|
||||
wakeonlan.send_magic_packet(self._mac_address)
|
||||
|
||||
wakeonlan.send_magic_packet(self._mac_address, **service_kwargs)
|
||||
|
||||
def turn_off(self, **kwargs):
|
||||
"""Turn the device off if an off action is present."""
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
from typing import Callable, List
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
DEVICE_CLASS_PRESENCE,
|
||||
DEVICE_CLASS_OCCUPANCY,
|
||||
DOMAIN as BINARY_SENSOR_DOMAIN,
|
||||
BinarySensorDevice,
|
||||
BinarySensorEntity,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
@ -26,7 +26,7 @@ async def async_setup_entry(
|
|||
async_add_entities(entities, True)
|
||||
|
||||
|
||||
class WithingsHealthBinarySensor(BaseWithingsSensor, BinarySensorDevice):
|
||||
class WithingsHealthBinarySensor(BaseWithingsSensor, BinarySensorEntity):
|
||||
"""Implementation of a Withings sensor."""
|
||||
|
||||
@property
|
||||
|
@ -37,4 +37,4 @@ class WithingsHealthBinarySensor(BaseWithingsSensor, BinarySensorDevice):
|
|||
@property
|
||||
def device_class(self) -> str:
|
||||
"""Provide the device class."""
|
||||
return DEVICE_CLASS_PRESENCE
|
||||
return DEVICE_CLASS_OCCUPANCY
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"""Constants used by Home Assistant components."""
|
||||
MAJOR_VERSION = 0
|
||||
MINOR_VERSION = 112
|
||||
PATCH_VERSION = "3"
|
||||
PATCH_VERSION = "4"
|
||||
__short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
||||
__version__ = f"{__short_version__}.{PATCH_VERSION}"
|
||||
REQUIRED_PYTHON_VER = (3, 7, 0)
|
||||
|
|
|
@ -26,6 +26,10 @@ SSDP = {
|
|||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
|
||||
"manufacturer": "DENON"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
|
||||
"manufacturer": "DENON PROFESSIONAL"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
|
||||
"manufacturer": "Marantz"
|
||||
|
@ -38,6 +42,10 @@ SSDP = {
|
|||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
|
||||
"manufacturer": "DENON"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
|
||||
"manufacturer": "DENON PROFESSIONAL"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
|
||||
"manufacturer": "Marantz"
|
||||
|
@ -50,6 +58,10 @@ SSDP = {
|
|||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
|
||||
"manufacturer": "DENON"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
|
||||
"manufacturer": "DENON PROFESSIONAL"
|
||||
},
|
||||
{
|
||||
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
|
||||
"manufacturer": "Marantz"
|
||||
|
|
|
@ -200,7 +200,7 @@ aioimaplib==0.7.15
|
|||
aiokafka==0.5.1
|
||||
|
||||
# homeassistant.components.kef
|
||||
aiokef==0.2.12
|
||||
aiokef==0.2.13
|
||||
|
||||
# homeassistant.components.lifx
|
||||
aiolifx==0.6.7
|
||||
|
@ -475,7 +475,7 @@ defusedxml==0.6.0
|
|||
deluge-client==1.7.1
|
||||
|
||||
# homeassistant.components.denonavr
|
||||
denonavr==0.9.3
|
||||
denonavr==0.9.4
|
||||
|
||||
# homeassistant.components.devolo_home_control
|
||||
devolo-home-control-api==0.11.0
|
||||
|
@ -1050,7 +1050,7 @@ panasonic_viera==0.3.5
|
|||
pcal9535a==0.7
|
||||
|
||||
# homeassistant.components.dunehd
|
||||
pdunehd==1.3.1
|
||||
pdunehd==1.3.2
|
||||
|
||||
# homeassistant.components.pencom
|
||||
pencompy==0.0.3
|
||||
|
@ -1610,7 +1610,7 @@ pysignalclirestapi==0.3.4
|
|||
pysma==0.3.5
|
||||
|
||||
# homeassistant.components.smappee
|
||||
pysmappee==0.1.2
|
||||
pysmappee==0.1.4
|
||||
|
||||
# homeassistant.components.smartthings
|
||||
pysmartapp==0.3.2
|
||||
|
@ -2003,7 +2003,7 @@ somecomfort==0.5.2
|
|||
somfy-mylink-synergy==1.0.6
|
||||
|
||||
# homeassistant.components.sonarr
|
||||
sonarr==0.2.2
|
||||
sonarr==0.2.3
|
||||
|
||||
# homeassistant.components.marytts
|
||||
speak2mary==1.4.0
|
||||
|
|
|
@ -227,7 +227,7 @@ debugpy==1.0.0b11
|
|||
defusedxml==0.6.0
|
||||
|
||||
# homeassistant.components.denonavr
|
||||
denonavr==0.9.3
|
||||
denonavr==0.9.4
|
||||
|
||||
# homeassistant.components.devolo_home_control
|
||||
devolo-home-control-api==0.11.0
|
||||
|
@ -461,7 +461,7 @@ paho-mqtt==1.5.0
|
|||
panasonic_viera==0.3.5
|
||||
|
||||
# homeassistant.components.dunehd
|
||||
pdunehd==1.3.1
|
||||
pdunehd==1.3.2
|
||||
|
||||
# homeassistant.components.aruba
|
||||
# homeassistant.components.cisco_ios
|
||||
|
@ -715,7 +715,7 @@ pysignalclirestapi==0.3.4
|
|||
pysma==0.3.5
|
||||
|
||||
# homeassistant.components.smappee
|
||||
pysmappee==0.1.2
|
||||
pysmappee==0.1.4
|
||||
|
||||
# homeassistant.components.smartthings
|
||||
pysmartapp==0.3.2
|
||||
|
@ -853,7 +853,7 @@ solaredge==0.0.2
|
|||
somecomfort==0.5.2
|
||||
|
||||
# homeassistant.components.sonarr
|
||||
sonarr==0.2.2
|
||||
sonarr==0.2.3
|
||||
|
||||
# homeassistant.components.marytts
|
||||
speak2mary==1.4.0
|
||||
|
|
|
@ -28,6 +28,28 @@ async def test_send_magic_packet(hass):
|
|||
assert mocked_wakeonlan.mock_calls[-1][2]["ip_address"] == bc_ip
|
||||
assert mocked_wakeonlan.mock_calls[-1][2]["port"] == bc_port
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
SERVICE_SEND_MAGIC_PACKET,
|
||||
{"mac": mac, "broadcast_address": bc_ip},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mocked_wakeonlan.mock_calls) == 2
|
||||
assert mocked_wakeonlan.mock_calls[-1][1][0] == mac
|
||||
assert mocked_wakeonlan.mock_calls[-1][2]["ip_address"] == bc_ip
|
||||
assert "port" not in mocked_wakeonlan.mock_calls[-1][2]
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
SERVICE_SEND_MAGIC_PACKET,
|
||||
{"mac": mac, "broadcast_port": bc_port},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mocked_wakeonlan.mock_calls) == 3
|
||||
assert mocked_wakeonlan.mock_calls[-1][1][0] == mac
|
||||
assert mocked_wakeonlan.mock_calls[-1][2]["port"] == bc_port
|
||||
assert "ip_address" not in mocked_wakeonlan.mock_calls[-1][2]
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
|
@ -35,11 +57,11 @@ async def test_send_magic_packet(hass):
|
|||
{"broadcast_address": bc_ip},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mocked_wakeonlan.mock_calls) == 1
|
||||
assert len(mocked_wakeonlan.mock_calls) == 3
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN, SERVICE_SEND_MAGIC_PACKET, {"mac": mac}, blocking=True
|
||||
)
|
||||
assert len(mocked_wakeonlan.mock_calls) == 2
|
||||
assert len(mocked_wakeonlan.mock_calls) == 4
|
||||
assert mocked_wakeonlan.mock_calls[-1][1][0] == mac
|
||||
assert not mocked_wakeonlan.mock_calls[-1][2]
|
||||
|
|
|
@ -5,18 +5,13 @@ import homeassistant.components.switch as switch
|
|||
from homeassistant.const import STATE_OFF, STATE_ON
|
||||
from homeassistant.setup import setup_component
|
||||
|
||||
from tests.async_mock import patch
|
||||
from tests.async_mock import Mock, patch
|
||||
from tests.common import get_test_home_assistant, mock_service
|
||||
from tests.components.switch import common
|
||||
|
||||
TEST_STATE = None
|
||||
|
||||
|
||||
def send_magic_packet(*macs, **kwargs):
|
||||
"""Fake call for sending magic packets."""
|
||||
return
|
||||
|
||||
|
||||
def call(cmd, stdout, stderr):
|
||||
"""Return fake subprocess return codes."""
|
||||
if cmd[5] == "validhostname" and TEST_STATE:
|
||||
|
@ -32,6 +27,8 @@ def system():
|
|||
class TestWolSwitch(unittest.TestCase):
|
||||
"""Test the wol switch."""
|
||||
|
||||
send_magic_packet = Mock(return_value=None)
|
||||
|
||||
def setUp(self):
|
||||
"""Set up things to be run when tests are started."""
|
||||
self.hass = get_test_home_assistant()
|
||||
|
@ -116,17 +113,22 @@ class TestWolSwitch(unittest.TestCase):
|
|||
|
||||
@patch("wakeonlan.send_magic_packet", new=send_magic_packet)
|
||||
@patch("subprocess.call", new=call)
|
||||
def test_broadcast_config(self):
|
||||
"""Test with broadcast address config."""
|
||||
def test_broadcast_config_ip_and_port(self):
|
||||
"""Test with broadcast address and broadcast port config."""
|
||||
|
||||
mac = "00-01-02-03-04-05"
|
||||
broadcast_address = "255.255.255.255"
|
||||
port = 999
|
||||
|
||||
assert setup_component(
|
||||
self.hass,
|
||||
switch.DOMAIN,
|
||||
{
|
||||
"switch": {
|
||||
"platform": "wake_on_lan",
|
||||
"mac": "00-01-02-03-04-05",
|
||||
"broadcast_address": "255.255.255.255",
|
||||
"broadcast_port": 999,
|
||||
"mac": mac,
|
||||
"broadcast_address": broadcast_address,
|
||||
"broadcast_port": port,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
@ -138,6 +140,68 @@ class TestWolSwitch(unittest.TestCase):
|
|||
common.turn_on(self.hass, "switch.wake_on_lan")
|
||||
self.hass.block_till_done()
|
||||
|
||||
self.send_magic_packet.assert_called_with(
|
||||
mac, ip_address=broadcast_address, port=port
|
||||
)
|
||||
|
||||
@patch("wakeonlan.send_magic_packet", new=send_magic_packet)
|
||||
@patch("subprocess.call", new=call)
|
||||
def test_broadcast_config_ip(self):
|
||||
"""Test with only broadcast address."""
|
||||
|
||||
mac = "00-01-02-03-04-05"
|
||||
broadcast_address = "255.255.255.255"
|
||||
|
||||
assert setup_component(
|
||||
self.hass,
|
||||
switch.DOMAIN,
|
||||
{
|
||||
"switch": {
|
||||
"platform": "wake_on_lan",
|
||||
"mac": mac,
|
||||
"broadcast_address": broadcast_address,
|
||||
}
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
state = self.hass.states.get("switch.wake_on_lan")
|
||||
assert STATE_OFF == state.state
|
||||
|
||||
common.turn_on(self.hass, "switch.wake_on_lan")
|
||||
self.hass.block_till_done()
|
||||
|
||||
self.send_magic_packet.assert_called_with(mac, ip_address=broadcast_address)
|
||||
|
||||
@patch("wakeonlan.send_magic_packet", new=send_magic_packet)
|
||||
@patch("subprocess.call", new=call)
|
||||
def test_broadcast_config_port(self):
|
||||
"""Test with only broadcast port config."""
|
||||
|
||||
mac = "00-01-02-03-04-05"
|
||||
port = 999
|
||||
|
||||
assert setup_component(
|
||||
self.hass,
|
||||
switch.DOMAIN,
|
||||
{
|
||||
"switch": {
|
||||
"platform": "wake_on_lan",
|
||||
"mac": mac,
|
||||
"broadcast_port": port,
|
||||
}
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
state = self.hass.states.get("switch.wake_on_lan")
|
||||
assert STATE_OFF == state.state
|
||||
|
||||
common.turn_on(self.hass, "switch.wake_on_lan")
|
||||
self.hass.block_till_done()
|
||||
|
||||
self.send_magic_packet.assert_called_with(mac, port=port)
|
||||
|
||||
@patch("wakeonlan.send_magic_packet", new=send_magic_packet)
|
||||
@patch("subprocess.call", new=call)
|
||||
def test_off_script(self):
|
||||
|
|
Loading…
Add table
Reference in a new issue