TapHome

OKTE Ceny spot

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026

OKTE (Organizátor krátkodobého trhu s elektrinou) to słowacki operator rynku energii elektrycznej. Publikuje ceny spot na rynku dnia następnego (DAM) — godzinową cenę hurtową energii elektrycznej w EUR/MWh, ustalaną na aukcji dnia poprzedniego.

Szablon TapHome pobiera te ceny z publicznego API OKTE (isot.okte.sk) przez HTTP Packet Parser. Udostępnia cenę za bieżącą godzinę, rankingi cen, obliczenia min/max/średniej oraz analizę okna czasowego — wszystko aktualizowane automatycznie co godzinę. Nie jest wymagane żadne uwierzytelnianie.

Konfiguracja

Szablon łączy się z isot.okte.sk przez HTTPS (port 443). Nie jest potrzebny adres IP ani dane logowania — endpoint jest publicznym API.

Podczas importu szablonu można ustawić dwie opcjonalne zmienne niestandardowe:

  • Od — godzina początkowa niestandardowego okna czasowego (0–23, domyślnie: 9)
  • Do — godzina końcowa niestandardowego okna czasowego (0–23, domyślnie: 17)

Te zmienne kontrolują warianty urządzeń „w oknie czasowym". Wartości domyślne (9–17) obejmują standardowe godziny pracy. Jeśli nie są potrzebne, pozostaw wartości domyślne — urządzenia całodzienne działają niezależnie.

Jak to działa

Moduł odpytuje API OKTE DAM raz na godzinę (interwał 3600 s). Żądanie API używa dzisiejszej daty:

1
GET /api/v1/dam/results?deliveryDayFrom={today}&deliveryDayTo={today}

Odpowiedź zawiera tablicę obiektów cenowych, każdy z numerem period i ceną price w EUR/MWh. W zależności od pory dnia i harmonogramu publikacji OKTE, odpowiedź może zawierać ceny tylko za dzisiaj (24 okresy) lub za maksymalnie 3 dni (72 okresy).

Każdy skrypt urządzenia parsuje tę tablicę JSON za pomocą PARSEJSON(output, "$..price") i stosuje funkcje sortowania, filtrowania lub agregacji do wyprowadzenia wartości.

Możliwości urządzeń

Szablon udostępnia 13 urządzeń sensorowych. Wszystkie są tylko do odczytu — wartości wyprowadzają z tej samej odpowiedzi API.

Aktualna cena i ranking
  • Aktualna cena — cena spot za bieżący okres godzinowy w EUR/MWh. Skrypt określa aktualny indeks okresu z NOW() i zwraca odpowiednią cenę z tablicy.
  • Ranking aktualnego okresu — pozycja ceny bieżącej godziny wśród wszystkich dostępnych okresów (1 = najtańsza). Przydatne do reguł automatyzacji, takich jak „uruchom pompę ciepła tylko gdy bieżąca godzina jest wśród 8 najtańszych."
  • Ranking aktualnego okresu w oknie czasowym — tak samo jak wyżej, ale ograniczone do zdefiniowanego przez użytkownika okna Od–Do. Zwraca NaN, jeśli bieżąca godzina jest poza oknem lub jeśli Od >= Do.
Ekstrema cenowe
  • Najwyższa cena dnia — maksymalna cena spot ze wszystkich dostępnych okresów
  • Najniższa cena dnia — minimalna cena spot ze wszystkich dostępnych okresów
  • Najwyższa cena w oknie czasowym — maksymalna cena w ramach okna Od–Do
  • Najniższa cena w oknie czasowym — minimalna cena w ramach okna Od–Do
Średnie
  • Średnia cena dnia — średnia arytmetyczna wszystkich dostępnych cen okresów
  • Średnia cena w oknie czasowym — średnia arytmetyczna w ramach okna Od–Do
Identyfikacja okresów
  • Najtańszy okres dnia — numer okresu oparty na 1 dla najtańszej godziny (np. 3 oznacza 02:00–03:00)
  • Najtańszy pozostały okres — najtańsza godzina od bieżącej godziny wzwyż. Aktualizuje się dynamicznie w ciągu dnia.
Liczniki
  • Liczba okresów — łączna liczba okresów cenowych w odpowiedzi API (zazwyczaj 24 lub 72)
  • Liczba okresów w oknie czasowym — liczba okresów w ramach okna Od–Do

