This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Script with Dutch power prices
#1
Hi. I want to read out the current hourly power prices (Dutch EPEX spot market). With this info I want to switch on heavy power users (car charging, airco etc) and switch off my solar panels when the market prices are below -/-0,06729 per kWh (since then the energy taxes don't compensate the negative market price, taxes are 0,03679 per kWh + 0,0305 per kWh). I found a website where I can read out these prices, but how can I let a script return the hourly values in a way I can make decisions with it?

With this simple script (where I've put in the time range of 1 day), I get the following output;

--/--

local https = require('ssl.https')
local ltn12 = require('ltn12')
local json = require('json')
local cBody = 'TariffReturn'
local cReq = {}

result1 = https.request({
  url = 'https://mijn.easyenergy.com/nl/api/tariff/getapxtariffs?startTimestamp=2022-05-29T22%3A00%3A00.000Z&endTimestamp=2022-05-30T22%3A00%3A00.000Z&grouping=',
  method = 'GET',
  headers = {
    ['content-length'] = #cBody,
    ['content-type'] = 'application/json'
  },
  source = ltn12.source.string(cBody),
  sink = ltn12.sink.table(cReq)
})

if (cReq) then
  mydata =  json.pdecode(table.concat(cReq))
  log(mydata)

end


--/--

In the output I refer to this part:

--/
....
[4]
  * table:
  ["Timestamp"]
    * string: 2022-05-30T01:00:00+00:00
  ["TariffReturn"]
    * number: 0.1845
  ["TariffUsage"]
    * number: 0.223245
  ["SupplierId"]
    * number: 0


/--
where '  ["TariffReturn"]
    * number: 0.1845
the price per kWh is for every kWh consumed (or delivered) between 2022-05-30, 04.00 - 05.00u

The notation is a little bit confusion, since the table states it is at 01.00.

I check the output of easyenergy with one of the other EPEX spot market parties: https://prijzen.powerhouse.net/forecast/

Any help is welcome.

Jeroen
Reply
#2
log(mydata[4].TariffReturn)
------------------------------
Ctrl+F5
Reply
#3
Try this, it will automatically use current date time and will provide prices for the current and the next hour.

Code:
1234567891011121314151617181920212223242526272829303132333435363738394041424344
json = require('json') http = require('socket.http') escape = require('socket.url').escape now = os.date('!%Y-%m-%dT%H:00:00+00:00') today = os.date('!%Y-%m-%d') tomorrow = os.date('!%Y-%m-%d', os.time() + 86400) ts = escape(today .. 'T00:00:00+00:00') te = escape(tomorrow .. 'T00:00:00+00:00') url = 'https://mijn.easyenergy.com/nl/api/tariff/getapxtariffs?startTimestamp=' .. ts .. '&endTimestamp=' .. te res, err = http.request({   url = url,   headers = {     ['content-type'] = 'application/json'   } }) if res then   data = json.pdecode(res)   if type(data) == 'table' then     for i, item in ipairs(data) do       if item.Timestamp == now then         tariff_return_now = item.TariffReturn         if data[ i + 1 ] then           tariff_return_next = data[ i + 1 ].TariffReturn         end         break       end     end     log(tariff_return_now, tariff_return_next)   else     log('invalid data', res)   end else   log('request failed', err) end
Reply
#4
Thanks Admin, this works like a charm. I only had to make a little adjustment, since the price of 'now' is the price for the 'next hour'. Some for the price of 'next hour', that is the price of 2 hours later.
I guess this script shall be helpfull to many more people in the future since the power prices are so changing every hour.

Greets
Jeroen
Reply
#5
Check that you have correct timezone set in Date/Time settings. Reported time is in UTC so incorrect timezone can explain 1 hour shift.
Reply
#6
Hello,
I'm trying to create a script to retrieve tomorrow's electricity prices with api: https://www.hvakosterstrommen.no/strompris-api.

I try this:
Code:
1234567891011121314151617181920212223242526272829303132333435363738
local http = require('ssl.https') local json = require('json') local date = os.date('*t', os.time() + 86400) -- get tomorrow's date local year = tostring(date.year) local month = string.format('%02d', date.month) local day = string.format('%02d', date.day) local area = 'NO1' -- specify area local url = string.format('https://www.hvakosterstrommen.no/api/v1/prices/%s/%s-%s_%s.json', year, month, day, area) print('Fetching data from URL:', url) local body, code, headers, status = http.request(url) print('HTTP response code:', code) if code == 200 then     print('Data retrieved successfully')     print('Response body:', body)     local data = json.decode(body)     local group_address = '32/1/%d' -- starting group address     for i, item in ipairs(data) do         local hour = tonumber(string.sub(item.time_start, 12, 13))         local price = item.NOK_per_kWh         print('Hour:', hour)         print('Price:', price)         if price ~= nil then             local value = string.format('%014s', string.format('%.4f', price * 10000)):gsub(' ', '0')             print('Value:', value)             grp.write(string.format(group_address, hour), value, '14ByteAsc')         end     end else     print('Error fetching data: ' .. status) end

I'm having a bit of trouble getting the data out.
Reply
#7
'14ByteAsc' is not a valid data type use dt.string instead (without quotes). You also need to setup your script to run at a certain time when tomorrow prices become available. Right now it returns 404 because the data is not available yet.
Reply


Forum Jump: