mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Fix withings wrong sleep state entry (#29651)
* Fixing issue where wrong sleep state entry was being used. closes #28370,#29397 * Fixing formatting. * Sorting imports to get black checks to pass. * Using lambda for getting latest sleep serie.
This commit is contained in:
parent
899f6cf1a3
commit
66d2f5f61d
@ -7,11 +7,11 @@ import voluptuous as vol
|
|||||||
from withings_api import WithingsAuth
|
from withings_api import WithingsAuth
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.helpers import config_entry_oauth2_flow, config_validation as cv
|
||||||
from homeassistant.helpers.typing import ConfigType, HomeAssistantType
|
from homeassistant.helpers.typing import ConfigType, HomeAssistantType
|
||||||
from homeassistant.helpers import config_validation as cv, config_entry_oauth2_flow
|
|
||||||
|
|
||||||
from . import config_flow, const
|
from . import config_flow, const
|
||||||
from .common import _LOGGER, get_data_manager, NotAuthenticatedError
|
from .common import _LOGGER, NotAuthenticatedError, get_data_manager
|
||||||
|
|
||||||
DOMAIN = const.DOMAIN
|
DOMAIN = const.DOMAIN
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
"""Common code for Withings."""
|
"""Common code for Withings."""
|
||||||
|
from asyncio import run_coroutine_threadsafe
|
||||||
import datetime
|
import datetime
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import logging
|
import logging
|
||||||
@ -6,15 +7,14 @@ import re
|
|||||||
import time
|
import time
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
from asyncio import run_coroutine_threadsafe
|
|
||||||
import requests
|
import requests
|
||||||
from withings_api import (
|
from withings_api import (
|
||||||
AbstractWithingsApi,
|
AbstractWithingsApi,
|
||||||
SleepGetResponse,
|
|
||||||
MeasureGetMeasResponse,
|
MeasureGetMeasResponse,
|
||||||
|
SleepGetResponse,
|
||||||
SleepGetSummaryResponse,
|
SleepGetSummaryResponse,
|
||||||
)
|
)
|
||||||
from withings_api.common import UnauthorizedException, AuthFailedException
|
from withings_api.common import AuthFailedException, UnauthorizedException
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
@ -2,21 +2,21 @@
|
|||||||
from typing import Callable, List, Union
|
from typing import Callable, List, Union
|
||||||
|
|
||||||
from withings_api.common import (
|
from withings_api.common import (
|
||||||
MeasureType,
|
|
||||||
GetSleepSummaryField,
|
GetSleepSummaryField,
|
||||||
MeasureGetMeasResponse,
|
MeasureGetMeasResponse,
|
||||||
|
MeasureGroupAttribs,
|
||||||
|
MeasureType,
|
||||||
SleepGetResponse,
|
SleepGetResponse,
|
||||||
SleepGetSummaryResponse,
|
SleepGetSummaryResponse,
|
||||||
get_measure_value,
|
|
||||||
MeasureGroupAttribs,
|
|
||||||
SleepState,
|
SleepState,
|
||||||
|
get_measure_value,
|
||||||
)
|
)
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers import config_entry_oauth2_flow
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.util import slugify
|
from homeassistant.util import slugify
|
||||||
from homeassistant.helpers import config_entry_oauth2_flow
|
|
||||||
|
|
||||||
from . import const
|
from . import const
|
||||||
from .common import _LOGGER, WithingsDataManager, get_data_manager
|
from .common import _LOGGER, WithingsDataManager, get_data_manager
|
||||||
@ -382,7 +382,8 @@ class WithingsHealthSensor(Entity):
|
|||||||
self._state = None
|
self._state = None
|
||||||
return
|
return
|
||||||
|
|
||||||
serie = data.series[len(data.series) - 1]
|
sorted_series = sorted(data.series, key=lambda serie: serie.startdate)
|
||||||
|
serie = sorted_series[len(sorted_series) - 1]
|
||||||
state = None
|
state = None
|
||||||
if serie.state == SleepState.AWAKE:
|
if serie.state == SleepState.AWAKE:
|
||||||
state = const.STATE_AWAKE
|
state = const.STATE_AWAKE
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
"""Tests for the Withings component."""
|
"""Tests for the Withings component."""
|
||||||
from asynctest import MagicMock
|
from asynctest import MagicMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from withings_api import WithingsApi
|
from withings_api import WithingsApi
|
||||||
from withings_api.common import UnauthorizedException, TimeoutException
|
from withings_api.common import TimeoutException, UnauthorizedException
|
||||||
|
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
|
||||||
from homeassistant.components.withings.common import (
|
from homeassistant.components.withings.common import (
|
||||||
NotAuthenticatedError,
|
NotAuthenticatedError,
|
||||||
WithingsDataManager,
|
WithingsDataManager,
|
||||||
)
|
)
|
||||||
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="withings_api")
|
@pytest.fixture(name="withings_api")
|
||||||
|
@ -10,26 +10,26 @@ from withings_api.common import SleepModel, SleepState
|
|||||||
|
|
||||||
import homeassistant.components.http as http
|
import homeassistant.components.http as http
|
||||||
from homeassistant.components.withings import (
|
from homeassistant.components.withings import (
|
||||||
|
CONFIG_SCHEMA,
|
||||||
async_setup,
|
async_setup,
|
||||||
async_setup_entry,
|
async_setup_entry,
|
||||||
const,
|
const,
|
||||||
CONFIG_SCHEMA,
|
|
||||||
)
|
)
|
||||||
from homeassistant.const import STATE_UNKNOWN
|
from homeassistant.const import STATE_UNKNOWN
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .common import (
|
from .common import (
|
||||||
assert_state_equals,
|
|
||||||
configure_integration,
|
|
||||||
setup_hass,
|
|
||||||
WITHINGS_GET_DEVICE_RESPONSE,
|
WITHINGS_GET_DEVICE_RESPONSE,
|
||||||
WITHINGS_GET_DEVICE_RESPONSE_EMPTY,
|
WITHINGS_GET_DEVICE_RESPONSE_EMPTY,
|
||||||
|
WITHINGS_MEASURES_RESPONSE,
|
||||||
|
WITHINGS_MEASURES_RESPONSE_EMPTY,
|
||||||
WITHINGS_SLEEP_RESPONSE,
|
WITHINGS_SLEEP_RESPONSE,
|
||||||
WITHINGS_SLEEP_RESPONSE_EMPTY,
|
WITHINGS_SLEEP_RESPONSE_EMPTY,
|
||||||
WITHINGS_SLEEP_SUMMARY_RESPONSE,
|
WITHINGS_SLEEP_SUMMARY_RESPONSE,
|
||||||
WITHINGS_SLEEP_SUMMARY_RESPONSE_EMPTY,
|
WITHINGS_SLEEP_SUMMARY_RESPONSE_EMPTY,
|
||||||
WITHINGS_MEASURES_RESPONSE,
|
assert_state_equals,
|
||||||
WITHINGS_MEASURES_RESPONSE_EMPTY,
|
configure_integration,
|
||||||
|
setup_hass,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -308,8 +308,13 @@ async def test_full_setup(hass: HomeAssistant, aiohttp_client, aioclient_mock) -
|
|||||||
{
|
{
|
||||||
"startdate": "2019-02-01 00:00:00",
|
"startdate": "2019-02-01 00:00:00",
|
||||||
"enddate": "2019-02-01 01:00:00",
|
"enddate": "2019-02-01 01:00:00",
|
||||||
|
"state": SleepState.REM.real,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"startdate": "2019-02-01 01:00:00",
|
||||||
|
"enddate": "2019-02-01 02:00:00",
|
||||||
"state": SleepState.AWAKE.real,
|
"state": SleepState.AWAKE.real,
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -329,11 +334,16 @@ async def test_full_setup(hass: HomeAssistant, aiohttp_client, aioclient_mock) -
|
|||||||
"body": {
|
"body": {
|
||||||
"model": SleepModel.TRACKER.real,
|
"model": SleepModel.TRACKER.real,
|
||||||
"series": [
|
"series": [
|
||||||
|
{
|
||||||
|
"startdate": "2019-02-01 01:00:00",
|
||||||
|
"enddate": "2019-02-01 02:00:00",
|
||||||
|
"state": SleepState.LIGHT.real,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"startdate": "2019-02-01 00:00:00",
|
"startdate": "2019-02-01 00:00:00",
|
||||||
"enddate": "2019-02-01 01:00:00",
|
"enddate": "2019-02-01 01:00:00",
|
||||||
"state": SleepState.LIGHT.real,
|
"state": SleepState.REM.real,
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -356,8 +366,18 @@ async def test_full_setup(hass: HomeAssistant, aiohttp_client, aioclient_mock) -
|
|||||||
{
|
{
|
||||||
"startdate": "2019-02-01 00:00:00",
|
"startdate": "2019-02-01 00:00:00",
|
||||||
"enddate": "2019-02-01 01:00:00",
|
"enddate": "2019-02-01 01:00:00",
|
||||||
|
"state": SleepState.LIGHT.real,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"startdate": "2019-02-01 02:00:00",
|
||||||
|
"enddate": "2019-02-01 03:00:00",
|
||||||
"state": SleepState.REM.real,
|
"state": SleepState.REM.real,
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"startdate": "2019-02-01 01:00:00",
|
||||||
|
"enddate": "2019-02-01 02:00:00",
|
||||||
|
"state": SleepState.AWAKE.real,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user