diff --git a/homeassistant/components/updater/__init__.py b/homeassistant/components/updater/__init__.py index b7e8e47e8c2..cf6c7b6c32d 100644 --- a/homeassistant/components/updater/__init__.py +++ b/homeassistant/components/updater/__init__.py @@ -21,6 +21,7 @@ import homeassistant.util.dt as dt_util _LOGGER = logging.getLogger(__name__) ATTR_RELEASE_NOTES = 'release_notes' +ATTR_NEWEST_VERSION = 'newest_version' CONF_REPORTING = 'reporting' CONF_COMPONENT_REPORTING = 'include_used_components' @@ -95,15 +96,24 @@ async def async_setup(hass, config): newest = hass.components.hassio.get_homeassistant_version() # Validate version + update_available = False if StrictVersion(newest) > StrictVersion(current_version): _LOGGER.info("The latest available version is %s", newest) - hass.states.async_set( - ENTITY_ID, newest, {ATTR_FRIENDLY_NAME: 'Update Available', - ATTR_RELEASE_NOTES: releasenotes} - ) + update_available = True elif StrictVersion(newest) == StrictVersion(current_version): _LOGGER.info( "You are on the latest version (%s) of Home Assistant", newest) + elif StrictVersion(newest) < StrictVersion(current_version): + _LOGGER.warning( + "You are before the latest version (%s) of Home Assistant", + newest) + + hass.states.async_set( + ENTITY_ID, 'on' if update_available else 'off', { + ATTR_FRIENDLY_NAME: 'Update Available', + ATTR_RELEASE_NOTES: releasenotes, + ATTR_NEWEST_VERSION: newest} + ) # Update daily, start 1 hour after startup _dt = dt_util.utcnow() + timedelta(hours=1) diff --git a/tests/components/updater/test_init.py b/tests/components/updater/test_init.py index bde6c3b0c61..24c85930e4c 100644 --- a/tests/components/updater/test_init.py +++ b/tests/components/updater/test_init.py @@ -46,7 +46,7 @@ def mock_get_uuid(): @asyncio.coroutine -def test_new_version_shows_entity_after_hour( +def test_new_version_shows_entity_true( hass, mock_get_uuid, mock_get_newest_version): """Test if new entity is created if new version is available.""" mock_get_uuid.return_value = MOCK_HUUID @@ -61,11 +61,13 @@ def test_new_version_shows_entity_after_hour( async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1)) yield from hass.async_block_till_done() - assert hass.states.is_state(updater.ENTITY_ID, NEW_VERSION) + assert hass.states.is_state(updater.ENTITY_ID, 'on') + assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \ + NEW_VERSION @asyncio.coroutine -def test_same_version_not_show_entity( +def test_same_version_shows_entity_false( hass, mock_get_uuid, mock_get_newest_version): """Test if new entity is created if new version is available.""" mock_get_uuid.return_value = MOCK_HUUID @@ -80,7 +82,9 @@ def test_same_version_not_show_entity( async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1)) yield from hass.async_block_till_done() - assert hass.states.get(updater.ENTITY_ID) is None + assert hass.states.is_state(updater.ENTITY_ID, 'off') + assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \ + MOCK_VERSION @asyncio.coroutine @@ -100,7 +104,7 @@ def test_disable_reporting(hass, mock_get_uuid, mock_get_newest_version): async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1)) yield from hass.async_block_till_done() - assert hass.states.get(updater.ENTITY_ID) is None + assert hass.states.is_state(updater.ENTITY_ID, 'off') res = yield from updater.get_newest_version(hass, MOCK_HUUID, MOCK_CONFIG) call = mock_get_newest_version.mock_calls[0][1] assert call[0] is hass @@ -184,4 +188,6 @@ def test_new_version_shows_entity_after_hour_hassio( async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1)) yield from hass.async_block_till_done() - assert hass.states.is_state(updater.ENTITY_ID, "999.0") + assert hass.states.is_state(updater.ENTITY_ID, 'on') + assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \ + "999.0"