2929from .const import (
3030 DOMAIN ,
3131 EVENT_MESHTASTIC_DOMAIN_EVENT ,
32+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME ,
33+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT ,
3234 EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE ,
35+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI ,
36+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR ,
37+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_ID ,
38+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_LONG_NAME ,
39+ EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_SHORT_NAME ,
3340 EVENT_MESHTASTIC_DOMAIN_MESSAGE_LOG ,
3441 EVENT_MESHTASTIC_MESSAGE_LOG_EVENT_DATA_ATTR_FROM_NAME ,
3542 EVENT_MESHTASTIC_MESSAGE_LOG_EVENT_DATA_ATTR_MESSAGE ,
@@ -135,6 +142,9 @@ async def _on_text_message(
135142 config_entry_id , gateway_node_id , to , to_device
136143 )
137144 message = data ["message" ]
145+ rx_snr = data .get ("rx_snr" )
146+ rx_rssi = data .get ("rx_rssi" )
147+ hop_count = data .get ("hop_count" )
138148
139149 if produce_domain_event :
140150 if from_device :
@@ -143,21 +153,55 @@ async def _on_text_message(
143153 CONF_TYPE : MeshtasticDomainEventType .MESSAGE_SENT ,
144154 EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE : message ,
145155 }
156+ # Add signal quality metrics if available
157+ if rx_snr is not None :
158+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR ] = rx_snr
159+ if rx_rssi is not None :
160+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI ] = rx_rssi
161+ if hop_count is not None :
162+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT ] = hop_count
146163 if to_channel_entity_id :
147164 domain_event_data [CONF_ENTITY_ID ] = to_channel_entity_id
165+ # Add channel name if available
166+ if channel_entity := entity_registry .entities .get (to_channel_entity_id ):
167+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME ] = (
168+ channel_entity .name or channel_entity .original_name
169+ )
148170 if to_dm_entity_id :
149171 domain_event_data [CONF_ENTITY_ID ] = to_dm_entity_id
150172 hass .bus .async_fire (event_type = EVENT_MESHTASTIC_DOMAIN_EVENT , event_data = domain_event_data )
151173
152174 if to_device :
175+ # Get sender node info
176+ sender_node_info = entry .runtime_data .client .get_node_info (int (from_node_id ))
177+
153178 domain_event_data : MeshtasticDomainEventData = {
154179 CONF_DEVICE_ID : to_device .id ,
155180 CONF_TYPE : MeshtasticDomainEventType .MESSAGE_RECEIVED ,
156181 EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE : message ,
157182 }
158183
184+ # Add sender information if available
185+ if sender_node_info :
186+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_SHORT_NAME ] = sender_node_info .short_name
187+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_LONG_NAME ] = sender_node_info .long_name
188+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_ID ] = sender_node_info .user_id
189+
190+ # Add signal quality metrics if available
191+ if rx_snr is not None :
192+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR ] = rx_snr
193+ if rx_rssi is not None :
194+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI ] = rx_rssi
195+ if hop_count is not None :
196+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT ] = hop_count
197+
159198 if to_channel_entity_id :
160199 domain_event_data [CONF_ENTITY_ID ] = to_channel_entity_id
200+ # Add channel name if available
201+ if channel_entity := entity_registry .entities .get (to_channel_entity_id ):
202+ domain_event_data [EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME ] = (
203+ channel_entity .name or channel_entity .original_name
204+ )
161205 if to_dm_entity_id :
162206 domain_event_data [CONF_ENTITY_ID ] = to_dm_entity_id
163207
0 commit comments