diff --git a/homeassistant/components/denonavr/receiver.py b/homeassistant/components/denonavr/receiver.py index 557427c8c41..f30469961df 100644 --- a/homeassistant/components/denonavr/receiver.py +++ b/homeassistant/components/denonavr/receiver.py @@ -39,6 +39,13 @@ class ConnectDenonAVR: or self._receiver.model_name is None or self._receiver.receiver_type is None ): + _LOGGER.error( + "Missing receiver information: manufacturer '%s', name '%s', model '%s', type '%s'", + self._receiver.manufacturer, + self._receiver.name, + self._receiver.model_name, + self._receiver.receiver_type, + ) return False _LOGGER.debug( diff --git a/homeassistant/components/devolo_home_control/sensor.py b/homeassistant/components/devolo_home_control/sensor.py index d0d3388ef17..0f02f6d0dd0 100644 --- a/homeassistant/components/devolo_home_control/sensor.py +++ b/homeassistant/components/devolo_home_control/sensor.py @@ -80,7 +80,7 @@ class DevoloMultiLevelDeviceEntity(DevoloDeviceEntity): def _sync(self, message=None): """Update the multi level sensor state.""" - if message[0].startswith("devolo.MultiLevelSensor"): + if message[0] == self._multi_level_sensor_property.element_uid: self._state = self._device_instance.multi_level_sensor_property[ message[0] ].value diff --git a/homeassistant/components/forked_daapd/config_flow.py b/homeassistant/components/forked_daapd/config_flow.py index d27c40af316..45ea8861d4a 100644 --- a/homeassistant/components/forked_daapd/config_flow.py +++ b/homeassistant/components/forked_daapd/config_flow.py @@ -133,7 +133,7 @@ class ForkedDaapdFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): if user_input is not None: # check for any entries with same host, abort if found for entry in self._async_current_entries(): - if entry.data[CONF_HOST] == user_input[CONF_HOST]: + if entry.data.get(CONF_HOST) == user_input[CONF_HOST]: return self.async_abort(reason="already_configured") validate_result = await self.validate_input(user_input) if validate_result[0] == "ok": # success diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index 8be62aa42f6..8100d3afd7e 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20200701.0"], + "requirements": ["home-assistant-frontend==20200702.0"], "dependencies": [ "api", "auth", diff --git a/homeassistant/components/gogogate2/config_flow.py b/homeassistant/components/gogogate2/config_flow.py index 8c33af6af10..bca340fa62b 100644 --- a/homeassistant/components/gogogate2/config_flow.py +++ b/homeassistant/components/gogogate2/config_flow.py @@ -63,7 +63,7 @@ class Gogogate2FlowHandler(ConfigFlow, domain=DOMAIN): CONF_IP_ADDRESS, default=user_input.get(CONF_IP_ADDRESS, "") ): str, vol.Required( - CONF_USERNAME, default=user_input.get(CONF_USERNAME, "admin") + CONF_USERNAME, default=user_input.get(CONF_USERNAME, "") ): str, vol.Required( CONF_PASSWORD, default=user_input.get(CONF_PASSWORD, "") diff --git a/homeassistant/components/gogogate2/manifest.json b/homeassistant/components/gogogate2/manifest.json index 98aabba43b8..588d68484f2 100644 --- a/homeassistant/components/gogogate2/manifest.json +++ b/homeassistant/components/gogogate2/manifest.json @@ -3,6 +3,6 @@ "name": "Gogogate2", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/gogogate2", - "requirements": ["gogogate2-api==1.0.3"], + "requirements": ["gogogate2-api==1.0.4"], "codeowners": ["@vangorra"] } diff --git a/homeassistant/components/gogogate2/strings.json b/homeassistant/components/gogogate2/strings.json index d519d9b9ea0..bbd4e8d80d1 100644 --- a/homeassistant/components/gogogate2/strings.json +++ b/homeassistant/components/gogogate2/strings.json @@ -10,7 +10,7 @@ "step": { "user": { "title": "Setup GogoGate2", - "description": "Provide requisite information below. Note: only the 'admin' user is known to work.", + "description": "Provide requisite information below.", "data": { "ip_address": "IP Address", "username": "[%key:common::config_flow::data::username%]", diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index 6939c1f7073..d427b2be60d 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -325,7 +325,7 @@ async def async_setup(hass, config): if errors: _LOGGER.error(errors) hass.components.persistent_notification.async_create( - "Config error. See [the logs](/developer-tools/logs) for details.", + "Config error. See [the logs](/config/logs) for details.", "Config validating", f"{HASS_DOMAIN}.check_config", ) diff --git a/homeassistant/components/homeassistant/__init__.py b/homeassistant/components/homeassistant/__init__.py index 83166ba4cce..f1b8d4e87d6 100644 --- a/homeassistant/components/homeassistant/__init__.py +++ b/homeassistant/components/homeassistant/__init__.py @@ -112,7 +112,7 @@ async def async_setup(hass: ha.HomeAssistant, config: dict) -> bool: if errors: _LOGGER.error(errors) hass.components.persistent_notification.async_create( - "Config error. See [the logs](/developer-tools/logs) for details.", + "Config error. See [the logs](/config/logs) for details.", "Config validating", f"{ha.DOMAIN}.check_config", ) diff --git a/homeassistant/components/proxmoxve/manifest.json b/homeassistant/components/proxmoxve/manifest.json index 4040ca7c469..a47ce0a28ee 100644 --- a/homeassistant/components/proxmoxve/manifest.json +++ b/homeassistant/components/proxmoxve/manifest.json @@ -3,5 +3,5 @@ "name": "Proxmox VE", "documentation": "https://www.home-assistant.io/integrations/proxmoxve", "codeowners": ["@k4ds3", "@jhollowe"], - "requirements": ["proxmoxer==1.1.0"] + "requirements": ["proxmoxer==1.1.1"] } diff --git a/homeassistant/components/safe_mode/__init__.py b/homeassistant/components/safe_mode/__init__.py index aef6834303b..94bd95aabe0 100644 --- a/homeassistant/components/safe_mode/__init__.py +++ b/homeassistant/components/safe_mode/__init__.py @@ -9,7 +9,7 @@ async def async_setup(hass: HomeAssistant, config: dict): """Set up the Safe Mode component.""" persistent_notification.async_create( hass, - "Home Assistant is running in safe mode. Check [the error log](/developer-tools/logs) to see what went wrong.", + "Home Assistant is running in safe mode. Check [the error log](/config/logs) to see what went wrong.", "Safe Mode", ) return True diff --git a/homeassistant/components/smappee/manifest.json b/homeassistant/components/smappee/manifest.json index e316273f3ed..3ca8dc4b1b6 100644 --- a/homeassistant/components/smappee/manifest.json +++ b/homeassistant/components/smappee/manifest.json @@ -5,7 +5,7 @@ "documentation": "https://www.home-assistant.io/integrations/smappee", "dependencies": ["http"], "requirements": [ - "pysmappee==0.1.0" + "pysmappee==0.1.2" ], "codeowners": [ "@bsmappee" diff --git a/homeassistant/components/withings/common.py b/homeassistant/components/withings/common.py index b7c3cec6d9b..5d8d5799fc1 100644 --- a/homeassistant/components/withings/common.py +++ b/homeassistant/components/withings/common.py @@ -770,8 +770,13 @@ class DataManager: response = await self._hass.async_add_executor_job(self._api.measure_get_meas) - groups = query_measure_groups( - response, MeasureTypes.ANY, MeasureGroupAttribs.UNAMBIGUOUS + # Sort from oldest to newest. + groups = sorted( + query_measure_groups( + response, MeasureTypes.ANY, MeasureGroupAttribs.UNAMBIGUOUS + ), + key=lambda group: group.created.datetime, + reverse=False, ) return { diff --git a/homeassistant/const.py b/homeassistant/const.py index f72c0011b17..dffaf87e1c2 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 112 -PATCH_VERSION = "0" +PATCH_VERSION = "1" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 8045e7b808b..79cc585d735 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -13,7 +13,7 @@ defusedxml==0.6.0 distro==1.5.0 emoji==0.5.4 hass-nabucasa==0.34.7 -home-assistant-frontend==20200701.0 +home-assistant-frontend==20200702.0 importlib-metadata==1.6.0;python_version<'3.8' jinja2>=2.11.1 netdisco==2.7.1 diff --git a/requirements_all.txt b/requirements_all.txt index 3dce8223d59..9b2133e9d34 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -660,7 +660,7 @@ glances_api==0.2.0 gntp==1.0.3 # homeassistant.components.gogogate2 -gogogate2-api==1.0.3 +gogogate2-api==1.0.4 # homeassistant.components.google google-api-python-client==1.6.4 @@ -738,7 +738,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200701.0 +home-assistant-frontend==20200702.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 @@ -1125,7 +1125,7 @@ prometheus_client==0.7.1 protobuf==3.6.1 # homeassistant.components.proxmoxve -proxmoxer==1.1.0 +proxmoxer==1.1.1 # homeassistant.components.systemmonitor psutil==5.7.0 @@ -1610,7 +1610,7 @@ pysignalclirestapi==0.3.4 pysma==0.3.5 # homeassistant.components.smappee -pysmappee==0.1.0 +pysmappee==0.1.2 # homeassistant.components.smartthings pysmartapp==0.3.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 6a755a2db01..8ec86122a41 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -310,7 +310,7 @@ gios==0.1.1 glances_api==0.2.0 # homeassistant.components.gogogate2 -gogogate2-api==1.0.3 +gogogate2-api==1.0.4 # homeassistant.components.google google-api-python-client==1.6.4 @@ -343,7 +343,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200701.0 +home-assistant-frontend==20200702.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 @@ -715,7 +715,7 @@ pysignalclirestapi==0.3.4 pysma==0.3.5 # homeassistant.components.smappee -pysmappee==0.1.0 +pysmappee==0.1.2 # homeassistant.components.smartthings pysmartapp==0.3.2 diff --git a/tests/components/withings/test_sensor.py b/tests/components/withings/test_sensor.py index abfc4758251..3370c23e3d8 100644 --- a/tests/components/withings/test_sensor.py +++ b/tests/components/withings/test_sensor.py @@ -1,5 +1,4 @@ """Tests for the Withings component.""" -import time from typing import Any from unittest.mock import patch @@ -40,8 +39,8 @@ PERSON0 = new_profile_config( MeasureGetMeasGroup( attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER, category=MeasureGetMeasGroupCategory.REAL, - created=time.time(), - date=time.time(), + created=arrow.utcnow().shift(hours=-1), + date=arrow.utcnow().shift(hours=-1), deviceid="DEV_ID", grpid=1, measures=( @@ -87,11 +86,61 @@ PERSON0 = new_profile_config( ), ), ), + MeasureGetMeasGroup( + attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER, + category=MeasureGetMeasGroupCategory.REAL, + created=arrow.utcnow().shift(hours=-2), + date=arrow.utcnow().shift(hours=-2), + deviceid="DEV_ID", + grpid=1, + measures=( + MeasureGetMeasMeasure(type=MeasureType.WEIGHT, unit=0, value=71), + MeasureGetMeasMeasure( + type=MeasureType.FAT_MASS_WEIGHT, unit=0, value=51 + ), + MeasureGetMeasMeasure( + type=MeasureType.FAT_FREE_MASS, unit=0, value=61 + ), + MeasureGetMeasMeasure( + type=MeasureType.MUSCLE_MASS, unit=0, value=51 + ), + MeasureGetMeasMeasure(type=MeasureType.BONE_MASS, unit=0, value=11), + MeasureGetMeasMeasure(type=MeasureType.HEIGHT, unit=0, value=21), + MeasureGetMeasMeasure( + type=MeasureType.TEMPERATURE, unit=0, value=41 + ), + MeasureGetMeasMeasure( + type=MeasureType.BODY_TEMPERATURE, unit=0, value=41 + ), + MeasureGetMeasMeasure( + type=MeasureType.SKIN_TEMPERATURE, unit=0, value=21 + ), + MeasureGetMeasMeasure( + type=MeasureType.FAT_RATIO, unit=-3, value=71 + ), + MeasureGetMeasMeasure( + type=MeasureType.DIASTOLIC_BLOOD_PRESSURE, unit=0, value=71 + ), + MeasureGetMeasMeasure( + type=MeasureType.SYSTOLIC_BLOOD_PRESSURE, unit=0, value=101 + ), + MeasureGetMeasMeasure( + type=MeasureType.HEART_RATE, unit=0, value=61 + ), + MeasureGetMeasMeasure(type=MeasureType.SP02, unit=-2, value=96), + MeasureGetMeasMeasure( + type=MeasureType.HYDRATION, unit=-2, value=96 + ), + MeasureGetMeasMeasure( + type=MeasureType.PULSE_WAVE_VELOCITY, unit=0, value=101 + ), + ), + ), MeasureGetMeasGroup( attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER_AMBIGUOUS, category=MeasureGetMeasGroupCategory.REAL, - created=time.time(), - date=time.time(), + created=arrow.utcnow(), + date=arrow.utcnow(), deviceid="DEV_ID", grpid=1, measures=(