Show each sensor's longest report gap; stop recording volatile attributes
Choosing room and weather freshness limits required knowing how long each sensor normally goes without reporting, which HA does not show. Add max_age_seconds_24h to every source in input_quality: the largest report age seen at polls over the last 24 hours (hourly buckets, reset on reload, underestimates by up to one poll interval). input_quality and weather_comparison change every poll, so the Recorder stored a new attribute row every five minutes. Mark them unrecorded; they remain visible on the Status entity. Model coefficients and other attributes are still recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c0e4de832b
commit
4daba5028b
6 files changed
+64
-3
No files matched your search
@@ -524,3 +524,18 @@ class BoundaryTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.c._store.async_load.return_value = {'retired_learners': retired}
|
||||
await self.c.async_restore_model()
|
||||
self.assertEqual(list(self.c._retired), [f'sensor.old{i}' for i in range(6, 30)])
|
||||
|
||||
async def test_report_gap_maximum_is_exposed_per_sensor(self):
|
||||
await self.sample(2400) # the room then stays silent for 40 minutes
|
||||
self.states['sensor.outside'].last_reported = self.now
|
||||
data = await self.sample()
|
||||
room = data['input_quality']['rooms']['sensor.room']
|
||||
self.assertEqual((room['status'], room['max_age_seconds_24h']), ('stale', 2400))
|
||||
self.states['sensor.room'].last_reported = self.now
|
||||
self.states['sensor.outside'].last_reported = self.now
|
||||
data = await self.sample()
|
||||
room = data['input_quality']['rooms']['sensor.room']
|
||||
self.assertEqual((room['status'], room['age_seconds'], room['max_age_seconds_24h']),
|
||||
('valid', 0, 2400))
|
||||
weather = data['input_quality']['weather']['temperature']['sensor.outside']
|
||||
self.assertEqual(weather['max_age_seconds_24h'], 0) # kept reporting; tracked separately
|
||||
Reference in new issue
Block a user