mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +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
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.const import STATE_HOME
|
from homeassistant.const import STATE_HOME
|
||||||
from homeassistant.util import convert
|
from homeassistant.util import convert, slugify
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
@ -53,6 +53,12 @@ def setup_scanner(hass, config, see):
|
|||||||
'accuracy %s is not met: %s',
|
'accuracy %s is not met: %s',
|
||||||
data_type, max_gps_accuracy, data)
|
data_type, max_gps_accuracy, data)
|
||||||
return None
|
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
|
return data
|
||||||
|
|
||||||
def owntracks_location_update(topic, payload, qos):
|
def owntracks_location_update(topic, payload, qos):
|
||||||
@ -91,7 +97,7 @@ def setup_scanner(hass, config, see):
|
|||||||
return
|
return
|
||||||
# OwnTracks uses - at the start of a beacon zone
|
# OwnTracks uses - at the start of a beacon zone
|
||||||
# to switch on 'hold mode' - ignore this
|
# to switch on 'hold mode' - ignore this
|
||||||
location = data['desc'].lstrip("-")
|
location = slugify(data['desc'].lstrip("-"))
|
||||||
if location.lower() == 'home':
|
if location.lower() == 'home':
|
||||||
location = STATE_HOME
|
location = STATE_HOME
|
||||||
|
|
||||||
|
@ -55,6 +55,21 @@ LOCATION_MESSAGE_INACCURATE = {
|
|||||||
'tst': 1,
|
'tst': 1,
|
||||||
'vel': 0}
|
'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 = {
|
REGION_ENTER_MESSAGE = {
|
||||||
'lon': 1.0,
|
'lon': 1.0,
|
||||||
'event': 'enter',
|
'event': 'enter',
|
||||||
@ -204,6 +219,14 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
|
|||||||
self.assert_location_latitude(2.0)
|
self.assert_location_latitude(2.0)
|
||||||
self.assert_location_longitude(1.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):
|
def test_event_entry_exit(self):
|
||||||
"""Test the entry event."""
|
"""Test the entry event."""
|
||||||
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
||||||
@ -230,6 +253,20 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
|
|||||||
# Left clean zone state
|
# Left clean zone state
|
||||||
self.assertFalse(owntracks.REGIONS_ENTERED[USER])
|
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):
|
def test_event_entry_exit_inaccurate(self):
|
||||||
"""Test the event for inaccurate exit."""
|
"""Test the event for inaccurate exit."""
|
||||||
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user