Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5af8e7d

Browse files
committedAug 30, 2021
Shipping v0.8.0, thx to @Inervo
2 parents 9053f95 + fe073cf commit 5af8e7d

File tree

4 files changed

+259
-10
lines changed

4 files changed

+259
-10
lines changed
 

‎README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ This component add some sensor for GeoRide Tracker
1515
Get GeoRide position
1616
Get GeoRide lock status
1717
Change GeoRide lock status
18-
Add GeoRide from configuration.yml
19-
Add GeoRide from interface
2018
Get stollen status
2119
Get crashed status
2220
Get is owner status
2321
Get subsription status
22+
Get odomoter to km an m (2 entities)
23+
Internal battery (of georide 3) (not work on GR1)
24+
External battery (of the bike) (not work on GR1)
25+
Fixtime (last registered positition of the georide)
26+
2427

2528
### What's events are available:
2629
you can filter by data.device_id == XX (XX is your tracker id)
@@ -53,7 +56,7 @@ here is the alarm type available: (listen the georide_alarm_event)
5356

5457
## Question:
5558

56-
### How to have the odometer in Km ?
59+
### How to have the odometer in Km ? (Deprecated, now you have an entity - thx @Inervo)
5760

5861
Simply add a sensor like this in configuration.yaml
5962
(Replace XX by your tracker id)
@@ -66,8 +69,6 @@ sensor:
6669
friendly_name: "Odometter - Km"
6770
value_template: "{{ states.sensor.odometer_XX.state | multiply(0.001) | round(3, 'flour') }}"
6871
unit_of_measurement: 'Km'
69-
70-
7172
```
7273
7374
### How to use the event:

‎custom_components/georide/binary_sensor.py

+72-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
3030
entities.append(GeoRideCrashedBinarySensorEntity(coordinator, tracker_device))
3131
entities.append(GeoRideOwnerBinarySensorEntity(coordinator, tracker_device))
3232
entities.append(GeoRideActiveSubscriptionBinarySensorEntity(coordinator, tracker_device))
33+
entities.append(GeoRideNetworkBinarySensorEntity(coordinator, tracker_device))
34+
entities.append(GeoRideMovingBinarySensorEntity(coordinator, tracker_device))
3335

3436
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
3537

@@ -68,6 +70,11 @@ def unique_id(self):
6870
"""Return the unique ID."""
6971
return f"is_stolen_{self._tracker_device.tracker.tracker_id}"
7072

73+
@property
74+
def device_class(self):
75+
"""Return the device class."""
76+
return "problem"
77+
7178
@property
7279
def is_on(self):
7380
"""state value property"""
@@ -93,6 +100,11 @@ def unique_id(self):
93100
"""Return the unique ID."""
94101
return f"is_crashed_{self._tracker_device.tracker.tracker_id}"
95102

103+
@property
104+
def device_class(self):
105+
"""Return the device class."""
106+
return "problem"
107+
96108
@property
97109
def is_on(self):
98110
"""state value property"""
@@ -154,4 +166,63 @@ def is_on(self):
154166
def name(self):
155167
""" GeoRide odometer name """
156168
return f"{self._name} is own tracker"
157-
169+
170+
class GeoRideNetworkBinarySensorEntity(GeoRideBinarySensorEntity):
171+
"""Represent a tracked device."""
172+
173+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
174+
tracker_device: Device):
175+
"""Set up Georide entity."""
176+
super().__init__(coordinator, tracker_device)
177+
self.entity_id = f"{ENTITY_ID_FORMAT.format('have_network')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
178+
179+
@property
180+
def unique_id(self):
181+
"""Return the unique ID."""
182+
return f"have_network_{self._tracker_device.tracker.tracker_id}"
183+
184+
@property
185+
def device_class(self):
186+
"""Return the device class."""
187+
return "connectivity"
188+
189+
@property
190+
def is_on(self):
191+
"""state value property"""
192+
if self._tracker_device.tracker.status == "online":
193+
return True
194+
return False
195+
196+
@property
197+
def name(self):
198+
""" GeoRide name """
199+
return f"{self._name} have network"
200+
201+
class GeoRideMovingBinarySensorEntity(GeoRideBinarySensorEntity):
202+
"""Represent a tracked device."""
203+
204+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
205+
tracker_device: Device):
206+
"""Set up Georide entity."""
207+
super().__init__(coordinator, tracker_device)
208+
self.entity_id = f"{ENTITY_ID_FORMAT.format('moving')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
209+
210+
@property
211+
def unique_id(self):
212+
"""Return the unique ID."""
213+
return f"moving_{self._tracker_device.tracker.tracker_id}"
214+
215+
@property
216+
def device_class(self):
217+
"""Return the device class."""
218+
return "moving"
219+
220+
@property
221+
def is_on(self):
222+
"""state value property"""
223+
return self._tracker_device.tracker.moving
224+
225+
@property
226+
def name(self):
227+
""" GeoRide name """
228+
return f"{self._name} is moving"

‎custom_components/georide/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
],
1010
"dependencies": [],
1111
"codeowners": ["ptimatth"],
12-
"version": "0.7.2"
12+
"version": "0.8.0"
1313
}

‎custom_components/georide/sensor.py

+180-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # pylint: d
2727
for coordoned_tracker in coordoned_trackers:
2828
tracker_device = coordoned_tracker['tracker_device']
2929
coordinator = coordoned_tracker['coordinator']
30-
entity = GeoRideOdometerSensorEntity(coordinator, tracker_device, hass)
3130
hass.data[GEORIDE_DOMAIN]["devices"][tracker_device.tracker.tracker_id] = coordinator
32-
entities.append(entity)
31+
entities.append(GeoRideOdometerSensorEntity(coordinator, tracker_device, hass))
32+
entities.append(GeoRideOdometerKmSensorEntity(coordinator, tracker_device, hass))
33+
entities.append(GeoRideInternalBatterySensorEntity(coordinator, tracker_device))
34+
entities.append(GeoRideExternalBatterySensorEntity(coordinator, tracker_device))
35+
entities.append(GeoRideFixtimeSensorEntity(coordinator, tracker_device))
3336

3437
async_add_entities(entities)
3538

@@ -58,7 +61,8 @@ def unique_id(self):
5861
@property
5962
def state(self):
6063
"""state property"""
61-
return self._tracker_device.tracker.odometer
64+
odometer = self._tracker_device.tracker.odometer
65+
return odometer
6266

6367
@property
6468
def unit_of_measurement(self):
@@ -79,3 +83,176 @@ def icon(self):
7983
def device_info(self):
8084
"""Return the device info."""
8185
return self._tracker_device.device_info
86+
87+
class GeoRideOdometerKmSensorEntity(CoordinatorEntity, SensorEntity):
88+
"""Represent a tracked device."""
89+
90+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
91+
tracker_device:Device, hass):
92+
"""Set up GeoRide entity."""
93+
super().__init__(coordinator)
94+
self._tracker_device = tracker_device
95+
self._name = tracker_device.tracker.tracker_name
96+
self._unit_of_measurement = "km"
97+
self.entity_id = f"{ENTITY_ID_FORMAT.format('odometer_km')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
98+
99+
self._state = 0
100+
self._hass = hass
101+
102+
@property
103+
def unique_id(self):
104+
"""Return the unique ID."""
105+
return f"odometer_km_{self._tracker_device.tracker.tracker_id}"
106+
107+
@property
108+
def state(self):
109+
"""state property"""
110+
odometer = self._tracker_device.tracker.odometer // 1000
111+
return odometer
112+
113+
@property
114+
def unit_of_measurement(self):
115+
"""unit of mesurment property"""
116+
return self._unit_of_measurement
117+
118+
@property
119+
def name(self):
120+
""" GeoRide odometer name """
121+
return f"{self._name} odometer km"
122+
123+
@property
124+
def icon(self):
125+
"""icon getter"""
126+
return "mdi:counter"
127+
128+
@property
129+
def device_info(self):
130+
"""Return the device info."""
131+
return self._tracker_device.device_info
132+
133+
class GeoRideInternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
134+
"""Represent a tracked device."""
135+
136+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
137+
tracker_device:Device):
138+
"""Set up GeoRide entity."""
139+
super().__init__(coordinator)
140+
self._tracker_device = tracker_device
141+
self._name = tracker_device.tracker.tracker_name
142+
self._unit_of_measurement = "V"
143+
self.entity_id = f"{ENTITY_ID_FORMAT.format('internal_battery_voltage')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
144+
145+
self._state = 0
146+
147+
@property
148+
def unique_id(self):
149+
"""Return the unique ID."""
150+
return f"internal_battery_voltage_{self._tracker_device.tracker.tracker_id}"
151+
152+
@property
153+
def state(self):
154+
"""state property"""
155+
return self._tracker_device.tracker.internal_battery_voltage
156+
157+
@property
158+
def unit_of_measurement(self):
159+
"""unit of mesurment property"""
160+
return self._unit_of_measurement
161+
162+
@property
163+
def name(self):
164+
""" GeoRide internal_battery_voltage name """
165+
return f"{self._name} internal_battery_voltage"
166+
167+
@property
168+
def icon(self):
169+
"""icon getter"""
170+
return "mdi:battery"
171+
172+
@property
173+
def device_info(self):
174+
"""Return the device info."""
175+
return self._tracker_device.device_info
176+
177+
class GeoRideExternalBatterySensorEntity(CoordinatorEntity, SensorEntity):
178+
"""Represent a tracked device."""
179+
180+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
181+
tracker_device:Device):
182+
"""Set up GeoRide entity."""
183+
super().__init__(coordinator)
184+
self._tracker_device = tracker_device
185+
self._name = tracker_device.tracker.tracker_name
186+
self._unit_of_measurement = "V"
187+
self.entity_id = f"{ENTITY_ID_FORMAT.format('external_battery_voltage')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
188+
189+
self._state = 0
190+
191+
@property
192+
def unique_id(self):
193+
"""Return the unique ID."""
194+
return f"external_battery_voltage_{self._tracker_device.tracker.tracker_id}"
195+
196+
@property
197+
def state(self):
198+
"""state property"""
199+
return self._tracker_device.tracker.external_battery_voltage
200+
201+
@property
202+
def unit_of_measurement(self):
203+
"""unit of mesurment property"""
204+
return self._unit_of_measurement
205+
206+
@property
207+
def name(self):
208+
""" GeoRide internal_battery_voltage name """
209+
return f"{self._name} external_battery_voltage"
210+
211+
@property
212+
def icon(self):
213+
"""icon getter"""
214+
return "mdi:battery"
215+
216+
@property
217+
def device_info(self):
218+
"""Return the device info."""
219+
return self._tracker_device.device_info
220+
221+
class GeoRideFixtimeSensorEntity(CoordinatorEntity, SensorEntity):
222+
"""Represent a tracked device."""
223+
224+
def __init__(self, coordinator: DataUpdateCoordinator[Mapping[str, Any]],
225+
tracker_device:Device):
226+
"""Set up GeoRide entity."""
227+
super().__init__(coordinator)
228+
self._tracker_device = tracker_device
229+
self._name = tracker_device.tracker.tracker_name
230+
self.entity_id = f"{ENTITY_ID_FORMAT.format('fixtime')}.{tracker_device.tracker.tracker_id}"# pylint: disable=C0301
231+
232+
self._state = 0
233+
self._device_class = "timestamp"
234+
235+
@property
236+
def unique_id(self):
237+
"""Return the unique ID."""
238+
return f"fixtime_{self._tracker_device.tracker.tracker_id}"
239+
240+
@property
241+
def state(self):
242+
"""state property"""
243+
return self._tracker_device.tracker.fixtime
244+
245+
@property
246+
def name(self):
247+
""" GeoRide fixtime name """
248+
return f"{self._name} last fixed position"
249+
250+
@property
251+
def icon(self):
252+
"""icon getter"""
253+
return "mdi:map-clock"
254+
255+
@property
256+
def device_info(self):
257+
"""Return the device info."""
258+
return self._tracker_device.device_info

0 commit comments

Comments
 (0)
Please sign in to comment.