Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Automatisert nedlesing av Day-ahead strømpriser


Anbefalte innlegg

Legger dette i egen tråd i stedet for inne i andre tråder, så blir det lettere å finne for de som leter.

 

Spot strømprisene i Norden for neste døgn (den såkalte Day-ahead prisen) besluttes hver formiddag for kommende døgn, time for time - og publiseres så vidt jeg vet klokka 12 norsk tid.

 

Jeg har funnet tre steder de kan leses fra:

  1. Tibber, men kun om du er kunde hos de.
  2. Nord Pool publiserer Day-ahead priser for kommende døgn hver dag ca klokka 12: https://www.nordpoolgroup.com/Market-data1/Dayahead/Area-Prices/ALL1/Hourly/?view=table
    De er imidlertid veldig tydelige på at det ikke er tillatt å lage noen autmatisk nedlasting derfra.
    Man kan kjøpe en avtale med de, men det er dyrt.
  3. Entsoe: Prisene publiseres imidlertid samtidig på en Europeisk nettside hvor det er gratis både å registrere seg og få Web API token, som trengs for å bruke deres API.
    https://transparency.entsoe.eu/
    Dette er løsningen jeg bruker, og det fungerer helt fint. Det er en beskrivelse av APIet på nettsiden der et sted.


Jeg henter prisene fra Entsoe hver kveld for neste døgn. De aktuelle linjene i mitt LUA-script ser slik ut:

	year 	= os.date("%Y", tomorrow);
	month 	= os.date("%m", tomorrow);
	day 	= os.date("%d", tomorrow);

	urlApi = "'https://transparency.entsoe.eu/api?documentType=A44&in_Domain=10YNO-2--------T&out_Domain=10YNO-2--------T&periodStart="..year..month..day.."0000&periodEnd="..year..month..day.."2300&securityToken=SETT-INN-DIN-TOKEN-HER'"

Den svarer med en XML streng som du så må hente ut dataene fra.
Scriptet leser så dagens valutakurs fra Norges bank (åpent API, trenger ikke token), som brukes for å regne om til spotprisen i kroner.
Her er min LUA-kode for funksjon som henter dagens EUR kurs:

function eurRate()
    local url = "https://data.norges-bank.no/api/data/EXR/M.EUR.NOK.SP?lastNObservations=1"
    local XML_string_eur=XML_Capture("curl -s "..url,1)
    local valid = string.find(XML_string_eur, "<message:Test>false</message:Test>")    
    if valid == nil then
        print ("Bad XML status read - info NOT updated [in eurRate()]")
    else
        local p = string.find(XML_string_eur,"DECIMALS=") + 10    -- read position of NoOfDecimals
        local dec = string.sub(XML_string_eur,p,p)
        p = string.find(XML_string_eur,"OBS_VALUE=") + 11    -- read position of eurRate
        return tonumber(string.sub(XML_string_eur,p,p+1+dec))
    end
end

Husk at dette er ikke hele strømprisen. Nettleie og andre tillegg kommer i tillegg. Se faktura fra din leverandør om du vil regne helt om til full estimert kWh-pris.

Endret av ArnieO
Fjerne token fra koden...
  • Like 1
  • Thanks 1
Lenke til kommentar
Del på andre sider

2 timer siden, bjornepappa skrev:

Bra! 

For dei av oss som har HomeSeer så har jo @Moskus utvikla det fantastiske TibberSeer ?

Joda, og den er selvfølgelig konge. Men men som @ArnieO sier:

2 timer siden, ArnieO skrev:

Tibber, men kun om du er kunde hos de.

 

Men så er APIen dems så bra at det omtrent er verdt å være kunde bare for det. :) 

  • Like 3
Lenke til kommentar
Del på andre sider

4 minutes ago, Moskus said:

Men så er APIen dems så bra at det omtrent er verdt å være kunde bare for det. :) 

Tibber er en spennende bedrift i et høyaktuelt segment!

Siden jeg ikke er kunde der og ikke bruker HomeSeer har jeg ikke sett på TibberSeer, så det er fint å få den påminnelsen i tråden her!

Lenke til kommentar
Del på andre sider

4 timer siden, ArnieO skrev:

De aktuelle linjene i mitt LUA-script ser slik ut:

 

Takk for tips til @ArnieO. Har sett på Entsoe og skaffet meg token. Siden jeg kjører Homeseer så kan jeg vel ikke bruke LUA direkte?

Men det er jo ikke umulig å lage tilsvarende med VB.net. Er ingen racer på denslags, men får vurderer å bruke litt juletid på dette. 