Atrybuty usługi

Moduł udostępnia do 96 atrybutów usługi (Okres 1 do Okres 96), każdy pokazujący cenę spot dla danego okresu godzinowego jako ciąg znaków z przyrostkiem „EUR". W praktyce 24 atrybuty są wypełnione dla jednego dnia lub 72 dla trzech dni.

Te atrybuty zapewniają pełny harmonogram cenowy widoczny w widoku szczegółowym modułu TapHome.

Zmienne niestandardowe (Od / Do)

Kilka urządzeń ma warianty „w oknie czasowym", które filtrują dane cenowe do podzbioru godzin. Okno jest definiowane przez dwie zmienne niestandardowe ustawiane podczas importu szablonu:

  • Od — godzina początkowa (włącznie), wartość 0–23
  • Do — godzina końcowa (wyłącznie), wartość 0–23

Na przykład ustawienie Od=8 i Do=16 analizuje ceny tylko między 08:00 a 16:00. Jest to przydatne, gdy chcesz zoptymalizować zużycie energii w określonych godzinach — na przykład uruchamiać urządzenia tylko w najtańszych godzinach dnia roboczego.

Jeśli Od >= Do, wszystkie urządzenia okienkowe zwracają NaN.

Przykłady automatyzacji

Uruchamianie urządzeń w najtańszych godzinach

Użyj urządzenia Ranking aktualnego okresu w warunku smart rule. Na przykład, aby uruchomić pompę basenową tylko w 6 najtańszych godzinach dnia:

  • Warunek: Ranking aktualnego okresu <= 6
  • Akcja: Włącz pompę basenową
Unikanie cen szczytowych

Użyj urządzenia Aktualna cena z wartością progową:

  • Warunek: Aktualna cena > 150 (EUR/MWh)
  • Akcja: Wyłącz nieistotne odbiorniki
Optymalizacja okna czasowego

Ustaw Od=22, Do=6, aby zdefiniować okno nocne, następnie użyj Najniższa cena w oknie czasowym lub Ranking aktualnego okresu w oknie czasowym, aby zaplanować ładowanie baterii lub pracę podgrzewacza wody w najtańszych godzinach nocnych.

Rozwiązywanie problemów

Wszystkie urządzenia pokazują zero lub brak danych
  1. Sprawdź połączenie internetowe na TapHome Core — szablon wymaga wychodzącego dostępu HTTPS do isot.okte.sk
  2. Sprawdź, czy API odpowiada — otwórz https://isot.okte.sk/api/v1/dam/results?deliveryDayFrom=2026-03-28&deliveryDayTo=2026-03-28 w przeglądarce
  3. Ceny DAM na następny dzień są zazwyczaj publikowane po 12:45 CET. Przed publikacją żądania dla jutrzejszej daty zwracają puste wyniki.
Urządzenia okienkowe zwracają NaN
  1. Sprawdź, że Od < Do w parametrach importu szablonu
  2. Sprawdź, czy bieżąca godzina mieści się w zakresie Od–Do (dla Rankingu aktualnego okresu w oknie czasowym)
  3. Pamiętaj, że Od i Do używają formatu 24-godzinnego (0–23)
Wartości cen wydają się nieprawidłowe

OKTE publikuje ceny w EUR/MWh. Aby przeliczyć na EUR/kWh (skala gospodarstwa domowego), podziel przez 1000. Szablon wyświetla surowe wartości z API bez przeliczania.

Dostępne urządzenia

OKTE Ceny spot Moduł
Atrybuty serwisowe
Period 1
Period 2
Period 3
Period 4
Period 5
Period 6
Period 7
Period 8
Period 9
Period 10
Period 11
Period 12
Period 13
Period 14
Period 15
Period 16
Period 17
Period 18
Period 19
Period 20
Period 21
Period 22
Period 23
Period 24
Period 25
Period 26
Period 27
Period 28
Period 29
Period 30
Period 31
Period 32
Period 33
Period 34
Period 35
Period 36
Period 37
Period 38
Period 39
Period 40
Period 41
Period 42
Period 43
Period 44
Period 45
Period 46
Period 47
Period 48
Period 49
Period 50
Period 51
Period 52
Period 53
Period 54
Period 55
Period 56
Period 57
Period 58
Period 59
Period 60
Period 61
Period 62
Period 63
Period 64
Period 65
Period 66
Period 67
Period 68
Period 69
Period 70
Period 71
Period 72
Period 73
Period 74
Period 75
Period 76
Period 77
Period 78
Period 79
Period 80
Period 81
Period 82
Period 83
Period 84
Period 85
Period 86
Period 87
Period 88
Period 89
Period 90
Period 91
Period 92
Period 93
Period 94
Period 95
Period 96
Zmienne niestandardowe
From (numeric) = 9Start hour (0–23) of the time window for windowed price ranking and statistics
To (numeric) = 17End hour (0–23) of the time window for windowed price ranking and statistics

