TapHome

Nanogreen Spot Prices

Packet Parser → HTTP
Submitted by
Last updated: 03. 2026

Nanogreen is a Czech green energy supplier that offers electricity at spot market prices. This template connects TapHome to the Nanogreen customer API (moje.nanogreen.cz) over HTTPS, fetching today’s hourly spot prices and related indicators. No physical hardware is involved — the template is a pure data service that polls the API every 5 minutes.

The template provides 37 devices: 24 hourly price sensors, 6 cheapest-hour indicators (across off-peak, peak, and all-day windows), 6 binary sensors for real-time “is this the Nth cheapest hour” checks, and a live market price sensor.

Configuration

During template import, enter the Nanogreen API endpoint (moje.nanogreen.cz) as the host. The template communicates over HTTPS (port 443). No API key or authentication is required — the pricing data is publicly accessible.

Device capabilities

Hourly prices (24 sensors)

The template exposes one sensor for each hour of the day (0:00–1:00 through 23:00–0:00). Each sensor reads the corresponding value from the todayHourlyPrices array in the API response. Prices are in CZK/kWh.

These sensors update with every poll cycle (5 minutes). In practice, daily prices are published once per day, so the values remain stable throughout the day.

Cheapest-hour indicators (6 sensors)

Six sensors identify the cheapest and second-cheapest hours in three time windows:

  • Off-Peak Cheapest Hour / Off-Peak 2nd Cheapest Hour — cheapest hours outside the energy peak period
  • Peak Cheapest Hour / Peak 2nd Cheapest Hour — cheapest hours during the energy peak period
  • All-Day Cheapest Hour / All-Day 2nd Cheapest Hour — cheapest hours across the entire day

Each sensor returns an hour index (0–23). For example, a value of 3 means the hour 3:00–4:00 is the cheapest in that window.

Binary sensors (6 sensors)

Six binary (on/off) sensors indicate whether the current hour ranks among the cheapest of the day:

  • Is Cheapest Hour? — true if the current hour is the cheapest
  • Is 2nd Cheapest Hour? — true if the current hour is the 2nd cheapest
  • Is 3rd Cheapest Hour? — true if the current hour is the 3rd cheapest
  • Is 4th Cheapest Hour? — true if the current hour is the 4th cheapest
  • Is 5th Cheapest Hour? — true if the current hour is the 5th cheapest
  • Is 6th Cheapest Hour? — true if the current hour is the 6th cheapest

These sensors are implemented as reed contacts (PacketParserReedContact) that parse the boolean API response into 0/1 values. They are the primary tool for automation — use them as conditions in Smart Rules to trigger actions during the cheapest hours.

Current market price (1 sensor)

The Current Spot Price sensor reads the live electricity market price from the OTE (Czech electricity market operator), converted to CZK using the CNB (Czech National Bank) exchange rate. This value reflects the real-time wholesale price in CZK/kWh.

Automation examples

Run appliances during cheapest hours

Use the binary sensors as conditions in a Smart Rule. For example, to heat a water boiler only during the 3 cheapest hours of the day:

  1. Create a Smart Rule with the condition: Is Cheapest Hour? = ON OR Is 2nd Cheapest Hour? = ON OR Is 3rd Cheapest Hour? = ON
  2. Set the action to turn on the boiler relay
  3. The boiler runs only when electricity is at its cheapest
Price threshold automation

Use the Current Spot Price sensor with a numeric condition. For example, turn on a heat pump only when the spot price drops below a threshold (e.g., 2.00 CZK/kWh).

Troubleshooting

Prices show zero or NaN
  1. Verify that the Nanogreen API is reachable — open https://moje.nanogreen.cz/api/prices/daily in a browser
  2. Check that TapHome CCU has internet access (the API is a cloud service, not a local device)
  3. Prices for the next day are typically published in the afternoon — if queried too early, some fields may not be available yet
Binary sensors not updating

The binary sensors compare the current hour against the day’s price ranking. They update with each poll cycle (5 minutes). If a sensor stays in the wrong state, verify that the hourly price sensors contain valid data for today.

This template requires an active internet connection on the TapHome CCU. Unlike local device templates (Shelly, Modbus), the Nanogreen integration communicates with an external cloud API. Ensure your network firewall allows outbound HTTPS traffic to moje.nanogreen.cz.

Available devices

Spot Prices Module
Custom Variables

Spotové ceny

Read (module)
responseJson := "error";
VAR response := SENDHTTPREQUEST("/api/prices/daily");

  VAR content := response.Content;
  
IF response.IsSuccess
    responseJson := response.Content;
ELSE
    VAR contentJson := response.Content;
END
Price 0:00–1:00 Variable Read-only

Spot electricity price for the hour 0:00–1:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 0:00–1:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[0]");
Price 1:00–2:00 Variable Read-only

Spot electricity price for the hour 1:00–2:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 1:00–2:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[1]");
Price 2:00–3:00 Variable Read-only

Spot electricity price for the hour 2:00–3:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 2:00–3:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[2]");
Price 3:00–4:00 Variable Read-only

Spot electricity price for the hour 3:00–4:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 3:00–4:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[3]");
Price 4:00–5:00 Variable Read-only

Spot electricity price for the hour 4:00–5:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 4:00–5:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[4]");
Price 5:00–6:00 Variable Read-only

