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.

NordPool prices in LogicMachine
#7
(19.12.2022, 18:08)martins.neibergs@gmail.com Wrote: Hi!

Has anyone had any experience with getting (integrating) NordPool prices into LogicMachine?

Tried different versions but nothing worked. 

What about this one? 

https://dashboard.elering.ee/en/nps/pric...59:59.999Z
https://dashboard.elering.ee/api/nps/pri...%3A00.999Z

Anyone had any luck or experience? Can you please share scripts for getting NordPool prices into logic machine?

Hi!
I do two scripts
Both "Scheduled"
Script 1 -
Collecting electric price from API. running 4 times/day hour 17,18,21,23 amd minute 5.
Code:
CODE -- API-skript (spara per datum) local json = require("json") local ltn12 = require("ltn12") local http = require("socket.http") local DECIMALS = 5 local PRISKLASS = "SE2" local function fetch_prices(date_timestamp)     local year = os.date("%Y", date_timestamp)     local month_day = os.date("%m-%d", date_timestamp)     local url = string.format("https://www.elprisetjustnu.se/api/v1/prices/%s/%s_%s.json", year, month_day, PRISKLASS)     local resp = {}     local res, code = http.request({url = url, method = "GET", sink = ltn12.sink.table(resp)})     if code == 200 then         local decoded = json.pdecode(table.concat(resp))         if decoded then             local prices = {}             for i,v in ipairs(decoded) do                 local time_start = v.time_start -- "2025-09-10T21:15:00+02:00"                 local hh = string.sub(time_start, 12, 13)                 local mm = string.sub(time_start, 15, 16)                 local val = tonumber(string.format("%." .. DECIMALS .. "f", v.SEK_per_kWh))                 if mm == "00" then                     -- timpris: duplicera till kvart                     for _, q in ipairs({"00","15","30","45"}) do                         prices[hh .. ":" .. q] = val                     end                 else                     prices[hh .. ":" .. mm] = val                 end             end             return prices         end     end     return nil end local function save_prices()     local now = os.time()     -- idag och imorgon som timestamps (midnatt)     local t = os.date("*t", now)     t.hour, t.min, t.sec = 0,0,0     local idag_ts = os.time(t)     local imorgon_ts = idag_ts + 86400     -- Spara dagens priser i storage med datumnyckel     local ds_idag = os.date("%Y-%m-%d", idag_ts)     local p_idag = fetch_prices(idag_ts)     if p_idag then         storage.set("elpris_" .. ds_idag, json.encode(p_idag))         log("Sparade elpriser för " .. ds_idag)     else         log("️ Kunde inte hämta priser för " .. ds_idag)     end     -- Spara morgondagens priser (förutsatt kl 18+ eller när du vill hämta)     if tonumber(os.date("%H", now)) >= 18 then         local ds_im = os.date("%Y-%m-%d", imorgon_ts)         local p_im = fetch_prices(imorgon_ts)         if p_im then             storage.set("elpris_" .. ds_im, json.encode(p_im))             log("Sparade elpriser för " .. ds_im)         else             log("️ Kunde inte hämta priser för " .. ds_im)         end     end     -- Rensa gamla nycklar (behåll t.ex. -3..+2 dagar)     for i = 4, 30 do         local old = os.date("%Y-%m-%d", idag_ts - i*86400)         storage.set("elpris_" .. old, nil)     end end save_prices()


Script 2
Writing current electrical price to KNX address
Running as scheduled minute 0,15,30,45
Code:
local json = require("json") local GA_ELPRIS = "34/4/99" local function round_to_quarter()     local now = os.time()     local hh = tonumber(os.date("%H", now))     local min = tonumber(os.date("%M", now))     min = math.floor(min / 15) * 15     return string.format("%02d:%02d", hh, min) end -- försök hitta pris i dataset för en specifik datumnyckel local function find_in_date(date_str, hhmm)     local key = "elpris_" .. date_str     local j = storage.get(key)     if not j then return nil end     local prices = json.decode(j)     if not prices then return nil end     local p = prices[hhmm]     if p then return p, key end     -- fallback: sök närmaste tidigare kvart inom detta dataset     local hh = tonumber(string.sub(hhmm,1,2))     local mm = tonumber(string.sub(hhmm,4,5))     local kvart_list = {0,15,30,45}     for h = hh, 0, -1 do         for i = #kvart_list, 1, -1 do             local q = kvart_list[i]             if (h < hh) or (q <= mm) then                 local try = string.format("%02d:%02d", h, q)                 if prices[try] then                     return prices[try], key, try                 end             end         end     end     return nil end -- Huvudfunktion som provar datum i prioriterad ordning local function get_price_for_quarter()     local now = os.time()     local hhmm = round_to_quarter()     local date_today = os.date("%Y-%m-%d", now)     local date_tomorrow = os.date("%Y-%m-%d", now + 86400)     local date_yesterday = os.date("%Y-%m-%d", now - 86400)     local candidates = {date_today, date_tomorrow, date_yesterday}     for _, d in ipairs(candidates) do         local p, used_key, used_q = find_in_date(d, hhmm)         if p then             -- used_q kan vara nil om exakt hhmm träffade; annars är used_q den kvarten vi använde             local used = used_q or hhmm             return p, used, used_key         end     end     return nil, hhmm, nil end -- Anropa och skriv till KNX local pris, used_hhmm, used_key = get_price_for_quarter() if pris then     local pris_5dec = string.format("%.5f", pris)     log(string.format("Skriver elpris kl %s (från %s): %s kr/kWh", used_hhmm, used_key or "ingen", pris_5dec))     grp.write(GA_ELPRIS, tonumber(pris_5dec)) else     log("️ Ingen elprisinformation hittades för " .. used_hhmm) end
Reply


Messages In This Thread
RE: NordPool prices in LogicMachine - by jerryhenke - 05.11.2025, 22:29

Forum Jump: