mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Use ServiceInfo in yeelight (#60127)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
38b976e6d6
commit
8b26b69366
@ -8,10 +8,11 @@ from yeelight.aio import AsyncBulb
|
|||||||
from yeelight.main import get_known_models
|
from yeelight.main import get_known_models
|
||||||
|
|
||||||
from homeassistant import config_entries, exceptions
|
from homeassistant import config_entries, exceptions
|
||||||
from homeassistant.components.dhcp import IP_ADDRESS
|
from homeassistant.components import dhcp, zeroconf
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.const import CONF_DEVICE, CONF_HOST, CONF_ID, CONF_NAME
|
from homeassistant.const import CONF_DEVICE, CONF_HOST, CONF_ID, CONF_NAME
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
from homeassistant.data_entry_flow import FlowResult
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
from . import (
|
from . import (
|
||||||
@ -53,21 +54,25 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
self._discovered_model = None
|
self._discovered_model = None
|
||||||
self._discovered_ip = None
|
self._discovered_ip = None
|
||||||
|
|
||||||
async def async_step_homekit(self, discovery_info):
|
async def async_step_homekit(
|
||||||
|
self, discovery_info: zeroconf.ZeroconfServiceInfo
|
||||||
|
) -> FlowResult:
|
||||||
"""Handle discovery from homekit."""
|
"""Handle discovery from homekit."""
|
||||||
self._discovered_ip = discovery_info["host"]
|
self._discovered_ip = discovery_info[zeroconf.ATTR_HOST]
|
||||||
return await self._async_handle_discovery()
|
return await self._async_handle_discovery()
|
||||||
|
|
||||||
async def async_step_dhcp(self, discovery_info):
|
async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult:
|
||||||
"""Handle discovery from dhcp."""
|
"""Handle discovery from dhcp."""
|
||||||
self._discovered_ip = discovery_info[IP_ADDRESS]
|
self._discovered_ip = discovery_info[dhcp.IP_ADDRESS]
|
||||||
return await self._async_handle_discovery()
|
return await self._async_handle_discovery()
|
||||||
|
|
||||||
async def async_step_zeroconf(self, discovery_info):
|
async def async_step_zeroconf(
|
||||||
|
self, discovery_info: zeroconf.ZeroconfServiceInfo
|
||||||
|
) -> FlowResult:
|
||||||
"""Handle discovery from zeroconf."""
|
"""Handle discovery from zeroconf."""
|
||||||
self._discovered_ip = discovery_info["host"]
|
self._discovered_ip = discovery_info[zeroconf.ATTR_HOST]
|
||||||
await self.async_set_unique_id(
|
await self.async_set_unique_id(
|
||||||
"{0:#0{1}x}".format(int(discovery_info["name"][-26:-18]), 18)
|
"{0:#0{1}x}".format(int(discovery_info[zeroconf.ATTR_NAME][-26:-18]), 18)
|
||||||
)
|
)
|
||||||
return await self._async_handle_discovery_with_unique_id()
|
return await self._async_handle_discovery_with_unique_id()
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ from async_upnp_client.search import SsdpSearchListener
|
|||||||
from yeelight import BulbException, BulbType
|
from yeelight import BulbException, BulbType
|
||||||
from yeelight.main import _MODEL_SPECS
|
from yeelight.main import _MODEL_SPECS
|
||||||
|
|
||||||
from homeassistant.components import yeelight as hass_yeelight
|
from homeassistant.components import yeelight as hass_yeelight, zeroconf
|
||||||
from homeassistant.components.yeelight import (
|
from homeassistant.components.yeelight import (
|
||||||
CONF_MODE_MUSIC,
|
CONF_MODE_MUSIC,
|
||||||
CONF_NIGHTLIGHT_SWITCH_TYPE,
|
CONF_NIGHTLIGHT_SWITCH_TYPE,
|
||||||
@ -39,14 +39,14 @@ CAPABILITIES = {
|
|||||||
|
|
||||||
ID_DECIMAL = f"{int(ID, 16):08d}"
|
ID_DECIMAL = f"{int(ID, 16):08d}"
|
||||||
|
|
||||||
ZEROCONF_DATA = {
|
ZEROCONF_DATA = zeroconf.ZeroconfServiceInfo(
|
||||||
"host": IP_ADDRESS,
|
host=IP_ADDRESS,
|
||||||
"port": 54321,
|
port=54321,
|
||||||
"hostname": f"yeelink-light-strip1_miio{ID_DECIMAL}.local.",
|
hostname=f"yeelink-light-strip1_miio{ID_DECIMAL}.local.",
|
||||||
"type": "_miio._udp.local.",
|
type="_miio._udp.local.",
|
||||||
"name": f"yeelink-light-strip1_miio{ID_DECIMAL}._miio._udp.local.",
|
name=f"yeelink-light-strip1_miio{ID_DECIMAL}._miio._udp.local.",
|
||||||
"properties": {"epoch": "1", "mac": "000000000000"},
|
properties={"epoch": "1", "mac": "000000000000"},
|
||||||
}
|
)
|
||||||
|
|
||||||
NAME = "name"
|
NAME = "name"
|
||||||
SHORT_ID = hex(int("0x000000000015243f", 16))
|
SHORT_ID = hex(int("0x000000000015243f", 16))
|
||||||
|
@ -4,6 +4,7 @@ from unittest.mock import patch
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
|
from homeassistant.components import dhcp, zeroconf
|
||||||
from homeassistant.components.yeelight import (
|
from homeassistant.components.yeelight import (
|
||||||
CONF_DETECTED_MODEL,
|
CONF_DETECTED_MODEL,
|
||||||
CONF_MODE_MUSIC,
|
CONF_MODE_MUSIC,
|
||||||
@ -455,7 +456,10 @@ async def test_discovered_by_homekit_and_dhcp(hass):
|
|||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_HOMEKIT},
|
context={"source": config_entries.SOURCE_HOMEKIT},
|
||||||
data={"host": IP_ADDRESS, "properties": {"id": "aa:bb:cc:dd:ee:ff"}},
|
data=zeroconf.ZeroconfServiceInfo(
|
||||||
|
host=IP_ADDRESS,
|
||||||
|
properties={zeroconf.ATTR_PROPERTIES_ID: "aa:bb:cc:dd:ee:ff"},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result["type"] == RESULT_TYPE_FORM
|
assert result["type"] == RESULT_TYPE_FORM
|
||||||
@ -467,7 +471,7 @@ async def test_discovered_by_homekit_and_dhcp(hass):
|
|||||||
result2 = await hass.config_entries.flow.async_init(
|
result2 = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": config_entries.SOURCE_DHCP},
|
||||||
data={"ip": IP_ADDRESS, "macaddress": "aa:bb:cc:dd:ee:ff"},
|
data=dhcp.DhcpServiceInfo(ip=IP_ADDRESS, macaddress="aa:bb:cc:dd:ee:ff"),
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == RESULT_TYPE_ABORT
|
assert result2["type"] == RESULT_TYPE_ABORT
|
||||||
@ -479,7 +483,7 @@ async def test_discovered_by_homekit_and_dhcp(hass):
|
|||||||
result3 = await hass.config_entries.flow.async_init(
|
result3 = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": config_entries.SOURCE_DHCP},
|
||||||
data={"ip": IP_ADDRESS, "macaddress": "00:00:00:00:00:00"},
|
data=dhcp.DhcpServiceInfo(ip=IP_ADDRESS, macaddress="00:00:00:00:00:00"),
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result3["type"] == RESULT_TYPE_ABORT
|
assert result3["type"] == RESULT_TYPE_ABORT
|
||||||
@ -493,7 +497,7 @@ async def test_discovered_by_homekit_and_dhcp(hass):
|
|||||||
result3 = await hass.config_entries.flow.async_init(
|
result3 = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": config_entries.SOURCE_DHCP},
|
||||||
data={"ip": "1.2.3.5", "macaddress": "00:00:00:00:00:01"},
|
data=dhcp.DhcpServiceInfo(ip="1.2.3.5", macaddress="00:00:00:00:00:01"),
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result3["type"] == RESULT_TYPE_ABORT
|
assert result3["type"] == RESULT_TYPE_ABORT
|
||||||
@ -505,11 +509,14 @@ async def test_discovered_by_homekit_and_dhcp(hass):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_DHCP,
|
config_entries.SOURCE_DHCP,
|
||||||
{"ip": IP_ADDRESS, "macaddress": "aa:bb:cc:dd:ee:ff"},
|
dhcp.DhcpServiceInfo(ip=IP_ADDRESS, macaddress="aa:bb:cc:dd:ee:ff"),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_HOMEKIT,
|
config_entries.SOURCE_HOMEKIT,
|
||||||
{"host": IP_ADDRESS, "properties": {"id": "aa:bb:cc:dd:ee:ff"}},
|
zeroconf.ZeroconfServiceInfo(
|
||||||
|
host=IP_ADDRESS,
|
||||||
|
properties={zeroconf.ATTR_PROPERTIES_ID: "aa:bb:cc:dd:ee:ff"},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -563,11 +570,14 @@ async def test_discovered_by_dhcp_or_homekit(hass, source, data):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_DHCP,
|
config_entries.SOURCE_DHCP,
|
||||||
{"ip": IP_ADDRESS, "macaddress": "aa:bb:cc:dd:ee:ff"},
|
dhcp.DhcpServiceInfo(ip=IP_ADDRESS, macaddress="aa:bb:cc:dd:ee:ff"),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_HOMEKIT,
|
config_entries.SOURCE_HOMEKIT,
|
||||||
{"host": IP_ADDRESS, "properties": {"id": "aa:bb:cc:dd:ee:ff"}},
|
zeroconf.ZeroconfServiceInfo(
|
||||||
|
host=IP_ADDRESS,
|
||||||
|
properties={zeroconf.ATTR_PROPERTIES_ID: "aa:bb:cc:dd:ee:ff"},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user