Spot electricity price for the hour 5:00–6:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 5:00–6:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[5]");
Price 6:00–7:00 Variable Read-only

Spot electricity price for the hour 6:00–7:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 6:00–7:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[6]");
Price 7:00–8:00 Variable Read-only

Spot electricity price for the hour 7:00–8:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 7:00–8:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[7]");
Price 8:00–9:00 Variable Read-only

Spot electricity price for the hour 8:00–9:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 8:00–9:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[8]");
Price 9:00–10:00 Variable Read-only

Spot electricity price for the hour 9:00–10:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 9:00–10:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[9]");
Price 10:00–11:00 Variable Read-only

Spot electricity price for the hour 10:00–11:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 10:00–11:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[10]");
Price 11:00–12:00 Variable Read-only

Spot electricity price for the hour 11:00–12:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 11:00–12:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[11]");
Price 12:00–13:00 Variable Read-only

Spot electricity price for the hour 12:00–13:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 12:00–13:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[12]");
Price 13:00–14:00 Variable Read-only

Spot electricity price for the hour 13:00–14:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 13:00–14:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[13]");
Price 14:00–15:00 Variable Read-only

Spot electricity price for the hour 14:00–15:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 14:00–15:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[14]");
Price 15:00–16:00 Variable Read-only

Spot electricity price for the hour 15:00–16:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 15:00–16:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[15]");
Price 16:00–17:00 Variable Read-only

Spot electricity price for the hour 16:00–17:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 16:00–17:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[16]");
Price 17:00–18:00 Variable Read-only

Spot electricity price for the hour 17:00–18:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 17:00–18:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[17]");
Price 18:00–19:00 Variable Read-only

Spot electricity price for the hour 18:00–19:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 18:00–19:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[18]");
Price 19:00–20:00 Variable Read-only

Spot electricity price for the hour 19:00–20:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 19:00–20:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[19]");
Price 20:00–21:00 Variable Read-only

Spot electricity price for the hour 20:00–21:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 20:00–21:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[20]");
Price 21:00–22:00 Variable Read-only

Spot electricity price for the hour 21:00–22:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 21:00–22:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[21]");
Price 22:00–23:00 Variable Read-only

Spot electricity price for the hour 22:00–23:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 22:00–23:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[22]");
Price 23:00–0:00 Variable Read-only

Spot electricity price for the hour 23:00–0:00 (CZK/kWh)

numeric Unit: CZK/kWh json_path

Price 23:00–0:00

Read
PARSEJSON(responseJson,"$.todayHourlyPrices.[23]");
Off-Peak 2nd Cheapest Hour Variable Read-only

Hour index (0–23) of the second cheapest electricity hour outside peak hours

numeric json_path

Off-Peak 2nd Cheapest Hour

Read
(PARSEJSON(responseJson, "todayOffpeakSecondCheapestHour"));
Peak 2nd Cheapest Hour Variable Read-only

Hour index (0–23) of the second cheapest electricity hour during peak hours

numeric json_path

Peak 2nd Cheapest Hour

Read
(PARSEJSON(responseJson, "todayPeakSecondCheapestHour"));
All-Day 2nd Cheapest Hour Variable Read-only

Hour index (0–23) of the second cheapest electricity hour across the entire day

numeric json_path

All-Day 2nd Cheapest Hour

Read
(PARSEJSON(responseJson, "todayBaseSecondCheapestHour"));
Off-Peak Cheapest Hour Variable Read-only

Hour index (0–23) of the cheapest electricity hour outside peak hours

numeric json_path

Off-Peak Cheapest Hour

Read
(PARSEJSON(responseJson, "todayOffpeakCheapestHour"));
Peak Cheapest Hour Variable Read-only

Hour index (0–23) of the cheapest electricity hour during peak hours

numeric json_path

Peak Cheapest Hour

Read
(PARSEJSON(responseJson, "todayPeakCheapestHour"));
All-Day Cheapest Hour Variable Read-only

Hour index (0–23) of the cheapest electricity hour across the entire day

numeric json_path

All-Day Cheapest Hour

Read
(PARSEJSON(responseJson, "todayBaseCheapestHour"));
Is 4th Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the 4th cheapest of the day

boolean

Is 4th Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlyFourthCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Is 2nd Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the 2nd cheapest of the day

boolean

Is 2nd Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlySecondCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Is Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the cheapest of the day

boolean

Is Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlyCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Is 5th Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the 5th cheapest of the day

boolean

Is 5th Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlyFifthCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Is 6th Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the 6th cheapest of the day

boolean

Is 6th Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlySixthCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Is 3rd Cheapest Hour? Reed Contact Read-only

Binary sensor — ON when the current hour is the 3rd cheapest of the day

boolean

Is 3rd Cheapest Hour?

Read
VAR state := (PARSEJSON(responseJson, "isCurrentlyThirdCheapestHour"));
If state = false
  RETURN(0);
ELSEif state = true
  RETURN(1);
else 
  RETURN(NaN);
END
Current Spot Price Variable Read-only

Live electricity market price from OTE, converted to CZK via CNB exchange rate (CZK/kWh)

numeric Unit: CZK/kWh json_path

Current Spot Price

Read
(PARSEJSON(responseJson, "currentPrice"));
Connection: Packet Parser → HTTP