예제 #1
0
    async def async_step_zeroconf(
            self, discovery_info: zeroconf.ZeroconfServiceInfo) -> FlowResult:
        """Handle zeroconf discovery."""
        if not discovery_info.get(zeroconf.ATTR_NAME,
                                  "").startswith("Bosch SHC"):
            return self.async_abort(reason="not_bosch_shc")

        try:
            hosts = (discovery_info[zeroconf.ATTR_HOST] if isinstance(
                discovery_info[zeroconf.ATTR_HOST], list) else
                     [discovery_info[zeroconf.ATTR_HOST]])
            for host in hosts:
                if host.startswith("169."):  # skip link local address
                    continue
                self.info = await self._get_info(host)
                self.host = host
            if self.info is None or self.host is None:
                return self.async_abort(reason="cannot_connect")
        except SHCConnectionError:
            return self.async_abort(reason="cannot_connect")

        local_name = discovery_info[zeroconf.ATTR_HOSTNAME][:-1]
        node_name = local_name[:-len(".local")]

        await self.async_set_unique_id(self.info["unique_id"])
        self._abort_if_unique_id_configured({CONF_HOST: self.host})
        self.context["title_placeholders"] = {"name": node_name}
        return await self.async_step_confirm_discovery()
예제 #2
0
async def test_zeroconf_form_not_sonos(
        hass: core.HomeAssistant,
        zeroconf_payload: zeroconf.ZeroconfServiceInfo):
    """Test we abort on non-sonos devices."""
    mock_manager = hass.data[DATA_SONOS_DISCOVERY_MANAGER] = MagicMock()

    zeroconf_payload.hostname = "not-aaa"

    result = await hass.config_entries.flow.async_init(
        DOMAIN,
        context={"source": config_entries.SOURCE_ZEROCONF},
        data=zeroconf_payload,
    )
    assert result["type"] == "abort"
    assert result["reason"] == "not_sonos_device"
    assert len(mock_manager.mock_calls) == 0
예제 #3
0
async def test_zeroconf_flow_create_entry(
        hass: HomeAssistant, device1_requests_mock_standby: Mocker) -> None:
    """Test the zeroconf flow from start to finish."""
    result = await hass.config_entries.flow.async_init(
        DOMAIN,
        context={CONF_SOURCE: SOURCE_ZEROCONF},
        data=ZeroconfServiceInfo(
            host=DEVICE_1_IP,
            addresses=[DEVICE_1_IP],
            port=8090,
            hostname="Bose-SM2-060000000001.local.",
            type="_soundtouch._tcp.local.",
            name=f"{DEVICE_1_NAME}._soundtouch._tcp.local.",
            properties={
                "DESCRIPTION": "SoundTouch",
                "MAC": DEVICE_1_ID,
                "MANUFACTURER": "Bose Corporation",
                "MODEL": "SoundTouch",
            },
        ),
    )

    assert result.get("type") == FlowResultType.FORM
    assert result.get("step_id") == "zeroconf_confirm"
    assert result.get("description_placeholders") == {"name": DEVICE_1_NAME}

    with patch("homeassistant.components.soundtouch.async_setup_entry",
               return_value=True) as mock_setup_entry:
        result = await hass.config_entries.flow.async_configure(
            result["flow_id"], user_input={})

    assert len(mock_setup_entry.mock_calls) == 1

    assert result.get("type") == FlowResultType.CREATE_ENTRY
    assert result.get("title") == DEVICE_1_NAME
    assert result.get("data") == {
        CONF_HOST: DEVICE_1_IP,
    }
    assert "result" in result
    assert result["result"].unique_id == DEVICE_1_ID
    assert result["result"].title == DEVICE_1_NAME
예제 #4
0
TEST_PASSWORD2 = "test-password2"
TEST_HUB = "somfy_europe"
TEST_HUB2 = "hi_kumo_europe"
TEST_GATEWAY_ID = "1234-5678-9123"
TEST_GATEWAY_ID2 = "4321-5678-9123"

MOCK_GATEWAY_RESPONSE = [Mock(id=TEST_GATEWAY_ID)]
MOCK_GATEWAY2_RESPONSE = [Mock(id=TEST_GATEWAY_ID2)]

FAKE_ZERO_CONF_INFO = ZeroconfServiceInfo(
    host="192.168.0.51",
    addresses=["192.168.0.51"],
    port=443,
    hostname=f"gateway-{TEST_GATEWAY_ID}.local.",
    type="_kizbox._tcp.local.",
    name=f"gateway-{TEST_GATEWAY_ID}._kizbox._tcp.local.",
    properties={
        "api_version": "1",
        "gateway_pin": TEST_GATEWAY_ID,
        "fw_version": "2021.5.4-29",
    },
)


async def test_form(hass: HomeAssistant) -> None:
    """Test we get the form."""
    result = await hass.config_entries.flow.async_init(
        DOMAIN, context={"source": config_entries.SOURCE_USER})

    assert result["type"] == "form"
    assert result["errors"] == {}
예제 #5
0
TEST_HOST = "1.1.1.1"
TEST_HOSTNAME = "smileabcdef"
TEST_HOSTNAME2 = "stretchabc"
TEST_PASSWORD = "******"
TEST_PORT = 81
TEST_USERNAME = "******"
TEST_USERNAME2 = "stretch"

TEST_DISCOVERY = ZeroconfServiceInfo(
    host=TEST_HOST,
    addresses=[TEST_HOST],
    hostname=f"{TEST_HOSTNAME}.local.",
    name="mock_name",
    port=DEFAULT_PORT,
    properties={
        "product": "smile",
        "version": "1.2.3",
        "hostname": f"{TEST_HOSTNAME}.local.",
    },
    type="mock_type",
)

TEST_DISCOVERY2 = ZeroconfServiceInfo(
    host=TEST_HOST,
    addresses=[TEST_HOST],
    hostname=f"{TEST_HOSTNAME2}.local.",
    name="mock_name",
    port=DEFAULT_PORT,
    properties={
        "product": "stretch",
예제 #6
0
파일: __init__.py 프로젝트: rikroe/core
DEVICE_ID = "98F33163"
MODULE = "homeassistant.components.lookin"
MODULE_CONFIG_FLOW = "homeassistant.components.lookin.config_flow"
IP_ADDRESS = "127.0.0.1"

DEVICE_NAME = "Living Room"
DEFAULT_ENTRY_TITLE = DEVICE_NAME

ZC_NAME = f"LOOKin_{DEVICE_ID}"
ZC_TYPE = "_lookin._tcp."
ZEROCONF_DATA = ZeroconfServiceInfo(
    host=IP_ADDRESS,
    addresses=[IP_ADDRESS],
    hostname=f"{ZC_NAME.lower()}.local.",
    port=80,
    type=ZC_TYPE,
    name=ZC_NAME,
    properties={},
)


def _mocked_climate() -> Climate:
    climate = MagicMock(auto_spec=Climate)
    return climate


def _mocked_remote() -> Remote:
    remote = MagicMock(auto_spec=Remote)
    return remote