Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Downloads Downloads Downloads

python-edata

Este 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. Soporta facturación con PVPC (según disponibilidad de datos de REData) y tarificación fija personalizable mediante fórmulas. Todos los datos se almacenan localmente en una base de datos SQLite. Es el corazón de la integración homeassistant-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ón

Puedes instalar la última versión estable mediante:

pip install e-data

Si quieres probar la versión dev o contribuir a su desarrollo, clona este repositorio e instala manualmente las dependencias:

pip install -r requirements.txt

Estructura

El paquete consta de varios módulos:

  • Proveedores (providers): Conectores para consultar diferentes fuentes de datos.

    • datadis.py: Conector para la API privada de Datadis (datos de consumo, potencia, contratos y suministros).
    • redata.py: Conector para la API pública de REData (precios PVPC en tiempo real).
  • Servicios (services): Capa de lógica de negocio que gestiona la sincronización y procesamiento de datos.

    • data_service.py: Servicio para gestionar datos de telemetría (consumo, potencia, estadísticas).
    • bill_service.py: Servicio para gestionar la facturación y cálculo de costes.
  • Modelos (models): Definiciones de estructuras de datos usando Pydantic.

    • supply.py: Modelos de suministros (Supply) y contratos (Contract).
    • data.py: Modelos de datos de telemetría (Energy, Power, Statistics).
    • bill.py: Modelos de facturación (Bill, EnergyPrice, BillingRules, PVPCBillingRules).
  • Base de datos (database): Gestión de persistencia local con SQLite.

    • controller.py: Controlador principal de la base de datos (EdataDB).
    • models.py: Modelos SQLModel para las tablas de la base de datos.
    • queries.py: Consultas SQL predefinidas.
  • Utilidades (core): Funciones auxiliares para cálculos de tarifas, fechas, etc.

  • CLI (cli.py): Interfaz de línea de comandos para operaciones básicas.

Ejemplo de uso

Usando los servicios (recomendado)

Partimos 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 titular
  • Copie 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
import asyncio
from datetime import datetime
from edata.services.data_service import DataService
from edata.services.bill_service import BillService
from edata.models.bill import PVPCBillingRules

async def main():
    # Crear el servicio de datos
    data_service = DataService(
        cups="ES0000000000000000XX",  # Tu CUPS
        datadis_user="12345678A",     # Tu NIF/usuario
        datadis_pwd="tu_password",
        storage_path="./my_data"      # Directorio para la BD 
        datadis_authorized_nif=None,  # NIF autorizado (opcional)
    )
    
    # Actualizar todos los datos disponibles
    await data_service.update()
    
    # Obtener suministros y contratos
    supplies = await data_service.get_supplies()
    contracts = await data_service.get_contracts()
    
    # Obtener datos de consumo y potencia
    energy = await data_service.get_energy()
    power = await data_service.get_power()
    
    # Obtener estadísticas agregadas (diarias o mensuales)
    daily_stats = await data_service.get_statistics("day")
    monthly_stats = await data_service.get_statistics("month")
    
    # Crear el servicio de facturación
    bill_service = BillService(
        cups="ES0000000000000000XX",
        storage_path="./my_data"  # Mismo directorio que data_service
    )
    
    # Definir reglas de facturación PVPC (valores por defecto españoles)
    pvpc_rules = PVPCBillingRules(
        p1_kw_year_eur=30.67266,      # Término potencia P1 (€/kW/año)
        p2_kw_year_eur=1.4243591,     # Término potencia P2 (€/kW/año)
        meter_month_eur=0.81,          # Alquiler contador (€/mes)
        market_kw_year_eur=3.113,      # Otros cargos (€/kW/año)
        electricity_tax=1.0511300560,  # Impuesto eléctrico
        iva_tax=1.21                   # IVA (21%)
    )
    
    # Actualizar facturación con PVPC
    start_date = datetime(2024, 1, 1)
    end_date = datetime(2024, 12, 31)
    await bill_service.update(start_date, end_date, billing_rules=pvpc_rules, is_pvpc=True)
    
    # Obtener facturas calculadas
    bills = await bill_service.get_bills(start_date, end_date, type_="hour")
    daily_bills = await bill_service.get_bills(start_date, end_date, type_="day")
    monthly_bills = await bill_service.get_bills(start_date, end_date, type_="month")
    
    # Mostrar resumen
    total_cost = sum(b.value_eur for b in bills)
    print(f"Coste total: {total_cost:.2f} €")
    print(f"Consumo total: {sum(e.value_kwh for e in energy):.2f} kWh")

# Ejecutar
asyncio.run(main())

Usando la CLI

El paquete incluye una interfaz de línea de comandos para operaciones básicas:

# Ver suministros disponibles
python -m edata.cli show-supplies <username>

# Descargar todos los datos de un CUPS
python -m edata.cli download-all --cups ES0000000000000000XX <username>

# Actualizar facturación con tarifa fija
python -m edata.cli update-custom-bill \
  --cups ES0000000000000000XX \
  --p1-kw-year-eur 30.67 \
  --p2-kw-year-eur 1.42 \
  --p1-kwh-eur 0.15 \
  --p2-kwh-eur 0.10 \
  --p3-kwh-eur 0.08 \
  --meter-month-eur 0.81

Metadata

Release files for e-data 2.1.0.dev141

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for e-data 2.1.0.dev141
File Size Uploaded
e_data-2.1.0.dev141.tar.gz 80.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for e-data 2.1.0.dev141
File Interpreter ABI Platform
e_data-2.1.0.dev141-py3-none-any.whl Python 3 none any Details

Total release size: 157.0 kB

Release files / e_data-2.1.0.dev141.tar.gz

Download URL e_data-2.1.0.dev141.tar.gz
Size 80.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6519789c91770524c2c31ff0e2d3f7ca4df91ecb43ab0d17d9b6131d06faa180
BLAKE2b-256 checksum
How to use checksums
b7d5b9ad8001ff1e245ba3e9d432112ab72a52bc0f0636e20a3cffcca91c1059
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / e_data-2.1.0.dev141-py3-none-any.whl

Download URL e_data-2.1.0.dev141-py3-none-any.whl
Size 76.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
31d2f2310fdd46f855e47f8ac8ad97fa9ba0d2977874d6cbf8dd8a65ee12f2d0
BLAKE2b-256 checksum
How to use checksums
c15d75a714df59e19d193d99af9f7203966c7bb34d9dcd185016eb003da21caa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release history Release notifications | RSS feed

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

This release

2.1.0.dev141 This release

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.2.22

2 release files

1.2.21

2 release files

1.2.20

2 release files

1.2.19

2 release files

1.2.18

2 release files

1.2.17

2 release files

1.2.16

2 release files

1.2.15

2 release files

1.2.14

2 release files

1.2.13

2 release files

1.2.12

2 release files

1.2.11

2 release files

1.2.10

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.14

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page