diff --git a/custom_components/georide/__init__.py b/custom_components/georide/__init__.py index 8e67154..cb348f0 100644 --- a/custom_components/georide/__init__.py +++ b/custom_components/georide/__init__.py @@ -182,6 +182,7 @@ class GeoRideContext: socket.subscribe_device(self.on_device_callback) socket.subscribe_position(self.on_position_callback) socket.subscribe_alarm(self.on_alarm_callback) + socker.subscribe_refresh_tracker(self.on_refresh_tracker_callback) self._socket = socket socket.init() @@ -275,7 +276,7 @@ class GeoRideContext: for new_georide_tracker_beacon in new_georide_tracker_beacons: found = False for tracker_beacon in self._georide_trackers_beacon: - if tracker_beacon.tracker_id == new_georide_tracker_beacon.beacon_id: + if tracker_beacon.beacon_id == new_georide_tracker_beacon.beacon_id: tracker_beacon.update_all_data(new_georide_tracker_beacon) found = True if not found: @@ -390,6 +391,25 @@ class GeoRideContext: coordinator.async_request_refresh(), self._hass.loop ).result() break + @callback + def on_refresh_tracker_callback(self): + """on device callback""" + _LOGGER.info("On refresh tracker received") + self._previous_refresh = math.floor(time.time()/60) + await self.force_refresh_trackers() + + for coordoned_tracker in self._georide_trackers_coordoned: + tracker_device = coordoned_tracker['tracker_device'] + tracker = tracker_device.tracker + coordinator = coordoned_tracker['coordinator'] + event_data = { + "device_id": tracker_device.unique_id, + "device_name": tracker_device.name, + } + self._hass.bus.async_fire(f"{DOMAIN}_refresh_tracker_event", event_data) + asyncio.run_coroutine_threadsafe( + coordinator.async_request_refresh(), self._hass.loop + ).result() @callback def on_alarm_callback(self, data): diff --git a/custom_components/georide/binary_sensor.py b/custom_components/georide/binary_sensor.py index 5e1b806..da6660d 100644 --- a/custom_components/georide/binary_sensor.py +++ b/custom_components/georide/binary_sensor.py @@ -250,6 +250,10 @@ class GeoRideMovingBinarySensorEntity(GeoRideBinarySensorEntity): super().__init__(coordinator, tracker_device) self.entity_id = f"{ENTITY_ID_FORMAT.format('moving')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 + @property + def entity_category(self): + return EntityCategory.DIAGNOSTIC + @property def unique_id(self): """Return the unique ID.""" diff --git a/custom_components/georide/sensor.py b/custom_components/georide/sensor.py index 3f447d5..a8b0824 100644 --- a/custom_components/georide/sensor.py +++ b/custom_components/georide/sensor.py @@ -142,6 +142,50 @@ class GeoRideOdometerKmSensorEntity(CoordinatorEntity, SensorEntity): """Return the device info.""" return self._tracker_device.device_info +class GeoRideSpeedSensorEntity(CoordinatorEntity, SensorEntity): + """Represent a tracked device.""" + + def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]], + tracker_device:Device, hass): + """Set up GeoRide entity.""" + super().__init__(coordinator) + self._tracker_device = tracker_device + self._name = tracker_device.tracker.tracker_name + self._unit_of_measurement = "km/h" + self.entity_id = f"{ENTITY_ID_FORMAT.format('speed')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301 + self._state = 0 + self._hass = hass + + @property + def unique_id(self): + """Return the unique ID.""" + return f"speed_{self._tracker_device.tracker.tracker_id}" + + @property + def state(self): + """state property""" + return self._tracker_device.tracker.speed + + @property + def unit_of_measurement(self): + """unit of mesurment property""" + return self._unit_of_measurement + + @property + def name(self): + """ GeoRide odometer name """ + return f"{self._name} speed" + + @property + def icon(self): + """icon getter""" + return "mdi:speedometer" + + @property + def device_info(self) -> DeviceInfo: + """Return the device info.""" + return self._tracker_device.device_info + class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity): """Represent a tracked device.""" entity_category = EntityCategory.DIAGNOSTIC