okte.sk

Odczyt (moduł)
VAR today := tostring(NOW(), "yyyy-MM-dd");;
VAR response := SENDHTTPREQUEST("/api/v1/dam/results?deliveryDayFrom=" + today + "&deliveryDayTo=" + today);
IF response.IsSuccess
    output := response.Content;
ELSE
    ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
END
Atrybuty serwisowe
Perióda 1
PARSEJSON(output, "$[?(@.period == 1)].price") + " EUR"
Perióda 2
PARSEJSON(output, "$[?(@.period == 2)].price") + " EUR"
Perióda 3
PARSEJSON(output, "$[?(@.period == 3)].price") + " EUR"
Perióda 4
PARSEJSON(output, "$[?(@.period == 4)].price") + " EUR"
Perióda 5
PARSEJSON(output, "$[?(@.period == 5)].price") + " EUR"
Perióda 6
PARSEJSON(output, "$[?(@.period == 6)].price") + " EUR"
Perióda 7
PARSEJSON(output, "$[?(@.period == 7)].price") + " EUR"
Perióda 8
PARSEJSON(output, "$[?(@.period == 8)].price") + " EUR"
Perióda 9
PARSEJSON(output, "$[?(@.period == 9)].price") + " EUR"
Perióda 10
PARSEJSON(output, "$[?(@.period == 10)].price") + " EUR"
Perióda 11
PARSEJSON(output, "$[?(@.period == 11)].price") + " EUR"
Perióda 12
PARSEJSON(output, "$[?(@.period == 12)].price") + " EUR"
Perióda 13
PARSEJSON(output, "$[?(@.period == 13)].price") + " EUR"
Perióda 14
PARSEJSON(output, "$[?(@.period == 14)].price") + " EUR"
Perióda 15
PARSEJSON(output, "$[?(@.period == 15)].price") + " EUR"
Perióda 16
PARSEJSON(output, "$[?(@.period == 16)].price") + " EUR"
Perióda 17
PARSEJSON(output, "$[?(@.period == 17)].price") + " EUR"
Perióda 18
PARSEJSON(output, "$[?(@.period == 18)].price") + " EUR"
Perióda 19
PARSEJSON(output, "$[?(@.period == 19)].price") + " EUR"
Perióda 20
PARSEJSON(output, "$[?(@.period == 20)].price") + " EUR"
Perióda 21
PARSEJSON(output, "$[?(@.period == 21)].price") + " EUR"
Perióda 22
PARSEJSON(output, "$[?(@.period == 22)].price") + " EUR"
Perióda 23
PARSEJSON(output, "$[?(@.period == 23)].price") + " EUR"
Perióda 24
PARSEJSON(output, "$[?(@.period == 24)].price") + " EUR"
Perióda 25
PARSEJSON(output, "$[?(@.period == 25)].price") + " EUR"
Perióda 26
PARSEJSON(output, "$[?(@.period == 26)].price") + " EUR"
Perióda 27
PARSEJSON(output, "$[?(@.period == 27)].price") + " EUR"
Perióda 28
PARSEJSON(output, "$[?(@.period == 28)].price") + " EUR"
Perióda 29
PARSEJSON(output, "$[?(@.period == 29)].price") + " EUR"
Perióda 30
PARSEJSON(output, "$[?(@.period == 30)].price") + " EUR"
Perióda 31
PARSEJSON(output, "$[?(@.period == 31)].price") + " EUR"
Perióda 32
PARSEJSON(output, "$[?(@.period == 32)].price") + " EUR"
Perióda 33
PARSEJSON(output, "$[?(@.period == 33)].price") + " EUR"
Perióda 34
PARSEJSON(output, "$[?(@.period == 34)].price") + " EUR"
Perióda 35
PARSEJSON(output, "$[?(@.period == 35)].price") + " EUR"
Perióda 36
PARSEJSON(output, "$[?(@.period == 36)].price") + " EUR"
Perióda 37
PARSEJSON(output, "$[?(@.period == 37)].price") + " EUR"
Perióda 38
PARSEJSON(output, "$[?(@.period == 38)].price") + " EUR"
Perióda 39
PARSEJSON(output, "$[?(@.period == 39)].price") + " EUR"
Perióda 40
PARSEJSON(output, "$[?(@.period == 40)].price") + " EUR"
Perióda 41
PARSEJSON(output, "$[?(@.period == 41)].price") + " EUR"
Perióda 42
PARSEJSON(output, "$[?(@.period == 42)].price") + " EUR"
Perióda 43
PARSEJSON(output, "$[?(@.period == 43)].price") + " EUR"
Perióda 44
PARSEJSON(output, "$[?(@.period == 44)].price") + " EUR"
Perióda 45
PARSEJSON(output, "$[?(@.period == 45)].price") + " EUR"
Perióda 46
PARSEJSON(output, "$[?(@.period == 46)].price") + " EUR"
Perióda 47
PARSEJSON(output, "$[?(@.period == 47)].price") + " EUR"
Perióda 48
PARSEJSON(output, "$[?(@.period == 48)].price") + " EUR"
Perióda 49
PARSEJSON(output, "$[?(@.period == 49)].price") + " EUR"
Perióda 50
PARSEJSON(output, "$[?(@.period == 50)].price") + " EUR"
Perióda 51
PARSEJSON(output, "$[?(@.period == 51)].price") + " EUR"
Perióda 52
PARSEJSON(output, "$[?(@.period == 52)].price") + " EUR"
Perióda 53
PARSEJSON(output, "$[?(@.period == 53)].price") + " EUR"
Perióda 54
PARSEJSON(output, "$[?(@.period == 54)].price") + " EUR"
Perióda 55
PARSEJSON(output, "$[?(@.period == 55)].price") + " EUR"
Perióda 56
PARSEJSON(output, "$[?(@.period == 56)].price") + " EUR"
Perióda 57
PARSEJSON(output, "$[?(@.period == 57)].price") + " EUR"
Perióda 58
PARSEJSON(output, "$[?(@.period == 58)].price") + " EUR"
Perióda 59
PARSEJSON(output, "$[?(@.period == 59)].price") + " EUR"
Perióda 60
PARSEJSON(output, "$[?(@.period == 60)].price") + " EUR"
Perióda 61
PARSEJSON(output, "$[?(@.period == 61)].price") + " EUR"
Perióda 62
PARSEJSON(output, "$[?(@.period == 62)].price") + " EUR"
Perióda 63
PARSEJSON(output, "$[?(@.period == 63)].price") + " EUR"
Perióda 64
PARSEJSON(output, "$[?(@.period == 64)].price") + " EUR"
Perióda 65
PARSEJSON(output, "$[?(@.period == 65)].price") + " EUR"
Perióda 66
PARSEJSON(output, "$[?(@.period == 66)].price") + " EUR"
Perióda 67
PARSEJSON(output, "$[?(@.period == 67)].price") + " EUR"
Perióda 68
PARSEJSON(output, "$[?(@.period == 68)].price") + " EUR"
Perióda 69
PARSEJSON(output, "$[?(@.period == 69)].price") + " EUR"
Perióda 70
PARSEJSON(output, "$[?(@.period == 70)].price") + " EUR"
Perióda 71
PARSEJSON(output, "$[?(@.period == 71)].price") + " EUR"
Perióda 72
PARSEJSON(output, "$[?(@.period == 72)].price") + " EUR"
Perióda 73
PARSEJSON(output, "$[?(@.period == 73)].price") + " EUR"
Perióda 74
PARSEJSON(output, "$[?(@.period == 74)].price") + " EUR"
Perióda 75
PARSEJSON(output, "$[?(@.period == 75)].price") + " EUR"
Perióda 76
PARSEJSON(output, "$[?(@.period == 76)].price") + " EUR"
Perióda 77
PARSEJSON(output, "$[?(@.period == 77)].price") + " EUR"
Perióda 78
PARSEJSON(output, "$[?(@.period == 78)].price") + " EUR"
Perióda 79
PARSEJSON(output, "$[?(@.period == 79)].price") + " EUR"
Perióda 80
PARSEJSON(output, "$[?(@.period == 80)].price") + " EUR"
Perióda 81
PARSEJSON(output, "$[?(@.period == 81)].price") + " EUR"
Perióda 82
PARSEJSON(output, "$[?(@.period == 82)].price") + " EUR"
Perióda 83
PARSEJSON(output, "$[?(@.period == 83)].price") + " EUR"
Perióda 84
PARSEJSON(output, "$[?(@.period == 84)].price") + " EUR"
Perióda 85
PARSEJSON(output, "$[?(@.period == 85)].price") + " EUR"
Perióda 86
PARSEJSON(output, "$[?(@.period == 86)].price") + " EUR"
Perióda 87
PARSEJSON(output, "$[?(@.period == 87)].price") + " EUR"
Perióda 88
PARSEJSON(output, "$[?(@.period == 88)].price") + " EUR"
Perióda 89
PARSEJSON(output, "$[?(@.period == 89)].price") + " EUR"
Perióda 90
PARSEJSON(output, "$[?(@.period == 90)].price") + " EUR"
Perióda 91
PARSEJSON(output, "$[?(@.period == 91)].price") + " EUR"
Perióda 92
PARSEJSON(output, "$[?(@.period == 92)].price") + " EUR"
Perióda 93
PARSEJSON(output, "$[?(@.period == 93)].price") + " EUR"
Perióda 94
PARSEJSON(output, "$[?(@.period == 94)].price") + " EUR"
Perióda 95
PARSEJSON(output, "$[?(@.period == 95)].price") + " EUR"
Perióda 96
PARSEJSON(output, "$[?(@.period == 96)].price") + " EUR"
Aktualna cena Zmienna Tylko do odczytu

