Compare commits

..

23 Commits

Author SHA1 Message Date
9f70dc220f Fix 'Device' object has no attribute 'beacon' 2022-03-04 19:24:47 +01:00
7a8702d57c Fix 'DeviceBeacon' object has no attribute 'tracker_beacon' 2022-03-04 19:21:59 +01:00
7f3d5d7ec7 Fix tracker device not exist 2022-03-04 19:17:20 +01:00
bf1e138c05 Fix wrong sensor setup 2022-03-04 19:12:55 +01:00
ce06f109fe Beacon use wrong coordinator 2022-03-04 19:07:54 +01:00
e9262ff3d4 Fix coordinator device name, await on add entity 2022-03-04 19:01:22 +01:00
f36a3093bf Fix missing import beacon 2022-03-04 18:55:12 +01:00
73d15f8c9a Fix mist spelling of get_tracker_beacons 2022-03-04 18:49:55 +01:00
d326726138 Fix invalid sintax 2022-03-04 18:45:58 +01:00
3000d5588b Fix support multiple tracker beacon 2022-03-04 18:42:13 +01:00
a3c84c63fd Fix missing tracker in list 2022-03-04 18:18:46 +01:00
a37cca7902 Fix missing get_tracker_beacon_by_tracker_id 2022-03-04 18:11:28 +01:00
32db0ec42e Fix "NameError: name 'new_georide_tracker' is not defined" 2022-03-04 18:07:37 +01:00
1250dda047 Fix "list' object has no attribute 'tracker_id' " 2022-03-04 18:04:10 +01:00
759fe2d257 Fix "local variable 'tracker' referenced before assignment" 2022-03-04 18:00:03 +01:00
9e2e6e8d53 remove await on force_refresh_trackers_beacon 2022-03-04 17:56:29 +01:00
4dc091525e Fix force_refresh_trackers_beacon 2022-03-04 17:53:51 +01:00
e92ac1825d Fix siren and device unique id 2022-03-04 17:28:10 +01:00
fd10326489 Revert change on device id format 2022-03-04 17:18:08 +01:00
4dcf642260 Fix unique id format 2022-03-04 17:08:24 +01:00
80de671649 Small import fixes 2022-03-04 16:59:28 +01:00
9f5b09dc4c Add entity category on All entities 2022-03-04 16:50:34 +01:00
09231c4fc0 First steps of entity category 2022-03-04 16:15:42 +01:00
8 changed files with 120 additions and 64 deletions

View File

