1 """Device tracker platform that adds support for OwnTracks over MQTT."""
5 DOMAIN
as DEVICE_TRACKER_DOMAIN,
22 from .
import DOMAIN
as OT_DOMAIN
26 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
28 """Set up OwnTracks based off an entry."""
30 dev_reg = dr.async_get(hass)
33 for device
in dev_reg.devices.get_devices_for_config_entry_id(entry.entry_id)
34 for identifier
in device.identifiers
38 for dev_id
in dev_ids:
39 entity = hass.data[OT_DOMAIN][
"devices"][dev_id] =
OwnTracksEntity(dev_id)
40 entities.append(entity)
43 def _receive_data(dev_id, **data):
44 """Receive set location."""
45 entity = hass.data[OT_DOMAIN][
"devices"].
get(dev_id)
47 if entity
is not None:
48 entity.update_data(data)
51 entity = hass.data[OT_DOMAIN][
"devices"][dev_id] =
OwnTracksEntity(dev_id, data)
54 hass.data[OT_DOMAIN][
"context"].set_async_see(_receive_data)
60 """Represent a tracked device."""
62 _attr_has_entity_name =
True
66 """Set up OwnTracks entity."""
73 """Return the unique ID."""
78 """Return the battery level of the device."""
79 return self.
_data_data.
get(
"battery")
83 """Return device specific attributes."""
84 return self.
_data_data.
get(
"attributes")
88 """Return the gps accuracy of the device."""
89 return self.
_data_data.
get(
"gps_accuracy")
93 """Return latitude value of the device."""
96 return self.
_data_data[
"gps"][0]
102 """Return longitude value of the device."""
105 return self.
_data_data[
"gps"][1]
111 """Return a location name for the current location of the device."""
112 return self.
_data_data.
get(
"location_name")
116 """Return the source type, eg gps or router, of the device."""
117 return self.
_data_data.
get(
"source_type", SourceType.GPS)
121 """Return the device info."""
123 if "host_name" in self.
_data_data:
124 device_info[
"name"] = self.
_data_data[
"host_name"]
128 """Call when entity about to be added to Home Assistant."""
138 attr = state.attributes
140 "host_name": state.name,
141 "gps": (attr.get(ATTR_LATITUDE), attr.get(ATTR_LONGITUDE)),
142 "gps_accuracy": attr.get(ATTR_GPS_ACCURACY),
143 "battery": attr.get(ATTR_BATTERY_LEVEL),
144 "source_type": attr.get(ATTR_SOURCE_TYPE),
149 """Mark the device as seen."""
150 self.
_data_data = data
def location_accuracy(self)
DeviceInfo device_info(self)
def extra_state_attributes(self)
None async_added_to_hass(self)
SourceType source_type(self)
def update_data(self, data)
def __init__(self, dev_id, data=None)
None async_write_ha_state(self)
State|None async_get_last_state(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)