home / infca / solar (navigation links) Coffee and love taste best when hot

Que es | API : cURL, python (token) i consum Dubtes | Links | End | mapa

Acces a les dades de Datadis

go 2 top
Datadis

Homepage

At Datadis we connect you with your electricity consumption data, at any distributor where your supply is connected.

Per a registrar-se, cal enviar foto del DNI i ells confirmen per email.

detalls de la API de Datadis

private-api, user's manual {***}

L'API Datadis ens permet accedir a la informació de consum emmagatzemada a les bases de dades de les diferents distribuïdores d'electricitat, mitjançant una única API. Podem veure dades dels nostres propis subministraments o de tercers que ens hagin autoritzat o dades agregades per zones, sectors o potències màximes.
Es crea seguint les definicions de l'API REST - see REST Architecture
Per poder utilitzar l'API de Datadis és necessari estar registrat a la plataforma ja que per consumir qualsevol recurs cal disposar d'un token, obtingut a través de la crida exposada a l'apartat Autenticació, que s'inserirà a la capçalera de la convocatòria a través del capçalera d'Autorització seguida de Bearer <token>.
És una API de només consulta, no afegir, modificar o esborrar informació, per la qual cosa els únics verbs utilitzats són POST per obtenir el token i GET per demanar informació.

Autenticació POST

Funcio : obté el token d'autenticació per a l'àrea privada.

URL = https://datadis.es/nikola-auth/tokens/login

Paràmetres :

username string required NIF de l'usuari donat d'alta a Datadis. password string required Contrasenya d'accés a Datadis de l'usuari.

Exemple CURL :

curl -d "username=documentoUsuario&password=contraseña" -X POST https://datadis.es/nikola-auth/tokens/login
usando el token en las diferentes llamadas

curl -X GET "https://datadis.es/api-private/api/get-supplies" -H "accept: application/json" -H "Authorization: Bearer eyJh………………”
/get-distributors-with-supplies GET

Funcio : obté una llista de codis de distribuïdor en què l'usuari té subministraments.

URL = https://datadis.es/api-private/api/get-distributors-with-supplies

Paràmetres ;

authorizedNif string Només en cas que es vulgui obtenir la llista de codis de distribuïdor que disposen de subministraments del NIF autoritzat.
/get-max-power GET

Funcio : cerqueu la potència màxima i el resultat apareixerà en kW

URL = https://datadis.es/api-private/api/get-max-power

Paràmetres :

cups string required Les CUPS que volem conèixer els detalls del contracte distributorCode string required Codi de distribuïdor, que s'obté amb la sol·licitud d'obtenció de subministraments startDate string(date-time) required Data d'inici entre les dades de cerca. Format: AAAA/MM. Exemple = 2020/02. endDate string(date-time) required Data de finalització entre les dades de cerca. Format: AAAA/MM. Exemple = 2020/02. authorizedNif string --- En cas que vulgueu obtenir el detall del contracte del NIF autoritzat
/get-consumption-data GET

Funcio : cerca les dades de consum

URL = https://datadis.es/api-private/api/get-consumption-data

Paràmetres :

cups string required Les CUPS que volem conèixer les dades de consum distributorCode string required Codi de distribuïdor, que s'obté amb la sol·licitud d'obtenció de subministraments startDate string(date-time) required Data d'inici entre les dades de cerca. Format: AAAA/MM. Exemple = 2020/02. endDate string(date-time) required Data de finalització entre les dades de cerca. Format: AAAA/MM. Exemple = 2020/02. measurementType string required Establiu-lo a 0 (Zero) si voleu obtenir el consum per hora i en 1 (U) si voleu obtenir el consum per quart d'hora. El quart d'hora només està disponible per als PointType 1 i 2, i en el cas de la distribuïdora E-distribució també per al PointType 3 pointType string required Codi de tipus de punt, que s'obté amb la sol·licitud d'obtenció de subministraments authorizedNif string - Només en cas que es vulgui obtenir les dades de consum d'un NIF autoritzat.
Respostes i errors

Datadis utilitza els codis de resposta HTTP habituals per saber si s'ha completat satisfactòriament la sol·licitud.

Bàsicament hi ha 3 tipus de respostes: 2xx Respostes satisfactòries ; 4xx Error del client ; 5xx Error del servidor

limit consultes

Existe un control en el sistema que no permite repetir llamadas que hayan sido realizadas en las últimas 24 horas.
Pasado este tiempo, se habilitará la posibilidad de volver a realizar la misma llamada.
Este control va en función de un usuario y los parámetros "cups", "distributorCode", "startDate", "endDate", "measurementType", "pointType" y "authorizedNif".

No se permitirán repetir llamadas que generen errores provocados por parte del usuario tales como parámetros incorrectos, formato erróneo, no disponer de autorización, etc.…

Por favor, tenga en cuenta de que, si necesitan los datos, éstos no podrán volver a ser consultados hasta que no hayan pasado 24 horas.
Les recomendamos que guarden los datos obtenidos.

acces a la API de Datadis
lets use "cURL"

Amb aquest codi :

sebas@minie:~/dades/python/Datadis$ cat 2_post_i_get.sh #!/usr/bin/bash MYUSR="38647638D" MYPWD="Patan.2020.3@" MYURLLOGIN="https://datadis.es/nikola-auth/tokens/login" MYURLSUPPLIES="https://datadis.es/api-private/api/get-supplies" TOK=$(curl -s -d "username=$MYUSR&password=$MYPWD" -X POST $MYURLLOGIN) rv=$? echo ">>> POST return code is" $rv if [ "$rv" -eq 0 ]; then Htoken="Authorization: Bearer "$TOK TEXTE=$(curl -s -X GET $MYURLSUPPLIES -H "accept: application/json" -H "$Htoken") rv=$? echo ">>> GET return code is" $rv echo "$TEXTE" fi exit 0