@@ -32,7 +32,7 @@ from homeassistant.helpers.update_coordinator import (
) )
from .device import Device from .device import Device, DeviceBeacon
from .const import ( from .const import (
CONF_EMAIL, CONF_EMAIL,
CONF_PASSWORD, CONF_PASSWORD,
@@ -220,12 +220,13 @@ class GeoRideContext:
return tracker_beacon return tracker_beacon
return {} return {}
async def get_tracker_beacon_by_tracker_id(self, tracker_id): async def get_tracker_beacons_by_tracker_id(self, tracker_id):
""" here we return last tracker_beacon by id""" """ here we return last tracker_beacon by id"""
filtered_beacon = []
for tracker_beacon in self._georide_trackers_beacon: for tracker_beacon in self._georide_trackers_beacon:
if tracker_beacon.linked_tracker_id == tracker_id: if tracker_beacon.linked_tracker_id == tracker_id:
return tracker_beacon filtered_beacon.append(tracker_beacon)
return {} return filtered_beacon
async def refresh_trackers(self): async def refresh_trackers(self):
""" here we return last tracker by id""" """ here we return last tracker by id"""
@@ -250,13 +251,12 @@ class GeoRideContext:
if tracker.tracker_id == refreshed_tracker.tracker_id: if tracker.tracker_id == refreshed_tracker.tracker_id:
tracker.update_all_data(refreshed_tracker) tracker.update_all_data(refreshed_tracker)
if tracker.version > 2: if tracker.version > 2:
await force_refresh_trackers_beacon(tracker.tracker_id) await self.force_refresh_trackers_beacon(tracker.tracker_id)
found = True found = True
if not found: if not found:
self._georide_trackers.append(refreshed_tracker) self._georide_trackers.append(refreshed_tracker)
if refreshed_tracker.version > 2: if refreshed_tracker.version > 2:
await force_refresh_trackers_beacon(tracker.tracker_id) await self.force_refresh_trackers_beacon(refreshed_tracker.tracker_id)
if not self._thread_started: if not self._thread_started:
_LOGGER.info("Start the thread") _LOGGER.info("Start the thread")
# We refresh the tracker list each hours # We refresh the tracker list each hours
@@ -266,8 +266,9 @@ class GeoRideContext:
async def force_refresh_trackers_beacon(self, tracker_id): async def force_refresh_trackers_beacon(self, tracker_id):
"""Used to refresh the tracker list""" """Used to refresh the tracker list"""
_LOGGER.info("Tracker beacon refresh") _LOGGER.info("Tracker beacon refresh")
new_georide_tracker_beacon = await self._hass.async_add_executor_job(GeoRideApi.get_tracker_beacon, new_georide_tracker_beacons = await self._hass.async_add_executor_job(GeoRideApi.get_tracker_beacons,
await self.get_token(), tracker_id) await self.get_token(), tracker_id)
for new_georide_tracker_beacon in new_georide_tracker_beacons:
found = False found = False
for tracker_beacon in self._georide_trackers_beacon: for tracker_beacon in self._georide_trackers_beacon:
if tracker_beacon.tracker_id == new_georide_tracker_beacon.beacon_id: if tracker_beacon.tracker_id == new_georide_tracker_beacon.beacon_id:
@@ -301,17 +302,18 @@ class GeoRideContext:
"coordinator": coordinator "coordinator": coordinator
} }
if tracker.version > 2: if tracker.version > 2:
tracker_beacon = await get_tracker_beacon_by_tracker_id(tracker.tracker_id) tracker_beacons = await self.get_tracker_beacons_by_tracker_id(tracker.tracker_id)
for tracker_beacon in tracker_beacons:
beacon_coordinator = DataUpdateCoordinator[Mapping[str, Any]]( beacon_coordinator = DataUpdateCoordinator[Mapping[str, Any]](
hass, hass,
_LOGGER, _LOGGER,
name=tracker_beacon.name name= tracker_beacon.name
) )
coordoned_beacon = { coordoned_beacon = {
"beacon_device": DeviceBeacon(tracker_beacon), "tracker_beacon": DeviceBeacon(tracker_beacon),
"coordinator": coordinator "coordinator": beacon_coordinator
} }
self._georide_trackers_beacon_coordoned(coordoned_beacon) self._georide_trackers_beacon_coordoned.append(coordoned_beacon)
self._georide_trackers_coordoned.append(coordoned_tracker) self._georide_trackers_coordoned.append(coordoned_tracker)

View File

