diff --git a/homeassistant/components/aprs/device_tracker.py b/homeassistant/components/aprs/device_tracker.py index 0915643340b..e96494db930 100644 --- a/homeassistant/components/aprs/device_tracker.py +++ b/homeassistant/components/aprs/device_tracker.py @@ -39,6 +39,7 @@ ATTR_COURSE = "course" ATTR_COMMENT = "comment" ATTR_FROM = "from" ATTR_FORMAT = "format" +ATTR_OBJECT_NAME = "object_name" ATTR_POS_AMBIGUITY = "posambiguity" ATTR_SPEED = "speed" @@ -50,7 +51,7 @@ DEFAULT_TIMEOUT = 30.0 FILTER_PORT = 14580 -MSG_FORMATS = ["compressed", "uncompressed", "mic-e"] +MSG_FORMATS = ["compressed", "uncompressed", "mic-e", "object"] PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( { @@ -181,7 +182,10 @@ class AprsListenerThread(threading.Thread): """Receive message and process if position.""" _LOGGER.debug("APRS message received: %s", str(msg)) if msg[ATTR_FORMAT] in MSG_FORMATS: - dev_id = slugify(msg[ATTR_FROM]) + if msg[ATTR_FORMAT] == "object": + dev_id = slugify(msg[ATTR_OBJECT_NAME]) + else: + dev_id = slugify(msg[ATTR_FROM]) lat = msg[ATTR_LATITUDE] lon = msg[ATTR_LONGITUDE] diff --git a/tests/components/aprs/test_device_tracker.py b/tests/components/aprs/test_device_tracker.py index 92081111c8b..5967bf18c4e 100644 --- a/tests/components/aprs/test_device_tracker.py +++ b/tests/components/aprs/test_device_tracker.py @@ -302,6 +302,37 @@ def test_aprs_listener_rx_msg_no_position(mock_ais: MagicMock) -> None: see.assert_not_called() +def test_aprs_listener_rx_msg_object(mock_ais: MagicMock) -> None: + """Test rx_msg with object.""" + callsign = TEST_CALLSIGN + password = TEST_PASSWORD + host = TEST_HOST + server_filter = TEST_FILTER + see = Mock() + + sample_msg = aprslib.parse( + "CEEWO2-14>APLWS2,qAU,CEEWO2-15:;V4310251 *121203h5105.72N/00131.89WO085/024/A=033178!w&,!Clb=3.5m/s calibration 21% 404.40MHz Type=RS41 batt=2.7V Details on http://radiosondy.info/" + ) + + listener = device_tracker.AprsListenerThread( + callsign, password, host, server_filter, see + ) + listener.run() + listener.rx_msg(sample_msg) + + see.assert_called_with( + dev_id=device_tracker.slugify("V4310251"), + gps=(51.09534249084249, -1.5315201465201465), + attributes={ + "gps_accuracy": 0, + "altitude": 10112.654400000001, + "comment": "Clb=3.5m/s calibration 21% 404.40MHz Type=RS41 batt=2.7V Details on http://radiosondy.info/", + "course": 85, + "speed": 44.448, + }, + ) + + async def test_setup_scanner(hass: HomeAssistant) -> None: """Test setup_scanner.""" with patch(