mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 05:37:44 +00:00
Merge pull request #2108 from home-assistant/owntracks_fixes
Owntracks fixes
This commit is contained in:
commit
3d919f1235
@ -11,7 +11,7 @@ from collections import defaultdict
|
||||
|
||||
import homeassistant.components.mqtt as mqtt
|
||||
from homeassistant.const import STATE_HOME
|
||||
from homeassistant.util import convert
|
||||
from homeassistant.util import convert, slugify
|
||||
|
||||
DEPENDENCIES = ['mqtt']
|
||||
|
||||
@ -53,6 +53,12 @@ def setup_scanner(hass, config, see):
|
||||
'accuracy %s is not met: %s',
|
||||
data_type, max_gps_accuracy, data)
|
||||
return None
|
||||
if convert(data.get('acc'), float, 1.0) == 0.0:
|
||||
_LOGGER.debug('Skipping %s update because GPS accuracy'
|
||||
'is zero',
|
||||
data_type)
|
||||
return None
|
||||
|
||||
return data
|
||||
|
||||
def owntracks_location_update(topic, payload, qos):
|
||||
@ -91,7 +97,7 @@ def setup_scanner(hass, config, see):
|
||||
return
|
||||
# OwnTracks uses - at the start of a beacon zone
|
||||
# to switch on 'hold mode' - ignore this
|
||||
location = data['desc'].lstrip("-")
|
||||
location = slugify(data['desc'].lstrip("-"))
|
||||
if location.lower() == 'home':
|
||||
location = STATE_HOME
|
||||
|
||||
|
@ -55,6 +55,21 @@ LOCATION_MESSAGE_INACCURATE = {
|
||||
'tst': 1,
|
||||
'vel': 0}
|
||||
|
||||
LOCATION_MESSAGE_ZERO_ACCURACY = {
|
||||
'batt': 92,
|
||||
'cog': 248,
|
||||
'tid': 'user',
|
||||
'lon': 2.0,
|
||||
't': 'u',
|
||||
'alt': 27,
|
||||
'acc': 0,
|
||||
'p': 101.3977584838867,
|
||||
'vac': 4,
|
||||
'lat': 6.0,
|
||||
'_type': 'location',
|
||||
'tst': 1,
|
||||
'vel': 0}
|
||||
|
||||
REGION_ENTER_MESSAGE = {
|
||||
'lon': 1.0,
|
||||
'event': 'enter',
|
||||
@ -204,6 +219,14 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
|
||||
self.assert_location_latitude(2.0)
|
||||
self.assert_location_longitude(1.0)
|
||||
|
||||
def test_location_zero_accuracy_gps(self):
|
||||
"""Ignore the location for zero accuracy GPS information."""
|
||||
self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||
self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE_ZERO_ACCURACY)
|
||||
|
||||
self.assert_location_latitude(2.0)
|
||||
self.assert_location_longitude(1.0)
|
||||
|
||||
def test_event_entry_exit(self):
|
||||
"""Test the entry event."""
|
||||
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
||||
@ -230,6 +253,20 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
|
||||
# Left clean zone state
|
||||
self.assertFalse(owntracks.REGIONS_ENTERED[USER])
|
||||
|
||||
def test_event_with_spaces(self):
|
||||
"""Test the entry event."""
|
||||
message = REGION_ENTER_MESSAGE.copy()
|
||||
message['desc'] = "inner 2"
|
||||
self.send_message(EVENT_TOPIC, message)
|
||||
self.assert_location_state('inner_2')
|
||||
|
||||
message = REGION_LEAVE_MESSAGE.copy()
|
||||
message['desc'] = "inner 2"
|
||||
self.send_message(EVENT_TOPIC, message)
|
||||
|
||||
# Left clean zone state
|
||||
self.assertFalse(owntracks.REGIONS_ENTERED[USER])
|
||||
|
||||
def test_event_entry_exit_inaccurate(self):
|
||||
"""Test the event for inaccurate exit."""
|
||||
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
||||
|
Loading…
x
Reference in New Issue
Block a user