mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Add APRS object tracking (#113080)
* Add APRS object tracking Closes issue #111731 * Fix unit test --------- Co-authored-by: Erik Montnemery <erik@montnemery.com>
This commit is contained in:
parent
f12aee28a8
commit
e7d23d8b49
@ -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]
|
||||
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user