Package: e-data
python-edataEste paquete proporciona herramientas para la descarga de tus datos de consumo eléctrico (desde Datadis.es) y su posterior procesado. La motivación principal es que conocer el consumo puede ayudarnos a reducirlo, e incluso a elegir una tarifa que mejor se adapte a nuestras necesidades. A día de hoy sus capacidades de facturación (€) son limitadas, soporta PVPC (según disponibilidad de datos de REData) y tarificación fija por tramos. Es el corazón de la integraciónhomeassistant-edata.Esta herramienta no mantiene ningún tipo de vinculación con los proveedores de datos anteriormente mencionados, simplemente consulta la información disponible y facilita su posterior análisis.InstalaciónPuedes instalar la última versión estable mediante:pipinstalle-dataSi quieres probar la versióndevo contribuir a su desarrollo, clona este repositorio e instala manualmente las dependencias:pipinstall-rrequirements.txtEstructuraEl paquete consta de tres módulos diferenciados:Conectores(móduloconnectors), para definir los métodos de consulta a los diferentes proveedores: Datadis y REData.Procesadores(móduloprocessors), para procesar datos de consumo, maxímetro, o coste (tarificación). Ahora mismo consta de tres procesadores:billing,consumptionymaximeter, además de algunas utilidades ubicadas enutils. Los procesadores deben heredar de la clase Processor definida enbase.pyAyudantes(módulohelpers), para ayudar en el uso y gestión de los anteriores, presentando de momento un único ayudante llamadoEdataHelperque te permite recopilarXdías de datos (por defecto 365) y automáticamente procesarlos. Los datos son almacenados en la variabledata, mientras que los atributos autocalculados son almacenados en la variableattributes. Por lo general, primero utilizan los conectores y luego procesan los datos, gestionando varias tareas de recuperación (principalmente para Datadis).Estos módulos corresponden a la siguiente estructura del paquete:edata/
    · __init__.py
    · connectors/
        · __init__.py
        · datadis.py
        · redata.py
    · processors/
        · __init__.py
        · base.py
        · billing.py
        · consumption.py
        · maximeter.py
        · utils.py
    · helpers.pyEjemplo de usoPartimos de que tenemos credenciales en Datadis.es. Algunas aclaraciones:No es necesario solicitar API pública en el registro (se utilizará la API privada habilitada por defecto)El username suele ser el NIF del titularCopie el CUPS de la web de Datadis, algunas comercializadoras adhieren caracteres adicionales en el CUPS mostrado en su factura.La herramienta acepta el uso de NIF autorizado para consultar el suministro de otro titular.fromdatetimeimportdatetimeimportjson# importamos definiciones de datos que nos interesenfromedata.definitionsimportPricingRules# importamos el ayudantefromedata.helpersimportEdataHelper# importamos el procesador de utilidadesfromedata.processorsimportutils# Preparar reglas de tarificación (si se quiere)PRICING_RULES_PVPC=PricingRules(p1_kw_year_eur=30.67266,p2_kw_year_eur=1.4243591,meter_month_eur=0.81,market_kw_year_eur=3.113,electricity_tax=1.0511300560,iva_tax=1.05,# podemos rellenar los siguientes campos si quisiéramos precio fijo (y no pvpc)p1_kwh_eur=None,p2_kwh_eur=None,p3_kwh_eur=None,)# Instanciar el helper# 'authorized_nif' permite indicar el NIF de la persona que nos autoriza a consultar su CUPS.# 'data' permite "cargar" al helper datos anteriores (resultado edata.data de una ejecución anterior), para evitar volver a consultar los mismos.edata=EdataHelper("datadis_user","datadis_password","cups",datadis_authorized_nif=None,pricing_rules=PRICING_RULES_PVPC,# si se le pasa None, no aplica tarificacióndata=None,# aquí podríamos cargar datos anteriores)# Solicitar actualización de todo el histórico (se almacena en edata.data)edata.update(date_from=datetime(1970,1,1),date_to=datetime.today())# volcamos todo lo obtenido a un ficherowithopen("backup.json","w")asfile:json.dump(utils.serialize_dict(edata.data),file)# se puede utilizar deserialize_dict para la posterior lectura del backup# Imprimir atributosprint(edata.attributes)