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]
예제 #3
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())
예제 #4
0
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())