@@ -5,6 +5,7 @@ import logging
from typing import Any, Mapping from typing import Any, Mapping
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo, EntityCategory
from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.components.binary_sensor import BinarySensorEntity
from homeassistant.components.binary_sensor import ENTITY_ID_FORMAT from homeassistant.components.binary_sensor import ENTITY_ID_FORMAT
from homeassistant.helpers.update_coordinator import ( from homeassistant.helpers.update_coordinator import (
@@ -33,14 +34,14 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
entities.append(GeoRideNetworkBinarySensorEntity(coordinator, tracker_device)) entities.append(GeoRideNetworkBinarySensorEntity(coordinator, tracker_device))
entities.append(GeoRideMovingBinarySensorEntity(coordinator, tracker_device)) entities.append(GeoRideMovingBinarySensorEntity(coordinator, tracker_device))
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
coordoned_beacons = georide_context.georide_trackers_beacon_coordoned coordoned_beacons = georide_context.georide_trackers_beacon_coordoned
for coordoned_beacon in coordoned_beacons: for coordoned_beacon in coordoned_beacons:
tracker_beacon = coordoned_tracker['tracker_beacon'] tracker_beacon = coordoned_beacon['tracker_beacon']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_beacon['coordinator']
entities.append(GeoRideBeaconUpdatedBinarySensorEntity(coordinator, tracker_beacon)) entities.append(GeoRideBeaconUpdatedBinarySensorEntity(coordinator, tracker_beacon))
hass.data[GEORIDE_DOMAIN]["devices"][tracker_beacon.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_beacon.beacon.beacon_id] = coordinator
async_add_entities(entities, True) async_add_entities(entities, True)
@@ -73,9 +74,13 @@ class GeoRideBeaconBinarySensorEntity(CoordinatorEntity, BinarySensorEntity):
super().__init__(coordinator) super().__init__(coordinator)
self._tracker_device_beacon = tracker_device_beacon self._tracker_device_beacon = tracker_device_beacon
self._name = tracker_device_beacon.beacon.name self._name = tracker_device_beacon.beacon.name
self.entity_id = f"{ENTITY_ID_FORMAT.format('binary_sensor')}.{tracker_device.beacon.beacon_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('binary_sensor')}.{tracker_device_beacon.beacon.beacon_id}"# pylint: disable=C0301
self._is_on = False self._is_on = False
@property
def entity_category(self):
return None
@property @property
def device_info(self): def device_info(self):
"""Return the device info.""" """Return the device info."""
@@ -137,7 +142,7 @@ class GeoRideCrashedBinarySensorEntity(GeoRideBinarySensorEntity):
@property @property
def name(self): def name(self):
""" GeoRide odometer name """ """ GeoRide odometer name """
return f"{self._name} is crashed" return f"{self._name} is not crashed"
class GeoRideActiveSubscriptionBinarySensorEntity(GeoRideBinarySensorEntity): class GeoRideActiveSubscriptionBinarySensorEntity(GeoRideBinarySensorEntity):
"""Represent a tracked device.""" """Represent a tracked device."""
@@ -148,6 +153,10 @@ class GeoRideActiveSubscriptionBinarySensorEntity(GeoRideBinarySensorEntity):
super().__init__(coordinator, tracker_device) super().__init__(coordinator, tracker_device)
self.entity_id = f"{ENTITY_ID_FORMAT.format('is_active_subscription_')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('is_active_subscription_')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -158,7 +167,7 @@ class GeoRideActiveSubscriptionBinarySensorEntity(GeoRideBinarySensorEntity):
"""state value property""" """state value property"""
tracker = self._tracker_device.tracker tracker = self._tracker_device.tracker
if tracker.is_oldsubscription: if tracker.is_oldsubscription:
if .tracker.subscription_id is not None: if tracker.subscription_id is not None:
return True return True
return False return False
else: else:
@@ -206,6 +215,10 @@ class GeoRideNetworkBinarySensorEntity(GeoRideBinarySensorEntity):
super().__init__(coordinator, tracker_device) super().__init__(coordinator, tracker_device)
self.entity_id = f"{ENTITY_ID_FORMAT.format('have_network')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('have_network')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -259,12 +272,15 @@ class GeoRideMovingBinarySensorEntity(GeoRideBinarySensorEntity):
class GeoRideBeaconUpdatedBinarySensorEntity(GeoRideBeaconBinarySensorEntity): class GeoRideBeaconUpdatedBinarySensorEntity(GeoRideBeaconBinarySensorEntity):
"""Represent a tracked device.""" """Represent a tracked device."""
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]], def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
tracker_beacon_device: DeviceBeacon): tracker_beacon_device: DeviceBeacon):
"""Set up Georide entity.""" """Set up Georide entity."""
super().__init__(coordinator, tracker_device) super().__init__(coordinator, tracker_beacon_device)
self.entity_id = f"{ENTITY_ID_FORMAT.format('update')}.{tracker_beacon_device.tracker_beacon.beacon_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('update')}.{tracker_beacon_device.beacon.beacon_id}"# pylint: disable=C0301
@property @property
def unique_id(self): def unique_id(self):

View File

