def setup(hass, config): """Setup Volkswagen Carnet component""" username = config[DOMAIN].get(CONF_USERNAME) password = config[DOMAIN].get(CONF_PASSWORD) interval = config[DOMAIN].get(CONF_UPDATE_INTERVAL) state = hass.data[DATA_KEY] = VolkswagenData(config) # create carnet connection connection = Connection(username, password) # login to carnet _LOGGER.debug("Creating connection to carnet") connection._login() if not connection.logged_in: _LOGGER.warning('Could not login to carnet') def discover_vehicle(vehicle): """Load relevant platforms.""" state.entities[vehicle.vin] = [] for attr, (component, *_) in RESOURCES.items(): if (getattr(vehicle, attr + '_supported', True) and attr in config[DOMAIN].get(CONF_RESOURCES, [attr])): discovery.load_platform(hass, component, DOMAIN, (vehicle.vin, attr), config) def update_vehicle(vehicle): """Review updated information on vehicle.""" state.vehicles[vehicle.vin] = vehicle if vehicle.vin not in state.entities: discover_vehicle(vehicle) for entity in state.entities[vehicle.vin]: entity.schedule_update_ha_state() dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) def update(now): """Update status from Volkswagen Carnet""" try: if not connection.logged_in: connection._login() if not connection.logged_in: _LOGGER.warning('Could not login to carnet') else: if not connection.update(): _LOGGER.warning("Could not query carnet") return False else: _LOGGER.debug("Updating data from carnet") for vehicle in connection.vehicles: update_vehicle(vehicle) return True finally: track_point_in_utc_time(hass, update, utcnow() + interval) _LOGGER.info("Starting service") return update(utcnow())
def __init__(self, args): self.carnet_username = args.carnet_username self.carnet_password = args.carnet_password self.carnet_retry = args.carnet_retry self.carnet_wait = args.carnet_wait self.carnet_task = args.carnet_task if self.carnet_retry: self.carnet_wait = True # create carnet connection vw = Connection(self.carnet_username, self.carnet_password) # login to carnet if not vw._login(): print('Failed to login with user %s, check your credentials.' % self.carnet_username) sys.exit(1) # fetch vehicles vw.update() # we only support 1 vehicle at this time self.vehicle = list(vw.vehicles)[0]
def setup(hass, config): """Setup Volkswagen Carnet component""" interval = config[DOMAIN].get(CONF_SCAN_INTERVAL) data = hass.data[DATA_KEY] = VolkswagenData(config) from volkswagencarnet import Connection _LOGGER.debug("Creating connection to volkswagen carnet") connection = Connection( username=config[DOMAIN].get(CONF_USERNAME), password=config[DOMAIN].get(CONF_PASSWORD), ) # login to carnet _LOGGER.debug("Logging in to volkswagen carnet") connection._login() if not connection.logged_in: _LOGGER.warning( 'Could not login to volkswagen carnet, please check your credentials' ) def is_enabled(attr): """Return true if the user has enabled the resource.""" return attr in config[DOMAIN].get(CONF_RESOURCES, [attr]) def discover_vehicle(vehicle): """Load relevant platforms.""" data.vehicles.add(vehicle.vin) data.entities[vehicle.vin] = [] dashboard = vehicle.dashboard(mutable=config[DOMAIN][CONF_MUTABLE]) for instrument in (instrument for instrument in dashboard.instruments if instrument.component in COMPONENTS and is_enabled(instrument.slug_attr)): data.instruments.add(instrument) discovery.load_platform( hass, COMPONENTS[instrument.component], DOMAIN, (vehicle.vin, instrument.component, instrument.attr), config) def update(now): """Update status from Volkswagen Carnet""" try: # check if we can login again if not connection.logged_in: connection._login() if not connection.logged_in: _LOGGER.warning( 'Could not login to volkswagen carnet, please check your credentials' ) return False else: if not connection.update(request_data=False): _LOGGER.warning( "Could not query update from volkswagen carnet") return False else: _LOGGER.debug("Updating data from volkswagen carnet") for vehicle in connection.vehicles: if vehicle.vin not in data.vehicles: _LOGGER.info( "Adding data for VIN: %s from carnet" % vehicle.vin.lower()) discover_vehicle(vehicle) for entity in data.entities[vehicle.vin]: entity.schedule_update_ha_state() dispatcher_send(hass, SIGNAL_STATE_UPDATED, vehicle) return True finally: track_point_in_utc_time(hass, update, utcnow() + interval) _LOGGER.info("Starting volkswagencarnet component") return update(utcnow())
async def async_setup(hass, config): """Setup Volkswagen Carnet component""" session = async_get_clientsession(hass) _LOGGER.debug("Creating connection to volkswagen carnet") connection = Connection( session=session, username=config[DOMAIN].get(CONF_USERNAME), password=config[DOMAIN].get(CONF_PASSWORD), ) interval = config[DOMAIN].get(CONF_SCAN_INTERVAL) data = hass.data[DATA_KEY] = VolkswagenData(config) # login to carnet # _LOGGER.debug("Logging in to volkswagen carnet") # connection._login() # if not connection.logged_in: # _LOGGER.warning('Could not login to volkswagen carnet, please check your credentials') def is_enabled(attr): """Return true if the user has enabled the resource.""" return attr in config[DOMAIN].get(CONF_RESOURCES, [attr]) def discover_vehicle(vehicle): """Load relevant platforms.""" data.vehicles.add(vehicle.vin) dashboard = vehicle.dashboard( mutable=config[DOMAIN][CONF_MUTABLE], spin=config[DOMAIN][CONF_SPIN], scandinavian_miles=config[DOMAIN][CONF_SCANDINAVIAN_MILES], ) for instrument in (instrument for instrument in dashboard.instruments if instrument.component in COMPONENTS and is_enabled(instrument.slug_attr)): data.instruments.add(instrument) hass.async_create_task( discovery.async_load_platform( hass, COMPONENTS[instrument.component], DOMAIN, (vehicle.vin, instrument.component, instrument.attr), config)) async def update(now): """Update status from Volkswagen Carnet""" try: # check if we can login if not connection.logged_in: await connection._login() if not connection.logged_in: _LOGGER.warning( 'Could not login to volkswagen carnet, please check your credentials and verify that the service is working' ) return False # update vehicles if not await connection.update(): _LOGGER.warning( 'Could not query update from volkswagen carnet') return False _LOGGER.debug("Updating data from volkswagen carnet") for vehicle in connection.vehicles: if vehicle.vin not in data.vehicles: _LOGGER.info( f'Adding data for VIN: {vehicle.vin} from carnet') discover_vehicle(vehicle) async_dispatcher_send(hass, SIGNAL_STATE_UPDATED) return True finally: async_track_point_in_utc_time(hass, update, utcnow() + interval) _LOGGER.info("Starting volkswagencarnet component") return await update(utcnow())