Cena spot za bieżący okres godzinowy w EUR/MWh — dynamicznie ustalana z tablicy cen na podstawie aktualnego czasu

numeric Jednostka: EUR json_path

Aktualna cena

Odczyt
var prices := PARSEJSON(output, "$..price");
VAR date := NOW();
var periodHour := LENGTH(prices) / 24;	
var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);

GETAT(prices, actualperiod)
Ranking aktualnego okresu Zmienna Tylko do odczytu

Pozycja ceny bieżącej godziny wśród wszystkich okresów (1 = najtańsza godzina dnia)

numeric json_path

Ranking aktualnego okresu

Odczyt
var prices := PARSEJSON(output, "$..price");
var byPrice := ORDERINDEX(prices);
VAR date := NOW();
var periodHour := LENGTH(prices) / 24;	
var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);

INDEXOF(byPrice, actualperiod) + 1
Ranking aktualnego okresu w oknie czasowym Zmienna Tylko do odczytu

Pozycja ceny bieżącej godziny w ramach zdefiniowanego przez użytkownika okna czasowego Od–Do — zwraca NaN poza oknem

numeric json_path

Ranking aktualnego okresu w oknie czasowym

Odczyt
VAR date := NOW();
IF date.hour < From or date.hour > To or From >= To
	RETURN(NaN);
