|
28 | 28 | from .const import ( |
29 | 29 | DOMAIN, |
30 | 30 | EVENT_MESHTASTIC_DOMAIN_EVENT, |
| 31 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME, |
| 32 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT, |
31 | 33 | EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE, |
| 34 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI, |
| 35 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR, |
| 36 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_ID, |
| 37 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_LONG_NAME, |
| 38 | + EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_SHORT_NAME, |
32 | 39 | EVENT_MESHTASTIC_DOMAIN_MESSAGE_LOG, |
33 | 40 | EVENT_MESHTASTIC_MESSAGE_LOG_EVENT_DATA_ATTR_FROM_NAME, |
34 | 41 | EVENT_MESHTASTIC_MESSAGE_LOG_EVENT_DATA_ATTR_MESSAGE, |
@@ -132,28 +139,65 @@ async def _on_text_message(event: Event) -> None: |
132 | 139 | config_entry_id, gateway_node_id, to, to_device |
133 | 140 | ) |
134 | 141 | message = data["message"] |
| 142 | + rx_snr = data.get("rx_snr") |
| 143 | + rx_rssi = data.get("rx_rssi") |
| 144 | + hop_count = data.get("hop_count") |
135 | 145 |
|
136 | 146 | if from_device: |
137 | 147 | domain_event_data: MeshtasticDomainEventData = { |
138 | 148 | CONF_DEVICE_ID: from_device.id, |
139 | 149 | CONF_TYPE: MeshtasticDomainEventType.MESSAGE_SENT, |
140 | 150 | EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE: message, |
141 | 151 | } |
| 152 | + # Add signal quality metrics if available |
| 153 | + if rx_snr is not None: |
| 154 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR] = rx_snr |
| 155 | + if rx_rssi is not None: |
| 156 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI] = rx_rssi |
| 157 | + if hop_count is not None: |
| 158 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT] = hop_count |
142 | 159 | if to_channel_entity_id: |
143 | 160 | domain_event_data[CONF_ENTITY_ID] = to_channel_entity_id |
| 161 | + # Add channel name if available |
| 162 | + if channel_entity := entity_registry.entities.get(to_channel_entity_id): |
| 163 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME] = ( |
| 164 | + channel_entity.name or channel_entity.original_name |
| 165 | + ) |
144 | 166 | if to_dm_entity_id: |
145 | 167 | domain_event_data[CONF_ENTITY_ID] = to_dm_entity_id |
146 | 168 | hass.bus.async_fire(event_type=EVENT_MESHTASTIC_DOMAIN_EVENT, event_data=domain_event_data) |
147 | 169 |
|
148 | 170 | if to_device: |
| 171 | + # Get sender node info |
| 172 | + sender_node_info = entry.runtime_data.client.get_node_info(int(from_node_id)) |
| 173 | + |
149 | 174 | domain_event_data: MeshtasticDomainEventData = { |
150 | 175 | CONF_DEVICE_ID: to_device.id, |
151 | 176 | CONF_TYPE: MeshtasticDomainEventType.MESSAGE_RECEIVED, |
152 | 177 | EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_MESSAGE: message, |
153 | 178 | } |
154 | 179 |
|
| 180 | + # Add sender information if available |
| 181 | + if sender_node_info: |
| 182 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_SHORT_NAME] = sender_node_info.short_name |
| 183 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_LONG_NAME] = sender_node_info.long_name |
| 184 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_SENDER_ID] = sender_node_info.user_id |
| 185 | + |
| 186 | + # Add signal quality metrics if available |
| 187 | + if rx_snr is not None: |
| 188 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_SNR] = rx_snr |
| 189 | + if rx_rssi is not None: |
| 190 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_RX_RSSI] = rx_rssi |
| 191 | + if hop_count is not None: |
| 192 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_HOP_COUNT] = hop_count |
| 193 | + |
155 | 194 | if to_channel_entity_id: |
156 | 195 | domain_event_data[CONF_ENTITY_ID] = to_channel_entity_id |
| 196 | + # Add channel name if available |
| 197 | + if channel_entity := entity_registry.entities.get(to_channel_entity_id): |
| 198 | + domain_event_data[EVENT_MESHTASTIC_DOMAIN_EVENT_DATA_ATTR_CHANNEL_NAME] = ( |
| 199 | + channel_entity.name or channel_entity.original_name |
| 200 | + ) |
157 | 201 | if to_dm_entity_id: |
158 | 202 | domain_event_data[CONF_ENTITY_ID] = to_dm_entity_id |
159 | 203 |
|
|
0 commit comments