Lenke til kommentar
Del på andre sider

17 minutter siden, Gizmo skrev:

 

Takk for tips til @ArnieO. Har sett på Entsoe og skaffet meg token. Siden jeg kjører Homeseer så kan jeg vel ikke bruke LUA direkte?

Men det er jo ikke umulig å lage tilsvarende med VB.net. Er ingen racer på denslags, men får vurderer å bruke litt juletid på dette. 

Om du har HomeSeer, kvifor ikkje gjere det enkelt og gå for Tibber? 

  • Like 1
Lenke til kommentar
Del på andre sider

11 minutter siden, bjornepappa skrev:

kvifor ikkje gjere det enkelt og gå for Tibber? 

 

Jeg har valgt å være rasjonell aktør i ett marked, strømmarkedet. Så kjøper kun strøm til nordpool prisen uten noen som helst påslag eller andre avgifter. Er som regel 3-4 selskaper til enhver tid som tilbyr en slik deal. De tjener jo ingenting på det, så er for å lokke kunder før de endrer dealen. Da skifter jeg leverandør. Gir glede i hverdagen, men sparer neppe så mye.

Endret av Gizmo
skriveleif fjernet
  • Like 2
Lenke til kommentar
Del på andre sider

1 minutt siden, ZoRaC skrev:

så sparer du 39 kr/mnd

Eller en ekstra z-wave dings pr år. ?Skal vurdere Tibber, men sitter langt inne å binde seg til en bestemt leverandør bare for å få inne strømpriser i Homeseer. Plutselig skal de ha 70,- hver måned!

Lenke til kommentar
Del på andre sider

Akkurat nå, Gizmo skrev:

Eller en ekstra z-wave dings pr år. ?Skal vurdere Tibber, men sitter langt inne å binde seg til en bestemt leverandør bare for å få inne strømpriser i Homeseer. Plutselig skal de ha 70,- hver måned!

 

Si fra hvis du skal bli kunde, så kan du få en invite-kode hos meg. Da får vi begge 500 kr hver. :) 

 

Hvis de skrur opp prisen kan du bytte på

dagen - ingen binding hos dem. ;) 

  • Like 1
Lenke til kommentar
Del på andre sider

34 minutes ago, Gizmo said:

 

Siden jeg kjører Homeseer så kan jeg vel ikke bruke LUA direkte?

Jeg kjenner ikke HomeSeer, så det vet jeg ikke. Det mest plundrete med slike API-kall er å finne ut av hvordan tekststrengen skal settes opp, og det ser du i koden min.

Det må forresten justeres ørlite dersom man er i en annen tariffsone enn meg. Jeg er i den sonen Nord Pool nå kaller «Kristiansand». Det skal være greit å finne ut av den nødvendige endringen fra dokumentasjonen.

Lenke til kommentar
Del på andre sider

Var ikke helt lett det ja, i alle fall ikke uten bedre forståelse for vb.net. Har ikke fått til det første API kallet enda...

Vurderer faktisk å heller bruke løsningen som er laget for Home assistant, og sende data fra Home assistant til Homeseer med MQTT . 

 

 

Endret av Gizmo
presisering
Lenke til kommentar
Del på andre sider

3 timer siden, Dag Sunde skrev:

 

Tusen takk! Dette er jo i ytterkanten av mine begrensede programmeringskunnskaper. Men dersom jeg forstår det riktig så er dette et skript i C# som leser data via APien og parser dette til en sql database (?). Med mine kunnskaper er det jo ikke helt rett frem å få trukket ut de relevante verdiene til devicer i Homeseer, men mye nyttig lærdom i hvordan dette er bygget opp! . Forsøker å lese meg opp på dette nå. Har forøvrig sluttet med rafting, er nok enklere å kjøre det som en daglig event rett fra Homeseer.

Lenke til kommentar
Del på andre sider

Du har forstått riktig ?

 

Bunnlinja er at det er en klasse som kan holde på verdiene.

 

Etter API kallet, og før save, inneholder alle attributtene i klassen de verdiene du er interessert i.

 

De andre klassene; Column, Row, Data og Wrapper er kun for å matche JSON datastrukturen som blir returnert av Nordpool.

 

Den lange "switchen" i dobbeltloopen er for å "vri" datasettet 90 grader, da det er en rad pr. Time, med en kolonne for hvert prisområde.

Jeg ville ha en rad pr. prisområde,  med alle timene i en rad.

 

Lenke til kommentar
Del på andre sider

  • 2 uker senere...