ELSE
	var prices := PARSEJSON(output, "$..price");
	var periodHour := LENGTH(prices) / 24;
	var windowPrices := COPY(prices, From * periodHour, (To - From) * periodHour);
	var byPrice := ORDERINDEX(windowPrices);
	
	var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);

	RETURN(INDEXOF(byPrice, actualperiod - From * periodHour) +1);
END
Najwyższa cena dnia Zmienna Tylko do odczytu

Maksymalna cena spot ze wszystkich dostępnych okresów (EUR/MWh)

numeric Jednostka: EUR json_path

Najwyższa cena dnia

Odczyt
var prices := PARSEJSON(output, "$..price");
GETAT(ORDERDESC(prices), 0)
Najwyższa cena w oknie czasowym Zmienna Tylko do odczytu

Maksymalna cena spot w ramach zdefiniowanego przez użytkownika okna czasowego Od–Do (EUR/MWh)

numeric Jednostka: EUR json_path

Najwyższa cena w oknie czasowym

Odczyt
VAR date := NOW();
IF From >= To
	RETURN(NaN);
ELSE
	var prices := PARSEJSON(output, "$..price");
	var periodHour := LENGTH(prices) / 24;	
	var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);
	var windowPrices := COPY(prices, From * periodHour, (To - From) * periodHour);
	var byPrice := ORDERDESC(windowPrices);

	RETURN(GETAT(byPrice, 0));
