erp-air 0.0.4b0
Evaluate Air Handling Unit per Ecodesign.
License: MIT
Requires Python: >=3.7,<4.0
Keywords: ahu,erp,ecodesign

# INTRO

Starting from 2018 all ventialtion units should
comply with the requirements of the 
COMMISSION REGULATION (EU) No 1253/2014 of 7 July 2014
implementing Directive 2009/125/EC of the European 
Parliament and of the Council with regard
to ecodesign requirements for ventilation units.

This package solves only non-residential ventilation
units.

These requirements sometimes being refered as `ErP` or
`Ecodesign`.

It is importnat to introduce some notations in order
to understand the code better:


**nrvu** - non-residential ventialtion unit

**sfp** - specific fan power

**int** - internal (do not confuse with integer:))

**ext** - external

**hrs** - heat recover system, i.e. rotory wheel,
    plate heat exchanger o run-around-coil

**rac** - run-around coil heat recovery

**rw** - rotory wheel heat recovery

**phex** - plate heat exchnager heat recovery

**uvu** - unidirectional ventialtion unit

**bvu** - bidirectional ventialtion unit

**eff** - efficiency

**sup** - suply side of the air handling unit

**eta** - extract side of the air handling unit


More expanded list of notation can be found
in the Article 2 and Annex I.2 of the 
[regulation](_resources/CELEX_32014R1253_EN_TXT.pdf)


# INSTALATION
There are two ways:
1. pip install erp-air
2. pull the docker image from 
[project registry](https://gitlab.com/remak-dva/erp-air/container_registry)

# USAGE
```python
import attr

from erp_air import (
    validate_ahu,
    ErpResponse,
    ErpRequest
)

erp_request = ErpRequest(
    unit_class="nrvu",
    unit_type="bvu",
    has_medium_filter_eta=True,
    has_fine_filter_sup=True,
    hrs_type="phex",
    hrs_thermal_eff_en308=0.827,
    has_multispeed_drive=True,
    has_variablespeed_drive=True,
    airflow_nominal_sup=1,
    airflow_nominal_eta=1,
    electric_power_input_effective=155,
    pressure_drop_int_vent_comps_sup=307,
    pressure_drop_int_vent_comps_eta=266,
    pressure_drop_int_non_vent_comps_sup=250,
    pressure_drop_int_non_vent_comps_eta=250,
    pressure_drop_ext_sup_nominal=250,
    pressure_drop_ext_eta_nominal=250,
    filter_section_area_sup=0.5,
    filter_section_area_eta=0.5,
    fan_section_area_sup=0.5,
    fan_section_area_eta=0.5,
    fan_eff_static_eu_327_2011_sup=0.35,
    fan_eff_static_eu_327_2011_eta=0.35,
    fan_eff_system_static_sup=0.4881,
    fan_eff_system_static_eta=0.4832,
    external_leakage_rate=0.004,
    internal_leakage_rate=0.004,
    filters_eurovent_compliance=True,
    filter_energy_class_eurovent_sup="A",
    filter_energy_class_eurovent_eta="A",
    recycling_manual_url="url://",
    has_thermal_bypass_on_hrs=True,
    has_visual_signaling_on_filters=True,
    has_alarm_on_filters=True,
    manufacturer_name="Remak",
    manufacturer_model="Some model",
)
erp_response = ErpResponse(
    comply=True,
    sfp_int=1178,
    sfp_int_lim=1241,
    hrs_thermal_eff=0.827,
    hrs_thermal_eff_lim=0.73,
    hrs_type="phex",
    has_multispeed_drive=True,
    has_variablespeed_drive=True,
    has_hrs=True,
    has_thermal_bypass_on_hrs=True,
    fan_eff_uvu=0.4881,
    fan_eff_uvu_min=None,
    has_visual_signaling_on_filters=True,
    has_alarm_on_filters=True,
    manufacturer_name="Remak",
    manufacturer_model="Some model",
    unit_class="NRVU",
    unit_type="BVU",
    airflow_nominal_sup=1,
    airflow_nominal_eta=1,
    electric_power_input_effective=155,
    face_velocity_sup=2.0,
    face_velocity_eta=2.0,
    pressure_drop_ext_sup_nominal=250,
    pressure_drop_ext_eta_nominal=250,
    pressure_drop_int_vent_comps_sup=307,
    pressure_drop_int_vent_comps_eta=266,
    pressure_drop_int_non_vent_comps_sup=250,
    pressure_drop_int_non_vent_comps_eta=250,
    fan_eff_static_eu_327_2011_sup=0.35,
    fan_eff_static_eu_327_2011_eta=0.35,
    external_leakage_rate=0.004,
    internal_leakage_rate=0.004,
    filters_en779_compliance=True,
    filter_energy_class_eurovent_sup="A",
    filter_energy_class_eurovent_eta="A",
    recycling_manual_url="url://",
    warnings=None,
    errors=None,
)
assert attr.asdict(
    validate_ahu(erp_request)
) == attr.asdict(erp_response)
```