... llegim aquestes dades :

sebas@minie:~/dades/python/Datadis$ ./2_post_i_get.sh >>> POST return code is 0 >>> GET return code is 0 [ { "address" : "MARITIMO 23 1", "cups" : "ES0031406371928008EW0F", "postalCode" : "43803", "province" : "Tarragona", "municipality" : "CAP DE FARA", "distributor" : "EDISTRIBUCIÓN", "validDateFrom" : "2023/06/16", "validDateTo" : "", "pointType" : 5, "distributorCode" : "2" }, { "address" : "M PAS 3 BJO", "cups" : "ES0031305839349001CV0F", "postalCode" : "08322", "province" : "Barcelona", "municipality" : "CORRELLES DE LLOBREGAT", "distributor" : "EDISTRIBUCIÓN", "validDateFrom" : "2023/04/19", "validDateTo" : "", "pointType" : 5, "distributorCode" : "2" } ]
lets use "requests()" - get supplies

Here is the pyhon code to produce the same result as previous cURL :

sebas@minie:~/dades/python/Datadis$ cat 1_post_get_token_then_GET.py #!/usr/bin/python3 # -*- coding: UTF-8 -*- # https://datadis.es/private-api # https://icaen.gencat.cat/web/.content/20_Energia/210_auditoriesenergetiques/enllacos/MANUAL-API-PRIVADA-Y-AGREGADA.pdf # https://realpython.com/api-integration-in-python/ # sebas@minie:~/dades/python/llegir_preu_electre/agafem_altres_dades_de_REE$ cat 10073_eolica_no.py # https://es.stackoverflow.com/questions/607052/peticiones-post-y-get-api-rest import json import requests import sys NIFautoritzat = '38647638D' api_url_login = 'https://datadis.es/nikola-auth/tokens/login' id_params = {'username': NIFautoritzat, 'password': 'Patan.2020.3@'} api_url_get_supplies = 'https://datadis.es/api-private/api/get-supplies' try: print ( '>>> POST request [%s].' % api_url_login ) resposta_post = requests.post(api_url_login, params=id_params) # *************************************************************** resposta_post.raise_for_status() # we want http errors (e.g. 401 Unauthorized) to raise exceptions if resposta_post.status_code == 200: my_token = resposta_post.text # print ( '+++ token [%s].' % my_token ) my_bearer = "Bearer {ftoken}".format(ftoken=my_token) token_header = {"Authorization": my_bearer} # print( "token header is {%s}" % token_header ) print( ">>> GET SUPPLIES request {%s}" % api_url_get_supplies ) resposta_get = requests.get( api_url_get_supplies, headers=token_header) # ************************************************************************** my_supplies = resposta_get.text print ( '+++ supplies [%s].' % my_supplies ) else: print ( '--- login failed RC [%i].' % resposta_post.status_code ) except requests.exceptions.RequestException as e: # https://stackoverflow.com/questions/16511337/correct-way-to-try-except-using-python-requests-module raise SystemExit(e) sys.exit()
lets use "requests()" - get

sebas@minie:~/dades/python/Datadis$ cat 1_post_get_token_then_GET.py szCUPS = 'ES0032455159339031CV0F' # Marti Mas api_url_consum = 'https://datadis.es/api-private/api/get-consumption-data?distributorCode=2&measurementType=0&cups={}&pointType=5&endDate=2023/02&startDate=2023/02'.format(szCUPS) print( ">>> GET CONSUM request {%s}" % api_url_consum ) resposta_consum = requests.get( api_url_consum, headers=token_header) # ********************************************************************** if resposta_consum.status_code == 200: my_consum = resposta_consum.text print ( '+++ TXT consum [%s].' % my_consum ) json_data = resposta_consum.json() json_string = json.dumps(json_data, indent=4) print ( '+++ JSON consum [%s].' % json_string ) else: print ( '--- GET for consum failed - RC [%i].' % resposta_consum.status_code )

manual API privada Datadis {icaen}

python requests() URLs


Datadis vs eDistribucion vs me

Exporto les dades del 2 de Febrer de 2023

Fecha Hora e-D : AE_kWh AS_KWh Datadis : consumptionKWh surplusEnergyKWh 02/02/2023 1 2,551 0 02/02/2023 2 2,519 0 02/02/2023 3 1,414 0 02/02/2023 4 0,84 0 02/02/2023 5 0,852 0 02/02/2023 6 0,807 0 02/02/2023 7 0,843 0 02/02/2023 8 0,984 0 02/02/2023 9 0,713 0 02/02/2023 10 0 0,365 02/02/2023 11 0,071 0 02/02/2023 12 0 0,728 02/02/2023 13 0 1,597 02/02/2023 14 2,274 0 02/02/2023 15 2,467 0 02/02/2023 16 2,245 0 02/02/2023 17 2,851 0 02/02/2023 18 2,683 0 02/02/2023 19 3,811 0 02/02/2023 20 2,863 0 02/02/2023 21 2,594 0 02/02/2023 22 2,67 0 02/02/2023 23 2,011 0 02/02/2023 24 0,898 0 --------------------------------------------- 38.961 2,69

Aixi les seves dades coincideixen completament, gens extrany


Dubtes Datadis


Links Datadis


best 50 Valid HTML 4.01!   Valid CSS! Escriu-me !
Updated 20220505  
Uf !