END
Najniższa cena dnia Zmienna Tylko do odczytu

Minimalna cena spot ze wszystkich dostępnych okresów (EUR/MWh)

numeric Jednostka: EUR json_path

Najniższa cena dnia

Odczyt
var prices := PARSEJSON(output, "$..price");
GETAT(ORDER(prices), 0)
Najniższa cena w oknie czasowym Zmienna Tylko do odczytu

Minimalna cena spot w ramach zdefiniowanego przez użytkownika okna czasowego Od–Do (EUR/MWh)

numeric Jednostka: EUR json_path

Najniższa cena w oknie czasowym

Odczyt
VAR date := NOW();
IF From >= To
	RETURN(NaN);
ELSE
	var prices := PARSEJSON(output, "$..price");
	var periodHour := LENGTH(prices) / 24;	
	#var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);
	var windowPrices := COPY(prices, From * periodHour, (To - From) * periodHour);
	var byPrice := ORDER(windowPrices);

	RETURN(GETAT(byPrice, 0));
END
Najtańszy okres dnia Zmienna Tylko do odczytu

Numer okresu oparty na 1 dla najtańszej godziny dnia (np. 3 = 02:00–03:00)

numeric json_path

Najtańszy okres dnia

Odczyt
var prices := PARSEJSON(output, "$..price");
GETAT(ORDERINDEX(prices), 0) +1
Najtańszy pozostały okres Zmienna Tylko do odczytu

Numer okresu oparty na 1 dla najtańszej godziny od bieżącej godziny wzwyż

numeric json_path

Najtańszy pozostały okres

Odczyt
var prices := PARSEJSON(output, "$..price");
VAR date := NOW();
var periodHour := LENGTH(prices) / 24;	
var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);
var remainingPrices := COPY(prices, actualperiod, LENGTH(prices) - actualperiod);
var byPrice := ORDERINDEX(remainingPrices);

GETAT(byPrice, 0) + actualperiod +1
Liczba okresów Zmienna Tylko do odczytu

Łączna liczba godzinowych okresów cenowych dostępnych w odpowiedzi API (zazwyczaj 24 lub 72)

numeric json_path

Liczba okresów

Odczyt
var prices := PARSEJSON(output, "$..price");
LENGTH(prices);
Liczba okresów w oknie czasowym Zmienna Tylko do odczytu

Liczba godzinowych okresów cenowych w ramach zdefiniowanego przez użytkownika okna czasowego Od–Do

numeric json_path

Liczba okresów w oknie czasowym

Odczyt
VAR date := NOW();
IF From >= To
	RETURN(NaN);
ELSE
	var prices := PARSEJSON(output, "$..price");
	var periodHour := LENGTH(prices) / 24;
	var windowPrices := COPY(prices, From * periodHour, (To - From) * periodHour);

	RETURN(LENGTH(windowPrices));
END
Średnia cena dnia Zmienna Tylko do odczytu

Średnia arytmetyczna wszystkich dostępnych cen okresów (EUR/MWh)

numeric Jednostka: EUR json_path

Średnia cena dnia

Odczyt
var prices := PARSEJSON(output, "$..price");
AVG(prices)
Średnia cena w oknie czasowym Zmienna Tylko do odczytu

Średnia arytmetyczna cen spot w ramach zdefiniowanego przez użytkownika okna czasowego Od–Do (EUR/MWh)

numeric Jednostka: EUR json_path

Średnia cena w oknie czasowym

Odczyt
VAR date := NOW();
IF From >= To
	RETURN(NaN);
ELSE
	var prices := PARSEJSON(output, "$..price");
	var periodHour := LENGTH(prices) / 24;	
	#var actualperiod := FLOOR(((date.hour * 60) + date.minute) * periodHour / 60);
	var windowPrices := COPY(prices, From * periodHour, (To - From) * periodHour);

	RETURN(AVG(windowPrices));
END
Połączenie: Packet Parser → HTTP