def test_has_battery(monkeypatch): """Test has_battery().""" _mock = TeslaMock(monkeypatch) _controller = Controller(None) _data = _mock.data_request_vehicle() _sensor = OnlineSensor(_data, _controller) assert not _sensor.has_battery()
def test_get_value_on_init(monkeypatch): """Test get_value() after initialization.""" _mock = TeslaMock(monkeypatch) _controller = Controller(None) _data = _mock.data_request_vehicle() _sensor = OnlineSensor(_data, _controller) assert not _sensor is None assert _sensor.get_value() is None
async def test_get_value_after_update(monkeypatch): """Test get_value() after an update.""" _mock = TeslaMock(monkeypatch) _controller = Controller(None) monkeypatch.setitem(_controller.car_online, "5YJSA11111111111", True) monkeypatch.setitem(_controller.car_state, "5YJSA11111111111", TeslaMock.data_request_vehicle()) _data = _mock.data_request_vehicle() _sensor = OnlineSensor(_data, _controller) await _sensor.async_update() assert not _sensor is None assert not _sensor.get_value() is None assert _sensor.get_value()
async def test_get_value_off(monkeypatch): """Test get_value() for offline mode.""" _mock = TeslaMock(monkeypatch) _controller = Controller(None) monkeypatch.setitem(_controller.car_online, "5YJSA11111111111", False) monkeypatch.setitem(_controller.car_state, "5YJSA11111111111", TeslaMock.data_request_vehicle()) _data = _mock.data_request_vehicle() _sensor = OnlineSensor(_data, _controller) _data["state"] = "asleep" await _sensor.async_update() assert not _sensor is None assert not _sensor.get_value() is None assert not _sensor.get_value()
def _add_components(self, car): self.__components.append(Climate(car, self)) self.__components.append(Battery(car, self)) self.__components.append(Range(car, self)) self.__components.append(TempSensor(car, self)) self.__components.append(Lock(car, self)) self.__components.append(ChargerLock(car, self)) self.__components.append(ChargerConnectionSensor(car, self)) self.__components.append(ChargingSensor(car, self)) self.__components.append(ChargerSwitch(car, self)) self.__components.append(RangeSwitch(car, self)) self.__components.append(ParkingSensor(car, self)) self.__components.append(GPS(car, self)) self.__components.append(Odometer(car, self)) self.__components.append(OnlineSensor(car, self)) self.__components.append(SentryModeSwitch(car, self)) self.__components.append(TrunkLock(car, self)) self.__components.append(FrunkLock(car, self))
async def connect(self, test_login=False, wake_if_asleep=False) -> Tuple[Text, Text]: """Connect controller to Tesla. Args test_login (bool, optional): Whether to test credentials only. Defaults to False. wake_if_asleep (bool, optional): Whether to wake up any sleeping cars to update state. Defaults to False. Returns Tuple[Text, Text]: Returns the refresh_token and access_token """ cars = await self.get_vehicles() self._last_attempted_update_time = time.time() self.__controller_lock = asyncio.Lock() for car in cars: vin = car["vin"] self.__id_vin_map[car["id"]] = vin self.__vin_id_map[vin] = car["id"] self.__vin_vehicle_id_map[vin] = car["vehicle_id"] self.__vehicle_id_vin_map[car["vehicle_id"]] = vin self.__lock[vin] = asyncio.Lock() self.__wakeup_conds[vin] = asyncio.Lock() self._last_update_time[vin] = 0 self._last_wake_up_time[vin] = 0 self.__update[vin] = True self.__update_state[vin] = "normal" self.car_state[vin] = car self.car_online[vin] = car["state"] == "online" self.__last_parked_timestamp[ vin] = self._last_attempted_update_time self.__climate[vin] = {} self.__charging[vin] = {} self.__state[vin] = {} self.__config[vin] = {} self.__driving[vin] = {} self.__gui[vin] = {} self.__components.append(Climate(car, self)) self.__components.append(Battery(car, self)) self.__components.append(Range(car, self)) self.__components.append(TempSensor(car, self)) self.__components.append(Lock(car, self)) self.__components.append(ChargerLock(car, self)) self.__components.append(ChargerConnectionSensor(car, self)) self.__components.append(ChargingSensor(car, self)) self.__components.append(ChargerSwitch(car, self)) self.__components.append(RangeSwitch(car, self)) self.__components.append(ParkingSensor(car, self)) self.__components.append(GPS(car, self)) self.__components.append(Odometer(car, self)) self.__components.append(OnlineSensor(car, self)) self.__components.append(SentryModeSwitch(car, self)) if not test_login: tasks = [ self.update(car["id"], wake_if_asleep=wake_if_asleep) for car in cars ] _LOGGER.debug("tasks %s %s", tasks, wake_if_asleep) try: await asyncio.gather(*tasks) except (TeslaException, RetryLimitError): pass return (self.__connection.refresh_token, self.__connection.access_token)