99from homeassistant .helpers .typing import ConfigType
1010
1111from .const import (
12+ CONF_SERIAL_NUMBER ,
1213 COORDINATOR_LIST ,
1314 COORDINATORS ,
1415 DEFAULT_SCAN_INTERVAL ,
@@ -33,8 +34,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
3334 api : MultimaticApi = MultimaticApi (hass , entry )
3435
3536 hass .data .setdefault (DOMAIN , {})
36- hass .data [DOMAIN ].setdefault (entry .unique_id , {})
37- hass .data [DOMAIN ][entry .unique_id ].setdefault (COORDINATORS , {})
37+ hass .data [DOMAIN ].setdefault (entry .entry_id , {})
38+ hass .data [DOMAIN ][entry .entry_id ].setdefault (COORDINATORS , {})
39+
40+ _LOGGER .debug (
41+ "Setting up multimatic for serial %s, id is %s" ,
42+ entry .data .get (CONF_SERIAL_NUMBER ),
43+ entry .entry_id ,
44+ )
3845
3946 for coord in COORDINATOR_LIST .items ():
4047 update_interval = (
@@ -51,7 +58,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
5158 method = "get_" + coord [0 ],
5259 update_interval = update_interval ,
5360 )
54- hass .data [DOMAIN ][entry .unique_id ][COORDINATORS ][coord [0 ]] = m_coord
61+ hass .data [DOMAIN ][entry .entry_id ][COORDINATORS ][coord [0 ]] = m_coord
5562 _LOGGER .debug ("Adding %s coordinator" , m_coord .name )
5663 await m_coord .async_refresh ()
5764
@@ -65,30 +72,41 @@ async def logout(event):
6572
6673 hass .bus .async_listen_once (EVENT_HOMEASSISTANT_STOP , logout )
6774
68- await async_setup_service (api , hass )
75+ await async_setup_service (hass , api , entry )
6976
7077 return True
7178
7279
73- async def async_setup_service (api : MultimaticApi , hass ):
80+ async def async_setup_service (hass , api : MultimaticApi , entry : ConfigEntry ):
7481 """Set up services."""
75- if not hass .data .get (SERVICES_HANDLER ):
82+ serial = api .serial if api .fixed_serial else None
83+
84+ if not hass .data [DOMAIN ][entry .entry_id ].get (SERVICES_HANDLER ):
7685 service_handler = MultimaticServiceHandler (api , hass )
77- for service_key in SERVICES :
78- schema = SERVICES [service_key ]["schema" ]
79- if not SERVICES [service_key ].get ("entity" , False ):
86+ for service_key , data in SERVICES .items ():
87+ schema = data ["schema" ]
88+ if not data .get ("entity" , False ):
89+ key = service_key
90+ if serial :
91+ key += f"_{ serial } "
8092 hass .services .async_register (
81- DOMAIN , service_key , service_handler . service_call , schema = schema
93+ DOMAIN , key , getattr ( service_handler , service_key ) , schema = schema
8294 )
83- hass .data [DOMAIN ][SERVICES_HANDLER ] = service_handler
95+ hass .data [DOMAIN ][entry . entry_id ][ SERVICES_HANDLER ] = service_handler
8496
8597
86- async def async_unload_services (hass ):
87- """Remove service when integration is removed."""
88- service_handler = hass .data [DOMAIN ].get (SERVICES_HANDLER , None )
98+ async def async_unload_services (hass , entry : ConfigEntry ):
99+ """Remove services when integration is removed."""
100+ service_handler = hass .data [DOMAIN ][ entry . entry_id ] .get (SERVICES_HANDLER , None )
89101 if service_handler :
90- for service_name in SERVICES :
91- hass .services .async_remove (DOMAIN , service_name )
102+ serial = (
103+ service_handler .api .serial if service_handler .api .fixed_serial else None
104+ )
105+ for service_key in SERVICES :
106+ key = service_key
107+ if serial :
108+ key += f"_{ serial } "
109+ hass .services .async_remove (DOMAIN , key )
92110
93111
94112async def async_unload_entry (hass : HomeAssistant , entry : ConfigEntry ) -> bool :
@@ -102,15 +120,9 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
102120 )
103121 )
104122 if unload_ok :
105- hass .data [DOMAIN ].pop (entry .unique_id )
123+ await async_unload_services (hass , entry )
124+ hass .data [DOMAIN ].pop (entry .entry_id )
106125
107126 _LOGGER .debug ("Remaining data for multimatic %s" , hass .data [DOMAIN ])
108127
109- if (
110- len (hass .data [DOMAIN ]) == 1
111- and hass .data [DOMAIN ].get (SERVICES_HANDLER , None ) is not None
112- ):
113- await async_unload_services (hass )
114- hass .data [DOMAIN ].pop (SERVICES_HANDLER )
115-
116128 return unload_ok
0 commit comments