Fant en annen vei for å hente strømpriser til Homeseer (passer til det meste). 

Det er laget en løsning som henter data fra nordpool inn i node red: https://www.npmjs.com/package/nordpool
Så med litt mekking der kan time og dagspriser sendes med f.eks MQTT dit man vil.

Enkleste vei for meg var å bruke denne pakken her, slik at eksempelkoden kan brukes direkte i node red: https://www.npmjs.com/package/node-red-contrib-function-npm

Lenke til kommentar
Del på andre sider

  • 1 måned senere...
På 4.1.2019 den 0.15, Gizmo skrev:

Fant en annen vei for å hente strømpriser til Homeseer (passer til det meste). 

Det er laget en løsning som henter data fra nordpool inn i node red: https://www.npmjs.com/package/nordpool
Så med litt mekking der kan time og dagspriser sendes med f.eks MQTT dit man vil.

Enkleste vei for meg var å bruke denne pakken her, slik at eksempelkoden kan brukes direkte i node red: https://www.npmjs.com/package/node-red-contrib-function-npm

Hei.

 

Kan du dele et eksempel på kode du skriver i funksjonsnoden? Har installert og brukt koden fra eksemplene men får ikke noe ut på meldingen.

Lenke til kommentar
Del på andre sider

1 time siden, ASL skrev:

Kan du dele et eksempel på kode du skriver i funksjonsnoden? Har installert og brukt koden fra eksemplene men får ikke noe ut på meldingen.

 

Den må skrives litt om ja. Jeg bruker denne for å hente timeprisene.

var nordpool = require('nordpool')
var prices = new nordpool.Prices()
var opts = {
  area: 'Bergen', // See http://www.nordpoolspot.com/maps/
  currency: 'NOK', // can also be 'DKK', 'NOK', 'SEK'
}
prices.hourly(opts, function (error, results) {
  if (error) console.error(error)
  for (var i=0; i<results.length; i++) {
    var date = results[i].date
    var price = results[i].value
    var time = date.tz('Europe/Helsinki').format("H:mm")
    node.send({payload:'{ "tid":'+'"'+time+'" ,"pris"-'+price})
  }
return;
})

 

Dersom du også ønsker dagspris kan det hentes med denne snutten her:

 

var nordpool = require('nordpool')
var prices = new nordpool.Prices()
var opts = {
  area: 'Bergen', // See http://www.nordpoolspot.com/maps/
  currency: 'NOK', // can also be 'DKK', 'NOK', 'SEK'
}
prices.daily(opts, function (error, results) {
  if (error) console.error(error)
  for (var i=0; i<1; i++) { //results.length
    var date = results[i].date // moment object (see http://momentjs.com/)
    var price = results[i].value // float, NOK/MWh
    node.send({payload:+price/10})
  }
  return;
})

Bør kanskje si at jeg på ingen måte er å regne som kodekyndig, er selvlært og omskrivingen er gjort ved å prøve meg frem. Men har sjekket det mot Nordpool og blir korrekt sluttresultat hos meg. 

 

Lenke til kommentar
Del på andre sider

På 19.12.2018 den 16.15, ArnieO skrev:

Legger dette i egen tråd i stedet for inne i andre tråder, så blir det lettere å finne for de som leter.

 

Spot strømprisene i Norden for neste døgn (den såkalte Day-ahead prisen) besluttes hver formiddag for kommende døgn, time for time - og publiseres så vidt jeg vet klokka 12 norsk tid.

 

Jeg har funnet tre steder de kan leses fra:

  1. Tibber, men kun om du er kunde hos de.
  2. Nord Pool publiserer Day-ahead priser for kommende døgn hver dag ca klokka 12: https://www.nordpoolgroup.com/Market-data1/Dayahead/Area-Prices/ALL1/Hourly/?view=table
    De er imidlertid veldig tydelige på at det ikke er tillatt å lage noen autmatisk nedlasting derfra.
    Man kan kjøpe en avtale med de, men det er dyrt.
  3. Entsoe: Prisene publiseres imidlertid samtidig på en Europeisk nettside hvor det er gratis både å registrere seg og få Web API token, som trengs for å bruke deres API.
    https://transparency.entsoe.eu/
    Dette er løsningen jeg bruker, og det fungerer helt fint. Det er en beskrivelse av APIet på nettsiden der et sted.


