This Go library calls the Eco2mix API from RTE and returns data about the French electricity grid
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
8.9 KiB

package eco2mix
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"time"
)
type Eco2mixClient struct {
BaseUrl string
httpClient *http.Client
}
func NewEco2mixClient(baseUrl string, client *http.Client) *Eco2mixClient {
if baseUrl == "" {
baseUrl = OPENDATASOFT_API_BASEURL
}
if client == nil {
client = http.DefaultClient
}
c := Eco2mixClient{
BaseUrl: baseUrl,
httpClient: client,
}
return &c
}
func (client *Eco2mixClient) FetchNationalRealTimeData(maxResults int) ([]NationalRealTimeFields, error) {
params := url.Values{}
params.Add("dataset", "eco2mix-national-tr")
params.Add("facet", "nature")
params.Add("facet", "date_heure")
params.Add("start", "0")
params.Add("rows", fmt.Sprintf("%d", maxResults))
params.Add("sort", "date_heure")
params.Add("q", fmt.Sprintf("date_heure:[%s TO #now()] AND NOT #null(taux_co2)", time.Now().Format("2006-01-02")))
queryString := params.Encode()
resp, err := client.httpClient.Get(fmt.Sprintf(OPENDATASOFT_API_PATH, client.BaseUrl, queryString))
if err != nil {
return nil, err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var data NationalRealTimeResponse
err = json.Unmarshal(body, &data)
if err != nil {
return nil, err
}
var fields []NationalRealTimeFields
for _, r := range data.Records {
fields = append(fields, r.Fields)
}
return fields, nil
}
const (
OPENDATASOFT_API_PATH = `%s/api/records/1.0/search/?%s`
OPENDATASOFT_API_BASEURL = `https://odre.opendatasoft.com`
)
// Ce jeu de données, rafraîchi une fois par heure, présente des données
// "temps réel" issues de l'application éCO2mix. Elles proviennent des
// télémesures des ouvrages, complétées par des forfaits et estimations.
//
// Vous y trouverez au pas quart d'heure :
//
// - La consommation réalisée.
// - Les prévisions de consommation établies la veille (J-1) et celles
// réactualisées le jour même (J).
// - La production selon les différentes filières composant le mix énergétique.
// - La consommation des pompes dans les Stations de Transfert d'Energie
// par Pompage (STEP).
// - Les échanges physiques aux frontières.
// - Une estimation des émissions de carbone générées par la production
// d'électricité en France.
// - Le découpage en filière et technologie du mix de production.
//
// Vous y trouverez au pas demi-heure :
//
// - Les échanges commerciaux aux frontières.
//
type NationalRealTimeFields struct {
Bioenergies int64 `json:"bioenergies"` // Bioénergies (MW)
BioenergiesBiogaz int64 `json:"bioenergies_biogaz"` // Bioénergies - Biogaz (MW) - Production bioénergies réalisée à partir du biogaz
BioenergiesBiomasse int64 `json:"bioenergies_biomasse"` // Bioénergies - Biomasse (MW) - Production bioénergies réalisée à partir de la biomasse
BioenergiesDechets int64 `json:"bioenergies_dechets"` // Bioénergies - Déchets (MW) - Production bioénergies réalisée à partir des déchets
Charbon int64 `json:"charbon"` // Charbon (MW)
Consommation int64 `json:"consommation"` // Consommation (MW)
Date string `json:"date"` // Date
DateHeure string `json:"date_heure"` // Date - Heure
DestockageBatterie string `json:"destockage_batterie"` // Déstockage batterie (MW)
EchCommAllemagneBelgique string `json:"ech_comm_allemagne_belgique"` // Ech. comm. Allemagne-Belgique (MW) - Solde des échanges commerciaux entre la France et la zone Allemagne et Belgique. Exportateur si négatif, importateur si positif.
EchCommAngleterre string `json:"ech_comm_angleterre"` // Ech. comm. Angleterre (MW) - Solde des échanges commerciaux entre la France et l'Angleterre. Exportateur si négatif, importateur si positif.
EchCommEspagne int64 `json:"ech_comm_espagne"` // Ech. comm. Espagne (MW) - Solde des échanges commerciaux entre la France et l'Espagne. Exportateur si négatif, importateur si positif.
EchCommItalie int64 `json:"ech_comm_italie"` // Ech. comm. Italie (MW) - Solde des échanges commerciaux entre la France et l'Italie. Exportateur si négatif, importateur si positif.
EchCommSuisse int64 `json:"ech_comm_suisse"` // Ech. comm. Suisse (MW) - Solde des échanges commerciaux entre la France et la Suisse. Exportateur si négatif, importateur si positif.
EchPhysiques int64 `json:"ech_physiques"` // Ech. physiques (MW) - Solde des échanges physiques aux interconnexions avec les autres pays: Exportateur si négatif, importateur si positif.
Eolien int64 `json:"eolien"` // Eolien (MW)
EolienOffshore string `json:"eolien_offshore"` // Eolien offshore (MW)
EolienTerrestre string `json:"eolien_terrestre"` // Eolien terrestre (MW)
Fioul int64 `json:"fioul"` // Fioul (MW)
FioulAutres int64 `json:"fioul_autres"` // Fioul - Autres (MW)
FioulCogen int64 `json:"fioul_cogen"` // Fioul - Cogénération (MW) - Production des cogénérations fonctionnant au fioul
FioulTac int64 `json:"fioul_tac"` // Fioul - TAC (MW) - Production des Turbines à Combustion fonctionnant au fioul
Gaz int64 `json:"gaz"` // Gaz (MW)
GazAutres int64 `json:"gaz_autres"` // Gaz - Autres (MW) - Autres technologies fonctionnant au gaz
GazCcg int64 `json:"gaz_ccg"` // Gaz - CCG (MW) - Production des Cycles Combinés Gaz
GazCogen int64 `json:"gaz_cogen"` // Gaz - Cogénération (MW) - Production des cogénérations fonctionnant au gaz
GazTac int64 `json:"gaz_tac"` // Gaz - TAC (MW) - Production des Turbines à Combustion fonctionnant au gaz
Heure string `json:"heure"` // Heure
Hydraulique int64 `json:"hydraulique"` // Hydraulique (MW)
HydrauliqueFilEauEclusee int64 `json:"hydraulique_fil_eau_eclusee"` // Hydraulique - Fil de l'eau + éclusée (MW)
HydrauliqueLacs int64 `json:"hydraulique_lacs"` // Hydraulique - Lacs (MW)
HydrauliqueStepTurbinage int64 `json:"hydraulique_step_turbinage"` // Hydraulique - STEP turbinage (MW) - Production hydraulique issue des Stations de Transfert d'Energie par Pompage.
Nature string `json:"nature"` // Uniquement "Données temps réel" pour ce jeu de données.
Nucleaire int64 `json:"nucleaire"` // Nucléaire (MW)
Perimetre string `json:"perimetre"` // Uniquement France pour ce jeu de données.
Pompage int64 `json:"pompage"` // Pompage (MW) - Puissance consommée par les pompes dans les Stations de Transfert d'Energie par Pompage (STEP)
PrevisionJ int64 `json:"prevision_j"` // Prévision J (MW) - Prévision, réalisée le jour même, de la consommation .
PrevisionJ1 int64 `json:"prevision_j1"` // Prévision J-1 (MW) - Prévision, réalisée la veille pour le lendemain, de la consommation.
Solaire int64 `json:"solaire"` // Solaire (MW)
StockageBatterie string `json:"stockage_batterie"` // Stockage batterie (MW)
TauxCo2 int64 `json:"taux_co2"` // Taux de CO2 (g/kWh) - Estimation des émissions de carbone générées par la production d'électricité en France.
}
type NationalRealTimeRecord struct {
Datasetid string `json:"datasetid"`
Fields NationalRealTimeFields `json:"fields"`
RecordTimestamp string `json:"record_timestamp"`
Recordid string `json:"recordid"`
}
// NationalRealTimeResponse represents the response to the "eco2mix-national-tr"
// dataset from RTE.
//
// Documentations is available at:
// https://odre.opendatasoft.com/explore/dataset/eco2mix-national-tr/information/
type NationalRealTimeResponse struct {
FacetGroups []struct {
Facets []struct {
Count int64 `json:"count"`
Name string `json:"name"`
Path string `json:"path"`
State string `json:"state"`
} `json:"facets"`
Name string `json:"name"`
} `json:"facet_groups"`
Nhits int64 `json:"nhits"`
Parameters struct {
Dataset string `json:"dataset"`
Facet []string `json:"facet"`
Format string `json:"format"`
Rows int64 `json:"rows"`
Start int64 `json:"start"`
Timezone string `json:"timezone"`
} `json:"parameters"`
Records []NationalRealTimeRecord `json:"records"`
}