@@ -1,5 +1,5 @@
"""Home Assistant representation of an GeoRide Tracker device.""" """Home Assistant representation of an GeoRide Tracker device."""
import georideapilib.objects as GeoRideTracker, GeoRideTrackerBeacon from georideapilib.objects import GeoRideTracker, GeoRideTrackerBeacon
from .const import DOMAIN as GEORIDE_DOMAIN from .const import DOMAIN as GEORIDE_DOMAIN
@@ -44,7 +44,7 @@ class Device:
"""Return the device info.""" """Return the device info."""
return { return {
"name": self.name, "name": self.name,
"identifiers": {(GEORIDE_DOMAIN, self._tracker.tracker_id)}, "identifiers": self.unique_id,
"manufacturer": "GeoRide", "manufacturer": "GeoRide",
"model": self.model_name, "model": self.model_name,
"suggested_area": "Garage" "suggested_area": "Garage"
@@ -93,17 +93,17 @@ class DeviceBeacon:
"""Return the device info.""" """Return the device info."""
return { return {
"name": self.name, "name": self.name,
"identifiers": {(GEORIDE_DOMAIN, self._beacon.beacon_id)}, "identifiers": self.unique_id,
"manufacturer": "GeoRide", "manufacturer": "GeoRide",
"model": self.model_name, "model": self.model_name,
"suggested_area": "Garage" "suggested_area": "Garage"
} }
@property @property
def unique_id(self) -> str: def unique_id(self) -> str:
"""Get the unique id.""" """Get the unique id."""
return {(GEORIDE_DOMAIN, "beacon", self._beacon.beacon_id)}
return {(GEORIDE_DOMAIN, self._beacon.beacon_id)}
def __str__(self) -> str: def __str__(self) -> str:
"""Get string representation.""" """Get string representation."""

View File

@@ -27,7 +27,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
tracker_device = coordoned_tracker['tracker_device'] tracker_device = coordoned_tracker['tracker_device']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['coordinator']
entity = GeoRideTrackerEntity(coordinator, tracker_device, hass) entity = GeoRideTrackerEntity(coordinator, tracker_device, hass)
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
entities.append(entity) entities.append(entity)
async_add_entities(entities) async_add_entities(entities)
@@ -47,6 +47,10 @@ class GeoRideTrackerEntity(CoordinatorEntity, TrackerEntity):
self.entity_id = DOMAIN + ".{}".format(tracker_device.tracker.tracker_id) self.entity_id = DOMAIN + ".{}".format(tracker_device.tracker.tracker_id)
self._hass = hass self._hass = hass
@property
def entity_category(self):
return None
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""

View File

@@ -6,7 +6,7 @@
"issue_tracker": "https://github.com/ptimatth/GeorideHA/issues", "issue_tracker": "https://github.com/ptimatth/GeorideHA/issues",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"requirements": [ "requirements": [
"georideapilib>=0.8.0", "georideapilib>=0.8.2",
"pyjwt==2.1.0" "pyjwt==2.1.0"
], ],
"dependencies": [], "dependencies": [],

View File

@@ -4,6 +4,7 @@ import logging
from typing import Any, Mapping from typing import Any, Mapping
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo, EntityCategory
from homeassistant.components.sensor import SensorEntity from homeassistant.components.sensor import SensorEntity
from homeassistant.components.sensor import ENTITY_ID_FORMAT from homeassistant.components.sensor import ENTITY_ID_FORMAT
from homeassistant.helpers.update_coordinator import ( from homeassistant.helpers.update_coordinator import (
@@ -12,7 +13,7 @@ from homeassistant.helpers.update_coordinator import (
) )
from .const import DOMAIN as GEORIDE_DOMAIN from .const import DOMAIN as GEORIDE_DOMAIN
from .device import Device from .device import Device, DeviceBeacon
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@@ -27,7 +28,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
for coordoned_tracker in coordoned_trackers: for coordoned_tracker in coordoned_trackers:
tracker_device = coordoned_tracker['tracker_device'] tracker_device = coordoned_tracker['tracker_device']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['coordinator']
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
entities.append(GeoRideOdometerSensorEntity(coordinator, tracker_device, hass)) entities.append(GeoRideOdometerSensorEntity(coordinator, tracker_device, hass))
entities.append(GeoRideOdometerKmSensorEntity(coordinator, tracker_device, hass)) entities.append(GeoRideOdometerKmSensorEntity(coordinator, tracker_device, hass))
entities.append(GeoRideFixtimeSensorEntity(coordinator, tracker_device)) entities.append(GeoRideFixtimeSensorEntity(coordinator, tracker_device))
@@ -37,12 +38,12 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
coordoned_beacons = georide_context.georide_trackers_beacon_coordoned coordoned_beacons = georide_context.georide_trackers_beacon_coordoned
for coordoned_beacon in coordoned_beacons: for coordoned_beacon in coordoned_beacons:
tracker_beacon = coordoned_tracker['tracker_beacon'] tracker_beacon = coordoned_beacon['tracker_beacon']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_beacon['coordinator']
entities.append(GeoRideBeaconUpdatedBinarySensorEntity(coordinator, tracker_beacon)) entities.append(GeoRideBeaconBatterySensorEntity(coordinator, tracker_beacon))
hass.data[GEORIDE_DOMAIN]["devices"][tracker_beacon.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_beacon.beacon.beacon_id] = coordinator
await async_add_entities(entities) async_add_entities(entities)
return True return True
@@ -61,6 +62,10 @@ class GeoRideOdometerSensorEntity(CoordinatorEntity, SensorEntity):
self._state = 0 self._state = 0
self._hass = hass self._hass = hass
@property
def entity_category(self):
return None
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -88,7 +93,7 @@ class GeoRideOdometerSensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:counter" return "mdi:counter"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info
@@ -103,7 +108,6 @@ class GeoRideOdometerKmSensorEntity(CoordinatorEntity, SensorEntity):
self._name = tracker_device.tracker.tracker_name self._name = tracker_device.tracker.tracker_name
self._unit_of_measurement = "km" self._unit_of_measurement = "km"
self.entity_id = f"{ENTITY_ID_FORMAT.format('odometer_km')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('odometer_km')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
self._state = 0 self._state = 0
self._hass = hass self._hass = hass
@@ -134,12 +138,13 @@ class GeoRideOdometerKmSensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:counter" return "mdi:counter"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info
class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity): class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
"""Represent a tracked device.""" """Represent a tracked device."""
entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]], def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
tracker_device:Device): tracker_device:Device):
@@ -152,6 +157,10 @@ class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
self._state = 0 self._state = 0
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -178,7 +187,7 @@ class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:battery" return "mdi:battery"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info
@@ -195,6 +204,10 @@ class GeoRideExternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
self.entity_id = f"{ENTITY_ID_FORMAT.format('external_battery_voltage')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('external_battery_voltage')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
self._state = 0 self._state = 0
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -221,7 +234,7 @@ class GeoRideExternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:battery" return "mdi:battery"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info
@@ -239,6 +252,10 @@ class GeoRideFixtimeSensorEntity(CoordinatorEntity, SensorEntity):
self._state = 0 self._state = 0
self._device_class = "timestamp" self._device_class = "timestamp"
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -260,7 +277,7 @@ class GeoRideFixtimeSensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:map-clock" return "mdi:map-clock"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info
@@ -268,15 +285,19 @@ class GeoRideBeaconBatterySensorEntity(CoordinatorEntity, SensorEntity):
"""Represent a tracked device.""" """Represent a tracked device."""
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]], def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
tracker_beacon:DeviceBeacon): tracker_beacon: DeviceBeacon):
"""Set up GeoRide entity.""" """Set up GeoRide entity."""
super().__init__(coordinator) super().__init__(coordinator)
self._tracker_device = tracker_device self._tracker_device = tracker_beacon
self._name = tracker_device.tracker.tracker_name self._name = tracker_beacon.beacon.name
self._unit_of_measurement = "%" self._unit_of_measurement = "%"
self.entity_id = f"{ENTITY_ID_FORMAT.format('battery_percent')}.{tracker_beacon.beacon.beacon_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('battery_percent')}.{tracker_beacon.beacon.beacon_id}"# pylint: disable=C0301
self._state = 0 self._state = 0
@property
def entity_category(self):
return EntityCategory.DIAGNOSTIC
@property @property
def unique_id(self): def unique_id(self):
"""Return the unique ID.""" """Return the unique ID."""
@@ -303,6 +324,6 @@ class GeoRideBeaconBatterySensorEntity(CoordinatorEntity, SensorEntity):
return "mdi:battery" return "mdi:battery"
@property @property
def device_info(self): def device_info(self) -> DeviceInfo:
"""Return the device info.""" """Return the device info."""
return self._tracker_device.device_info return self._tracker_device.device_info

