1 """Reads vehicle status from StarLine API."""
3 from __future__
import annotations
8 SensorEntityDescription,
15 UnitOfElectricPotential,
24 from .account
import StarlineAccount, StarlineDevice
25 from .const
import DOMAIN
26 from .entity
import StarlineEntity
28 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
31 translation_key=
"battery",
32 device_class=SensorDeviceClass.VOLTAGE,
33 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
34 state_class=SensorStateClass.MEASUREMENT,
38 translation_key=
"balance",
39 state_class=SensorStateClass.MEASUREMENT,
43 translation_key=
"interior_temperature",
44 device_class=SensorDeviceClass.TEMPERATURE,
45 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
46 state_class=SensorStateClass.MEASUREMENT,
50 translation_key=
"engine_temperature",
51 device_class=SensorDeviceClass.TEMPERATURE,
52 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
53 state_class=SensorStateClass.MEASUREMENT,
57 translation_key=
"gsm_signal",
58 native_unit_of_measurement=PERCENTAGE,
59 state_class=SensorStateClass.MEASUREMENT,
63 translation_key=
"fuel",
64 state_class=SensorStateClass.MEASUREMENT,
68 translation_key=
"errors",
69 native_unit_of_measurement=
"errors",
70 entity_category=EntityCategory.DIAGNOSTIC,
71 state_class=SensorStateClass.MEASUREMENT,
75 translation_key=
"mileage",
76 native_unit_of_measurement=UnitOfLength.KILOMETERS,
77 device_class=SensorDeviceClass.DISTANCE,
78 state_class=SensorStateClass.TOTAL_INCREASING,
82 translation_key=
"gps_count",
83 native_unit_of_measurement=
"satellites",
84 state_class=SensorStateClass.MEASUREMENT,
90 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
92 """Set up the StarLine sensors."""
93 account: StarlineAccount = hass.data[DOMAIN][entry.entry_id]
96 for device
in account.api.devices.values()
97 for description
in SENSOR_TYPES
98 if (sensor :=
StarlineSensor(account, device, description)).native_value
105 """Representation of a StarLine sensor."""
109 account: StarlineAccount,
110 device: StarlineDevice,
111 description: SensorEntityDescription,
113 """Initialize StarLine sensor."""
114 super().
__init__(account, device, description.key)
119 """Icon to use in the frontend, if any."""
122 battery_level=self.
_device_device.battery_level_percent,
123 charging=self.
_device_device.car_state.get(
"ign",
False),
131 """Return the state of the sensor."""
133 return self.
_device_device.battery_level
135 return self.
_device_device.balance.get(
"value")
137 return self.
_device_device.temp_inner
139 return self.
_device_device.temp_engine
141 return self.
_device_device.gsm_level_percent
143 return self.
_device_device.fuel.get(
"val")
145 return self.
_device_device.errors.get(
"val")
147 return self.
_device_device.mileage.get(
"val")
149 return self.
_device_device.position.get(
"sat_qty")
154 """Get the unit of measurement."""
156 return self.
_device_device.balance.get(
"currency")
or "₽"
158 type_value = self.
_device_device.fuel.get(
"type")
159 if type_value ==
"percents":
161 if type_value ==
"litres":
162 return UnitOfVolume.LITERS
167 """Return the state attributes of the sensor."""
def extra_state_attributes(self)
def native_unit_of_measurement(self)
None __init__(self, StarlineAccount account, StarlineDevice device, SensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
str icon_for_battery_level(int|None battery_level=None, bool charging=False)
str icon_for_signal_level(int|None signal_level=None)