Skip to content

Commit 541d94d

Browse files
authored
Record last_reported for KNX sensor entitiy states (home-assistant#154169)
1 parent c370c86 commit 541d94d

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

homeassistant/components/knx/sensor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def _create_sensor(xknx: XKNX, config: ConfigType) -> XknxSensor:
136136
name=config[CONF_NAME],
137137
group_address_state=config[SensorSchema.CONF_STATE_ADDRESS],
138138
sync_state=config[SensorSchema.CONF_SYNC_STATE],
139-
always_callback=config[SensorSchema.CONF_ALWAYS_CALLBACK],
139+
always_callback=True,
140140
value_type=config[CONF_TYPE],
141141
)
142142

@@ -159,7 +159,7 @@ def __init__(self, knx_module: KNXModule, config: ConfigType) -> None:
159159
SensorDeviceClass, self._device.ha_device_class()
160160
)
161161

162-
self._attr_force_update = self._device.always_callback
162+
self._attr_force_update = config[SensorSchema.CONF_ALWAYS_CALLBACK]
163163
self._attr_entity_category = config.get(CONF_ENTITY_CATEGORY)
164164
self._attr_unique_id = str(self._device.sensor_value.group_address_state)
165165
self._attr_native_unit_of_measurement = self._device.unit_of_measurement()

tests/components/knx/test_sensor.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
"""Test KNX sensor."""
22

3+
from freezegun.api import FrozenDateTimeFactory
4+
35
from homeassistant.components.knx.const import CONF_STATE_ADDRESS, CONF_SYNC_STATE
46
from homeassistant.components.knx.schema import SensorSchema
57
from homeassistant.const import CONF_NAME, CONF_TYPE, STATE_UNKNOWN
68
from homeassistant.core import HomeAssistant
79

810
from .conftest import KNXTestKit
911

10-
from tests.common import async_capture_events
12+
from tests.common import async_capture_events, async_fire_time_changed
1113

1214

1315
async def test_sensor(hass: HomeAssistant, knx: KNXTestKit) -> None:
@@ -41,6 +43,41 @@ async def test_sensor(hass: HomeAssistant, knx: KNXTestKit) -> None:
4143
await knx.assert_no_telegram()
4244

4345

46+
async def test_last_reported(
47+
hass: HomeAssistant,
48+
knx: KNXTestKit,
49+
freezer: FrozenDateTimeFactory,
50+
) -> None:
51+
"""Test KNX sensor with last_reported."""
52+
53+
await knx.setup_integration(
54+
{
55+
SensorSchema.PLATFORM: [
56+
{
57+
CONF_NAME: "test",
58+
CONF_STATE_ADDRESS: "1/1/1",
59+
CONF_SYNC_STATE: False,
60+
CONF_TYPE: "percentU8",
61+
},
62+
]
63+
}
64+
)
65+
events = async_capture_events(hass, "state_changed")
66+
67+
# receive initial telegram
68+
await knx.receive_write("1/1/1", (0x42,))
69+
first_reported = hass.states.get("sensor.test").last_reported
70+
assert len(events) == 1
71+
72+
# receive second telegram with identical payload
73+
freezer.tick(1)
74+
async_fire_time_changed(hass)
75+
await knx.receive_write("1/1/1", (0x42,))
76+
77+
assert first_reported != hass.states.get("sensor.test").last_reported
78+
assert len(events) == 1, events # last_reported shall not fire state_changed
79+
80+
4481
async def test_always_callback(hass: HomeAssistant, knx: KNXTestKit) -> None:
4582
"""Test KNX sensor with always_callback."""
4683

0 commit comments

Comments
 (0)