Compare commits

...

6 Commits

Author SHA1 Message Date
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
8 changed files with 54 additions and 25 deletions

View File

@@ -250,12 +250,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(tracker.tracker_id)
if not self._thread_started: if not self._thread_started:
_LOGGER.info("Start the thread") _LOGGER.info("Start the thread")

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_tracker['tracker_beacon']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['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_device.beacon.beacon_id] = coordinator
async_add_entities(entities, True) async_add_entities(entities, True)
@@ -76,6 +77,10 @@ class GeoRideBeaconBinarySensorEntity(CoordinatorEntity, BinarySensorEntity):
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_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."""
@@ -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,6 +272,9 @@ 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):

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.1", "georideapilib==0.8.1",
"pyjwt==2.1.0" "pyjwt==2.1.0"
], ],
"dependencies": [], "dependencies": [],

View File

@@ -13,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__)
@@ -28,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))
@@ -41,9 +41,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
tracker_beacon = coordoned_tracker['tracker_beacon'] tracker_beacon = coordoned_tracker['tracker_beacon']
coordinator = coordoned_tracker['coordinator'] coordinator = coordoned_tracker['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_device.beacon.beacon_id] = coordinator
await async_add_entities(entities) async_add_entities(entities)
return True return True
@@ -112,10 +112,6 @@ class GeoRideOdometerKmSensorEntity(CoordinatorEntity, SensorEntity):
self._state = 0 self._state = 0
self._hass = hass self._hass = hass
@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."""

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,7 +31,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
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))
@@ -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)