def download_unit_wind():
    """Download Windeinheit.

    Existing units: 31543 (2019-02-10)
    """
    start_from = 0

    data_version = get_data_version()
    csv_wind = f'data/bnetza_mastr_{data_version}_windeinheit.csv'
    unit_wind = setup_power_unit_wind()
    unit_wind_list = unit_wind['EinheitMastrNummer'].values.tolist()
    unit_wind_list_len = len(unit_wind_list)
    # log.info(f'Number of Windeinheit: {WindMastrNrListLen}')
    print(f'Number of Windeinheit: {unit_wind_list_len}.')

    for i in range(start_from, unit_wind_list_len, 1):
        try:
            unit_wind = get_power_unit_wind(unit_wind_list[i])
            write_to_csv(csv_wind, unit_wind)
            # log.info(f'Downloaded Windeinheit ({i}): {unit_wind_list[i]}')
            print(f'Downloaded Windeinheit ({i}): {unit_wind_list[i]}.')
            # time.sleep(1)
        except:
            # log.info(f'Not able to download Windeinheit ({i}): {unit_wind_list[i]}')
            print(
                f'Not able to download Windeinheit ({i}): {unit_wind_list[i]}.'
            )
def download_power_unit():
    """Download StromErzeuger.

    Existing units: 1822000 (2019-02-10)
    """
    power_unit_list_len = 1822000

    data_version = get_data_version()
    csv_see = f'data/bnetza_mastr_{data_version}_stromerzeuger.csv'
    # log.info(f'Number of expected StromErzeuger: {power_unit_list_len}')
    print(f'Number of expected StromErzeuger: {power_unit_list_len}.')

    for start_from in range(0, power_unit_list_len, 2000):
        try:
            power_unit = get_power_unit(start_from)
            write_to_csv(csv_see, power_unit)

            power_unit_len = len(power_unit)
            # log.info(f'Downloaded StromErzeuger from {start_from}-{start_from + power_unit_len}')
            print(
                f'Downloaded StromErzeuger from {start_from}-{start_from + power_unit_len}.'
            )
        except:
            # log.info(f'Not able to download StromErzeuger from {start_from}')
            print(f'Not able to download StromErzeuger from {start_from}.')
def get_power_unit(start_from):
    """Get Stromerzeugungseinheit from API using GetGefilterteListeStromErzeuger.

    Parameters
    ----------
    start_from : int
        Skip first entries.
    """
    data_version = get_data_version()
    status = 'InBetrieb'
    c = client_bind.GetGefilterteListeStromErzeuger(
        apiKey=api_key,
        marktakteurMastrNummer=my_mastr,
        einheitBetriebsstatus=status,
        startAb=start_from,
        limit=2000)  # Limit of API.
    s = serialize_object(c)
    power_unit = pd.DataFrame(s['Einheiten'])
    power_unit.index.names = ['lid']
    power_unit['version'] = data_version
    power_unit['timestamp'] = str(datetime.datetime.now())

    # remove double quotes from column
    power_unit['Standort'] = power_unit['Standort'].str.replace('"', '')

    return power_unit
def setup_power_unit_wind():
    """Setup file for Stromerzeugungseinheit-Wind.

    Check if file with Stromerzeugungseinheit-Wind exists. Create if not exists.
    Load Stromerzeugungseinheit-Wind from file if exists.

    Returns
    -------
    power_unit_wind : DataFrame
        Stromerzeugungseinheit-Wind.
    """
    data_version = get_data_version()
    csv_see = f'data/bnetza_mastr_{data_version}_stromerzeuger.csv'
    csv_see_wind = f'data/bnetza_mastr_{data_version}_stromerzeuger_wind.csv'
    if not os.path.isfile(csv_see_wind):
        power_unit = enc_read_power_units(csv_see)
        power_unit = power_unit.drop_duplicates()
        power_unit_wind = power_unit[power_unit.Einheittyp == 'Windeinheit']
        power_unit_wind.index.names = ['see_id']
        power_unit_wind.reset_index()
        power_unit_wind.index.names = ['id']
        # log.info(f'Filtered Wind from Stromerzeuger')
        print(f'Filtered Wind from Stromerzeuger.')
        try:
            write_to_csv(csv_see_wind, power_unit_wind)
            return power_unit_wind
        except:
            # log.info(f'Not able to write to file: {csv_see_wind}')
            print(f'Not able to write to file: {csv_see_wind}.')
    else:
        power_unit_wind = enc_read_power_units(csv_see_wind)
        # log.info(f'Read Stromerzeugungseinheit-Wind from {csv_see_wind}.')
        print(f'Read Stromerzeugungseinheit-Wind from {csv_see_wind}.')
        return power_unit_wind
