"""Support for the Mopar vehicle sensor platform.""" from homeassistant.components.mopar import ( ATTR_VEHICLE_INDEX, DATA_UPDATED, DOMAIN as MOPAR_DOMAIN, ) from homeassistant.const import ATTR_ATTRIBUTION, LENGTH_KILOMETERS from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity ICON = "mdi:car" async def async_setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Mopar platform.""" data = hass.data[MOPAR_DOMAIN] add_entities( [MoparSensor(data, index) for index, _ in enumerate(data.vehicles)], True ) class MoparSensor(Entity): """Mopar vehicle sensor.""" def __init__(self, data, index): """Initialize the sensor.""" self._index = index self._vehicle = {} self._vhr = {} self._tow_guide = {} self._odometer = None self._data = data self._name = self._data.get_vehicle_name(self._index) @property def name(self): """Return the name of the sensor.""" return self._name @property def state(self): """Return the state of the sensor.""" return self._odometer @property def device_state_attributes(self): """Return the state attributes.""" attributes = { ATTR_VEHICLE_INDEX: self._index, ATTR_ATTRIBUTION: self._data.attribution, } attributes.update(self._vehicle) attributes.update(self._vhr) attributes.update(self._tow_guide) return attributes @property def unit_of_measurement(self): """Return the unit of measurement.""" return self.hass.config.units.length_unit @property def icon(self): """Return the icon.""" return ICON @property def should_poll(self): """Return the polling requirement for this sensor.""" return False async def async_added_to_hass(self): """Handle entity which will be added.""" async_dispatcher_connect( self.hass, DATA_UPDATED, self._schedule_immediate_update ) def update(self): """Update device state.""" self._vehicle = self._data.vehicles[self._index] self._vhr = self._data.vhrs.get(self._index, {}) self._tow_guide = self._data.tow_guides.get(self._index, {}) if "odometer" in self._vhr: odo = float(self._vhr["odometer"]) self._odometer = int(self.hass.config.units.length(odo, LENGTH_KILOMETERS)) @callback def _schedule_immediate_update(self): self.async_schedule_update_ha_state(True)