Skip to content

Commit 8256401

Browse files
authored
expose schedule id as an extra state attribute in Netatmo (home-assistant#147076)
1 parent ab187f3 commit 8256401

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

homeassistant/components/netatmo/climate.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
ATTR_HEATING_POWER_REQUEST,
3939
ATTR_SCHEDULE_NAME,
4040
ATTR_SELECTED_SCHEDULE,
41+
ATTR_SELECTED_SCHEDULE_ID,
4142
ATTR_TARGET_TEMPERATURE,
4243
ATTR_TIME_PERIOD,
4344
DATA_SCHEDULES,
@@ -251,16 +252,22 @@ def handle_event(self, event: dict) -> None:
251252
if data["event_type"] == EVENT_TYPE_SCHEDULE:
252253
# handle schedule change
253254
if "schedule_id" in data:
255+
selected_schedule = self.hass.data[DOMAIN][DATA_SCHEDULES][
256+
self.home.entity_id
257+
].get(data["schedule_id"])
254258
self._selected_schedule = getattr(
255-
self.hass.data[DOMAIN][DATA_SCHEDULES][self.home.entity_id].get(
256-
data["schedule_id"]
257-
),
259+
selected_schedule,
258260
"name",
259261
None,
260262
)
261263
self._attr_extra_state_attributes[ATTR_SELECTED_SCHEDULE] = (
262264
self._selected_schedule
263265
)
266+
267+
self._attr_extra_state_attributes[ATTR_SELECTED_SCHEDULE_ID] = getattr(
268+
selected_schedule, "entity_id", None
269+
)
270+
264271
self.async_write_ha_state()
265272
self.data_handler.async_force_update(self._signal_name)
266273
# ignore other schedule events
@@ -420,12 +427,14 @@ def async_update_callback(self) -> None:
420427
self._attr_hvac_mode = HVAC_MAP_NETATMO[self._attr_preset_mode]
421428
self._away = self._attr_hvac_mode == HVAC_MAP_NETATMO[STATE_NETATMO_AWAY]
422429

423-
self._selected_schedule = getattr(
424-
self.home.get_selected_schedule(), "name", None
425-
)
430+
selected_schedule = self.home.get_selected_schedule()
431+
self._selected_schedule = getattr(selected_schedule, "name", None)
426432
self._attr_extra_state_attributes[ATTR_SELECTED_SCHEDULE] = (
427433
self._selected_schedule
428434
)
435+
self._attr_extra_state_attributes[ATTR_SELECTED_SCHEDULE_ID] = getattr(
436+
selected_schedule, "entity_id", None
437+
)
429438

430439
if self.device_type == NA_VALVE:
431440
self._attr_extra_state_attributes[ATTR_HEATING_POWER_REQUEST] = (

homeassistant/components/netatmo/const.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
ATTR_SCHEDULE_ID = "schedule_id"
9696
ATTR_SCHEDULE_NAME = "schedule_name"
9797
ATTR_SELECTED_SCHEDULE = "selected_schedule"
98+
ATTR_SELECTED_SCHEDULE_ID = "selected_schedule_id"
9899
ATTR_TARGET_TEMPERATURE = "target_temperature"
99100
ATTR_TIME_PERIOD = "time_period"
100101

tests/components/netatmo/snapshots/test_climate.ambr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@
147147
'schedule',
148148
]),
149149
'selected_schedule': 'Default',
150+
'selected_schedule_id': '591b54a2764ff4d50d8b5795',
150151
'supported_features': <ClimateEntityFeature: 401>,
151152
'target_temp_step': 0.5,
152153
'temperature': 7,
@@ -229,6 +230,7 @@
229230
'schedule',
230231
]),
231232
'selected_schedule': 'Default',
233+
'selected_schedule_id': '591b54a2764ff4d50d8b5795',
232234
'supported_features': <ClimateEntityFeature: 401>,
233235
'target_temp_step': 0.5,
234236
'temperature': 22,
@@ -312,6 +314,7 @@
312314
'schedule',
313315
]),
314316
'selected_schedule': 'Default',
317+
'selected_schedule_id': '591b54a2764ff4d50d8b5795',
315318
'supported_features': <ClimateEntityFeature: 401>,
316319
'target_temp_step': 0.5,
317320
'temperature': 7,
@@ -396,6 +399,7 @@
396399
'schedule',
397400
]),
398401
'selected_schedule': 'Default',
402+
'selected_schedule_id': '591b54a2764ff4d50d8b5795',
399403
'supported_features': <ClimateEntityFeature: 401>,
400404
'target_temp_step': 0.5,
401405
'temperature': 12,

tests/components/netatmo/test_climate.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,13 @@ async def test_service_schedule_thermostats(
681681
webhook_id = config_entry.data[CONF_WEBHOOK_ID]
682682
climate_entity_livingroom = "climate.livingroom"
683683

684+
assert (
685+
hass.states.get(climate_entity_livingroom).attributes.get(
686+
"selected_schedule_id"
687+
)
688+
== "591b54a2764ff4d50d8b5795"
689+
)
690+
684691
# Test setting a valid schedule
685692
with patch("pyatmo.home.Home.async_switch_schedule") as mock_switch_schedule:
686693
await hass.services.async_call(
@@ -707,6 +714,12 @@ async def test_service_schedule_thermostats(
707714
hass.states.get(climate_entity_livingroom).attributes["selected_schedule"]
708715
== "Winter"
709716
)
717+
assert (
718+
hass.states.get(climate_entity_livingroom).attributes.get(
719+
"selected_schedule_id"
720+
)
721+
== "b1b54a2f45795764f59d50d8"
722+
)
710723

711724
# Test setting an invalid schedule
712725
with patch("pyatmo.home.Home.async_switch_schedule") as mock_switch_home_schedule:

0 commit comments

Comments
 (0)