diff --git a/homeassistant/components/cloud/__init__.py b/homeassistant/components/cloud/__init__.py index ee0cd0c0090..1ad76c3d7aa 100644 --- a/homeassistant/components/cloud/__init__.py +++ b/homeassistant/components/cloud/__init__.py @@ -189,7 +189,12 @@ async def async_setup(hass, config): hass.helpers.service.async_register_admin_service( DOMAIN, SERVICE_REMOTE_DISCONNECT, _service_handler) + async def _on_connect(): + """Discover RemoteUI binary sensor.""" + hass.async_create_task(hass.helpers.discovery.async_load_platform( + 'binary_sensor', DOMAIN, {}, config)) + + cloud.iot.register_on_connect(_on_connect) + await http_api.async_setup(hass) - hass.async_create_task(hass.helpers.discovery.async_load_platform( - 'binary_sensor', DOMAIN, {}, config)) return True diff --git a/homeassistant/components/cloud/client.py b/homeassistant/components/cloud/client.py index da89f8331a9..9e24b619460 100644 --- a/homeassistant/components/cloud/client.py +++ b/homeassistant/components/cloud/client.py @@ -150,8 +150,11 @@ class CloudClient(Interface): ) # Fix AgentUserId - cloud = self._hass.data[DOMAIN] - answer['payload']['agentUserId'] = cloud.claims['cognito:username'] + try: + cloud = self._hass.data[DOMAIN] + answer['payload']['agentUserId'] = cloud.claims['cognito:username'] + except (TypeError, KeyError): + return ga.turned_off_response(payload) return answer diff --git a/homeassistant/components/cloud/http_api.py b/homeassistant/components/cloud/http_api.py index d997d98d06e..fe13172d7fe 100644 --- a/homeassistant/components/cloud/http_api.py +++ b/homeassistant/components/cloud/http_api.py @@ -105,6 +105,8 @@ async def async_setup(hass): (400, "User does not exist."), auth.UserNotConfirmed: (400, 'Email not confirmed.'), + auth.UserExists: + (400, 'An account with the given email already exists.'), auth.Unauthenticated: (401, 'Authentication failed.'), auth.PasswordChangeRequired: diff --git a/homeassistant/components/cloud/manifest.json b/homeassistant/components/cloud/manifest.json index 61e9600302f..863e3e86da4 100644 --- a/homeassistant/components/cloud/manifest.json +++ b/homeassistant/components/cloud/manifest.json @@ -3,7 +3,7 @@ "name": "Cloud", "documentation": "https://www.home-assistant.io/components/cloud", "requirements": [ - "hass-nabucasa==0.11" + "hass-nabucasa==0.12" ], "dependencies": [ "http", diff --git a/requirements_all.txt b/requirements_all.txt index dab68d42d80..5f16a98bec1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -518,7 +518,7 @@ habitipy==0.2.0 hangups==0.4.6 # homeassistant.components.cloud -hass-nabucasa==0.11 +hass-nabucasa==0.12 # homeassistant.components.mqtt hbmqtt==0.9.4 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 95d899d06fb..137f9fd1450 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -124,7 +124,7 @@ ha-ffmpeg==2.0 hangups==0.4.6 # homeassistant.components.cloud -hass-nabucasa==0.11 +hass-nabucasa==0.12 # homeassistant.components.mqtt hbmqtt==0.9.4 diff --git a/tests/components/cloud/test_binary_sensor.py b/tests/components/cloud/test_binary_sensor.py index f6d8783a609..ed43e403ef0 100644 --- a/tests/components/cloud/test_binary_sensor.py +++ b/tests/components/cloud/test_binary_sensor.py @@ -11,6 +11,15 @@ async def test_remote_connection_sensor(hass): bin_sensor.WAIT_UNTIL_CHANGE = 0 assert await async_setup_component(hass, 'cloud', {'cloud': {}}) + await hass.async_block_till_done() + + assert hass.states.get('binary_sensor.remote_ui') is None + + # Fake connection/discovery + org_cloud = hass.data['cloud'] + await org_cloud.iot._on_connect[-1]() + + # Mock test env cloud = hass.data['cloud'] = Mock() cloud.remote.certificate = None await hass.async_block_till_done()