View File

@@ -6,7 +6,6 @@ import logging
from typing import Any, Mapping from typing import Any, Mapping
from homeassistant.components.siren import SirenEntity from homeassistant.components.siren import SirenEntity
from homeassistant.components.siren import ENTITY_ID_FORMAT
from homeassistant.helpers.update_coordinator import ( from homeassistant.helpers.update_coordinator import (
CoordinatorEntity, CoordinatorEntity,
@@ -18,6 +17,8 @@ import georideapilib.api as GeoRideApi
from .const import DOMAIN as GEORIDE_DOMAIN from .const import DOMAIN as GEORIDE_DOMAIN
from .device import Device from .device import Device
ENTITY_ID_FORMAT = GEORIDE_DOMAIN + ".{}"
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@@ -30,11 +31,11 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
for coordoned_tracker in coordoned_trackers: for coordoned_tracker in coordoned_trackers:
tracker_device = coordoned_tracker['tracker_device'] tracker_device = coordoned_tracker['tracker_device']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['coordinator']
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
if tracker_device.tracker.version > 2: if tracker_device.tracker.version > 2:
entities.append(GeoRideSirenEntity(coordinator, tracker_device, hass)) entities.append(GeoRideSirenEntity(coordinator, tracker_device, hass))
await async_add_entities(entities) async_add_entities(entities)
return True return True
@@ -50,6 +51,10 @@ class GeoRideSirenEntity(CoordinatorEntity, SirenEntity):
self.entity_id = f"{ENTITY_ID_FORMAT.format('eco_mode')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('eco_mode')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
self._hass = hass self._hass = hass
@property
def entity_category(self):
return None
async def async_turn_on(self, **kwargs): async def async_turn_on(self, **kwargs):
""" lock the GeoRide tracker """ """ lock the GeoRide tracker """
_LOGGER.info('async_turn_on eco %s', kwargs) _LOGGER.info('async_turn_on eco %s', kwargs)

View File

@@ -30,7 +30,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
for coordoned_tracker in coordoned_trackers: for coordoned_tracker in coordoned_trackers:
tracker_device = coordoned_tracker['tracker_device'] tracker_device = coordoned_tracker['tracker_device']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['coordinator']
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.unique_id] = coordinator hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
entities.append(GeoRideLockSwitchEntity(coordinator, tracker_device, hass)) entities.append(GeoRideLockSwitchEntity(coordinator, tracker_device, hass))
if tracker_device.tracker.version > 2: if tracker_device.tracker.version > 2:
entities.append(GeoRideEcoModeSwitchEntity(coordinator, tracker_device, hass)) entities.append(GeoRideEcoModeSwitchEntity(coordinator, tracker_device, hass))
@@ -51,6 +51,10 @@ class GeoRideLockSwitchEntity(CoordinatorEntity, SwitchEntity):
self.entity_id = f"{ENTITY_ID_FORMAT.format('lock')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('lock')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
self._hass = hass self._hass = hass
@property
def entity_category(self):
return None
async def async_turn_on(self, **kwargs): async def async_turn_on(self, **kwargs):
""" lock the GeoRide tracker """ """ lock the GeoRide tracker """
_LOGGER.info('async_turn_on %s', kwargs) _LOGGER.info('async_turn_on %s', kwargs)
@@ -119,6 +123,10 @@ class GeoRideEcoModeSwitchEntity(CoordinatorEntity, SwitchEntity):
self.entity_id = f"{ENTITY_ID_FORMAT.format('eco_mode')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 self.entity_id = f"{ENTITY_ID_FORMAT.format('eco_mode')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
self._hass = hass self._hass = hass
@property
def entity_category(self):
return None
async def async_turn_on(self, **kwargs): async def async_turn_on(self, **kwargs):
""" lock the GeoRide tracker """ """ lock the GeoRide tracker """
_LOGGER.info('async_turn_on eco %s', kwargs) _LOGGER.info('async_turn_on eco %s', kwargs)