spaceapi: fix sensor values (#132099)

This commit is contained in:
Xiretza 2024-12-10 12:47:20 +00:00 committed by GitHub
parent 25d092c8eb
commit 6f3a230524
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 42 additions and 7 deletions

View File

@ -1,6 +1,7 @@
"""Support for the SpaceAPI.""" """Support for the SpaceAPI."""
from contextlib import suppress from contextlib import suppress
import math
import voluptuous as vol import voluptuous as vol
@ -254,7 +255,17 @@ class APISpaceApiView(HomeAssistantView):
"""Get data from a sensor.""" """Get data from a sensor."""
if not (sensor_state := hass.states.get(sensor)): if not (sensor_state := hass.states.get(sensor)):
return None return None
sensor_data = {ATTR_NAME: sensor_state.name, ATTR_VALUE: sensor_state.state}
# SpaceAPI sensor values must be numbers
try:
state = float(sensor_state.state)
except ValueError:
state = math.nan
sensor_data = {
ATTR_NAME: sensor_state.name,
ATTR_VALUE: state,
}
if ATTR_SENSOR_LOCATION in sensor_state.attributes: if ATTR_SENSOR_LOCATION in sensor_state.attributes:
sensor_data[ATTR_LOCATION] = sensor_state.attributes[ATTR_SENSOR_LOCATION] sensor_data[ATTR_LOCATION] = sensor_state.attributes[ATTR_SENSOR_LOCATION]
else: else:

View File

@ -6,7 +6,12 @@ from unittest.mock import patch
from aiohttp.test_utils import TestClient from aiohttp.test_utils import TestClient
import pytest import pytest
from homeassistant.components.spaceapi import DOMAIN, SPACEAPI_VERSION, URL_API_SPACEAPI from homeassistant.components.spaceapi import (
ATTR_SENSOR_LOCATION,
DOMAIN,
SPACEAPI_VERSION,
URL_API_SPACEAPI,
)
from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, UnitOfTemperature from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, UnitOfTemperature
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -27,7 +32,7 @@ CONFIG = {
"icon_closed": "https://home-assistant.io/close.png", "icon_closed": "https://home-assistant.io/close.png",
}, },
"sensors": { "sensors": {
"temperature": ["test.temp1", "test.temp2"], "temperature": ["test.temp1", "test.temp2", "test.temp3"],
"humidity": ["test.hum1"], "humidity": ["test.hum1"],
}, },
"spacefed": {"spacenet": True, "spacesaml": False, "spacephone": True}, "spacefed": {"spacenet": True, "spacesaml": False, "spacephone": True},
@ -67,17 +72,23 @@ SENSOR_OUTPUT = {
"location": "Home", "location": "Home",
"name": "temp1", "name": "temp1",
"unit": UnitOfTemperature.CELSIUS, "unit": UnitOfTemperature.CELSIUS,
"value": "25", "value": 25.0,
},
{
"location": "outside",
"name": "temp2",
"unit": UnitOfTemperature.CELSIUS,
"value": 23.0,
}, },
{ {
"location": "Home", "location": "Home",
"name": "temp2", "name": "temp3",
"unit": UnitOfTemperature.CELSIUS, "unit": UnitOfTemperature.CELSIUS,
"value": "23", "value": None,
}, },
], ],
"humidity": [ "humidity": [
{"location": "Home", "name": "hum1", "unit": PERCENTAGE, "value": "88"} {"location": "Home", "name": "hum1", "unit": PERCENTAGE, "value": 88.0}
], ],
} }
@ -96,6 +107,19 @@ def mock_client(hass: HomeAssistant, hass_client: ClientSessionGenerator) -> Tes
hass.states.async_set( hass.states.async_set(
"test.temp2", "test.temp2",
23, 23,
attributes={
ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.CELSIUS,
ATTR_SENSOR_LOCATION: "outside",
},
)
hass.states.async_set(
"test.temp3",
"foo",
attributes={ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.CELSIUS},
)
hass.states.async_set(
"test.temp3",
"foo",
attributes={ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.CELSIUS}, attributes={ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.CELSIUS},
) )
hass.states.async_set( hass.states.async_set(