def get_unit_wind_eeg(mastr_wind_eeg):
    """Get EEG-Anlage-Wind from API using GetAnlageEegWind.

    Parameters
    ----------
    mastr_wind_eeg : str
        MaStR EEG Nr.

    Returns
    -------
    unit_wind_eeg : DataFrame
        EEG-Anlage-Wind.
    """
    data_version = get_data_version()
    c = client_bind.GetAnlageEegWind(apiKey=api_key,
                                     marktakteurMastrNummer=my_mastr,
                                     eegMastrNummer=mastr_wind_eeg)
    s = serialize_object(c)
    df = pd.DataFrame(list(s.items()), )
    unit_wind_eeg = df.set_index(list(df.columns.values)[0]).transpose()
    unit_wind_eeg.reset_index()
    unit_wind_eeg.index.names = ['lid']
    unit_wind_eeg["version"] = data_version
    unit_wind_eeg["timestamp"] = str(datetime.datetime.now())
    return unit_wind_eeg
def get_power_unit_wind(mastr_unit_wind):
    """Get Windeinheit from API using GetEinheitWind.

    Parameters
    ----------
    mastr_unit_wind : object
        Wind from EinheitMastrNummerId.

    Returns
    -------
    unit_wind : DataFrame
        Windeinheit.
    """
    data_version = get_data_version()
    c = client_bind.GetEinheitWind(apiKey=api_key,
                                   marktakteurMastrNummer=my_mastr,
                                   einheitMastrNummer=mastr_unit_wind)
    s = serialize_object(c)
    df = pd.DataFrame(list(s.items()), )
    unit_wind = df.set_index(list(df.columns.values)[0]).transpose()
    unit_wind.reset_index()
    unit_wind.index.names = ['lid']
    unit_wind['version'] = data_version
    unit_wind['timestamp'] = str(datetime.datetime.now())
    return unit_wind
def download_unit_wind_eeg():
    """Download unit_wind_eeg using GetAnlageEegWind request."""
    data_version = get_data_version()
    csv_wind_eeg = f'data/bnetza_mastr_{data_version}_windeeg.csv'
    unit_wind = setup_power_unit_wind()

    unit_wind_list = unit_wind['EegMastrNummer'].values.tolist()
    unit_wind_list_len = len(unit_wind_list)
    # log.info(f'Count of EEG-Anlage-Wind: {unit_wind_list_len}')
    print(f'Count of EEG-Anlage-Wind: {unit_wind_list_len}.')

    for i in range(0, unit_wind_list_len, 1):
        try:
            unit_wind_eeg = get_unit_wind_eeg(unit_wind_list[i])
            write_to_csv(csv_wind_eeg, unit_wind_eeg)
            # log.info(f'Download EEG-Anlage-Wind ({i}): {unit_wind_list[i]}')
            print(f'Download EEG-Anlage-Wind ({i}): {unit_wind_list[i]}.')
        except:
            # log.info(f'Failed download EEG-Anlage-Wind ({i}): {unit_wind_list[i]}')
            print(
                f'Failed download EEG-Anlage-Wind ({i}): {unit_wind_list[i]}.')