1414 CREATE_SENSOR_SIGNAL ,
1515 DATA_UPDATE_SIGNAL_FMT_MAC_EVENT ,
1616 PLUG_ADDED_TO_HA_SIGNAL ,
17+ ROLE_UPDATE_SIGNAL ,
1718 SENSOR_ADDED_TO_HA_SIGNAL ,
1819 SOLAR_ADDED_TO_VHH_SIGNAL ,
1920 SOLAR_SENSOR_DETECTED_SIGNAL ,
@@ -175,9 +176,13 @@ def cancel_any_pending_removal(self, mac, source):
175176
176177 async def handle_message (self , event : str , message : dict ):
177178 mac = message ['mac' ]
178- role = message .get ('role' , None )
179- if role is None :
180- role = self ._entry .data .get ('roles' , {}).get (mac , None )
179+ persisted_role = self ._entry .data .get ('roles' , {}).get (mac , None )
180+ role = message .get ('role' , persisted_role )
181+ message ['role' ] = role
182+
183+ if role != persisted_role :
184+ async_dispatcher_send (self ._hass , ROLE_UPDATE_SIGNAL , self ._mac , role )
185+
181186 self .cancel_any_pending_removal (mac , "new message received from plug" )
182187
183188 if mac not in self .plugs .keys ():
@@ -199,12 +204,14 @@ async def handle_message(self, event: str, message: dict):
199204 self ._last_request_to_notify_about_solar = new_time
200205 _LOGGER .debug ("Notifying integration that solar is present." )
201206 async_dispatcher_send (self ._hass , SOLAR_SENSOR_DETECTED_SIGNAL )
207+
202208 async_dispatcher_send (self ._hass ,
203209 DATA_UPDATE_SIGNAL_FMT_MAC_EVENT % (mac , event ), event , message )
204- if role is not None :
205- async_dispatcher_send (
206- self ._hass , DATA_UPDATE_SIGNAL_FMT_MAC_EVENT % (mac , role ),
207- 'role' , { 'role' : role })
210+
211+ # Synthesise a role type message for the role diagnostic entity
212+ async_dispatcher_send (
213+ self ._hass , DATA_UPDATE_SIGNAL_FMT_MAC_EVENT % (mac , role ),
214+ 'role' , { 'role' : role })
208215
209216 async def disconnect (self ):
210217 for _ in range (len (self .plugs )):
0 commit comments