Jeg henter prisene fra Entsoe hver kveld for neste døgn. De aktuelle linjene i mitt LUA-script ser slik ut:


	year 	= os.date("%Y", tomorrow);
	month 	= os.date("%m", tomorrow);
	day 	= os.date("%d", tomorrow);

	urlApi = "'https://transparency.entsoe.eu/api?documentType=A44&in_Domain=10YNO-2--------T&out_Domain=10YNO-2--------T&periodStart="..year..month..day.."0000&periodEnd="..year..month..day.."2300&securityToken=SETT-INN-DIN-TOKEN-HER'"

Den svarer med en XML streng som du så må hente ut dataene fra.
Scriptet leser så dagens valutakurs fra Norges bank (åpent API, trenger ikke token), som brukes for å regne om til spotprisen i kroner.
Her er min LUA-kode for funksjon som henter dagens EUR kurs:


function eurRate()
    local url = "https://data.norges-bank.no/api/data/EXR/M.EUR.NOK.SP?lastNObservations=1"
    local XML_string_eur=XML_Capture("curl -s "..url,1)
    local valid = string.find(XML_string_eur, "<message:Test>false</message:Test>")    
    if valid == nil then
        print ("Bad XML status read - info NOT updated [in eurRate()]")
    else
        local p = string.find(XML_string_eur,"DECIMALS=") + 10    -- read position of NoOfDecimals
        local dec = string.sub(XML_string_eur,p,p)
        p = string.find(XML_string_eur,"OBS_VALUE=") + 11    -- read position of eurRate
        return tonumber(string.sub(XML_string_eur,p,p+1+dec))
    end
end

Husk at dette er ikke hele strømprisen. Nettleie og andre tillegg kommer i tillegg. Se faktura fra din leverandør om du vil regne helt om til full estimert kWh-pris.

 

 

Entsoe fungerte kjempeflott. Takk for tips ? Jeg benytter PHP og skrev om koden:

 

$datetime = new DateTime('tomorrow');
$spotdate = $datetime->format('Ymd');
 
$urlapi = "https://transparency.entsoe.eu/api?documentType=A44&in_Domain=10YNO-2--------T&out_Domain=10YNO-2--------T&periodStart=".$spotdate."0000&periodEnd=".$spotdate."2300&securityToken=DIN_TOKEN_HER";
 
$xml = @file_get_contents($urlapi);
$xml = simplexml_load_string($xml);
 

 

Det er vel forskjell på de ulike strømområdene? Prøvde å skrive 10YNO-5 for Bergen/Hordaland, men det fungerte ikke. Noen som vet koden for Bergen/Hordaland?

Lenke til kommentar
Del på andre sider

On 13/02/2019 at 19:51, Polarnor said:

 

 

Entsoe fungerte kjempeflott. Takk for tips ? Jeg benytter PHP og skrev om koden:

 

$datetime = new DateTime('tomorrow');
$spotdate = $datetime->format('Ymd');
 
$urlapi = "https://transparency.entsoe.eu/api?documentType=A44&in_Domain=10YNO-2--------T&out_Domain=10YNO-2--------T&periodStart=".$spotdate."0000&periodEnd=".$spotdate."2300&securityToken=DIN_TOKEN_HER";
 
$xml = @file_get_contents($urlapi);
$xml = simplexml_load_string($xml);
 

 

Det er vel forskjell på de ulike strømområdene? Prøvde å skrive 10YNO-5 for Bergen/Hordaland, men det fungerte ikke. Noen som vet koden for Bergen/Hordaland?

Bare hyggelig!

Ja, du må bruke rett domain (og rette opp begge steder i http-linja). jeg husker ikke lengre hvor jeg fant rett kode.

Har du forsøkt å lete her? https://transparency.entsoe.eu/content/static_content/Static content/web api/Guide.html

Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Har bearbeidet norpool noden som er nevnt tidligere i tråden til en litt enklere versjon for benyttelse i Node-Red uten function-node der man kan velge "area" og "currency" i properties i noden. 

Noden henter spotpris for den kommende timen. 

https://www.npmjs.com/package/node-red-contrib-nordpool-api

mottar ideer om videre utvikling av noden med takk.

 

  • Like 1
  • Thanks 1
Lenke til kommentar
Del på andre sider

  • 4 uker senere...

For de som bruker Home Assistant (og sikkert andre også) så har jeg laget et oppsett likt det @ArnieO skisserte i det opprinnelige innlegget, dvs. henter priser fra ENTSO-E med valutaomregning basert på kurser fra Norges Bank.

Scriptet kan lett kjøres hver time via crontab og publiserer prisene på MQTT.

 

Kode og dokumentasjon ligger her: https://github.com/oysteinjakobsen/fetch-day-ahead-price

  • Like 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.