Skip to content

Plošná ryba Spot (PR-SPOT)

Device page · Flash firmware from the browser

A traffic light for the spot electricity price. The LED ring glows green, yellow or red depending on the current price, the display shows the price and how long until it changes. Useful wherever you decide whether to start the washing machine, dishwasher or car charging now or wait.

  • Ring of 12 WS2812B LEDs
  • 1.3" OLED display (SH1106, 128x64)
  • Price from Home Assistant, with a direct internet fallback when HA is not running
  • Traffic light thresholds set from Home Assistant
  • Handles 15-minute and hourly blocks (the OTE day-ahead market runs in 15-minute intervals since 1 October 2025)
  • Powered from USB

What is in the box

  • Jádro board
  • Head with the LED ring and OLED display (ring on the HEAD connector, display on Qwiic)
  • Enclosure
  • USB-C cable
  • Card with a link to this guide

A USB 5 V adapter is not included. Any common adapter rated at least 1 A will do.

Installation

  1. Plug the ring into the HEAD connector and the display with the Qwiic cable into either Qwiic connector on the board (if not connected from the factory).
  2. Put Spot where you will see it: kitchen, hallway, next to the washing machine.
  3. Connect the USB-C cable to the adapter. The ring needs 5 V from USB, it does not light up on battery.

Price from Home Assistant

Spot does not know the price by itself, it reads it from an entity in Home Assistant. You need an integration that brings OTE prices into HA. We mainly expect the community integration Czech Energy Spot Prices (installed through HACS):

  1. In HACS search for Czech Energy Spot Prices, install it and restart HA.
  2. Settings, Devices and services, Add integration, Czech Energy Spot Prices.
  3. Choose currency CZK and unit kWh. With 15-minute prices the entity gets the suffix _15min.

By default Spot reads the entity sensor.current_spot_electricity_price. If your entity has a different ID, you have three options:

  • Rename the entity in HA: Settings, Entities, open the price entity, gear icon, change the entity ID to sensor.current_spot_electricity_price. The simplest way.
  • Template helper: create a template sensor with this ID that converts another entity, for example from CZK/MWh to CZK/kWh ({{ states('sensor.my_price') | float / 1000 }}).
  • Own build: adopt the device in the ESPHome dashboard and add substitutions: cena_entita: sensor.your_entity to the YAML.

Any other integration works too, as long as it provides a number in CZK/kWh (or the unit you set the thresholds in).

The device does not need permission to perform HA actions. Reading an entity state is enough.

Fallback without Home Assistant

When Home Assistant is not running or does not provide a price, Spot downloads prices itself from the public Energy-Charts API (Fraunhofer ISE, api.energy-charts.info), bidding zone CZ.

  • According to Energy-Charts the data is licensed under CC BY 4.0 (source Bundesnetzagentur | SMARD.de), and use requires crediting Energy-Charts.info as the source. The device shows the source in the Price source entity. Status checked on 2026-10-22.
  • Energy-Charts publishes prices in EUR/MWh. Spot converts them to CZK/kWh using the EUR/CZK rate entity. Update the rate now and then, a difference of 1 CZK moves the price by about 4 %.
  • It downloads only when the HA price is missing, at most once every 10 minutes, and only as much data as needed (from now to 36 hours ahead). The API allows 2 requests per minute from one address.
  • The device takes the time from the internet (SNTP), so the fallback needs working WiFi with internet access.
  • Turn the fallback off with the Internet price fallback switch.

Fallback prices are the plain exchange price without VAT, distribution and supplier fees. If your HA integration calculates the final price, the values will differ, so set the thresholds accordingly.

Connecting to WiFi

  • From the browser over USB: open https://plosnaryba.cz/firmware in Chrome or Edge, connect Spot to the computer with a USB-C cable, click Connect and enter your WiFi name and password (Improv).
  • Over Bluetooth in Home Assistant: if HA has Bluetooth (an adapter or an ESPHome Bluetooth proxy), it offers the new device for WiFi setup. Enter the details and confirm the pairing by pressing the BOOT button on Spot. Without the BOOT press the device does not accept WiFi credentials, so nobody can set it up without having it in hand.

The device has no fallback WiFi network and no default password. 2.4 GHz only.

The status LED on the board is on while Spot is not connected to WiFi (waiting for setup). It is off in normal operation. The LED ring is the traffic light, not the status LED.

Adding to Home Assistant

  1. Settings, Devices and services. The ESPHome device Plošná ryba Spot is listed as discovered. Click Add.
  2. Confirm. If HA offers to set an encryption key, accept it.
  3. Assign an area (for example Kitchen). Entities appear on their own.

Settings

On the device page in HA, in the Configuration section:

Setting Default What it does
Cheap price threshold 2.00 CZK/kWh green below this price
Expensive price threshold 4.00 CZK/kWh red from this price, yellow in between
Price block length 15 min 15 min or 60 min, how often the price changes
EUR/CZK rate 24.30 only for the internet fallback
Automatic ring colour on off = you control the ring yourself as a light
Internet price fallback on download prices when HA is missing

Set the ring brightness like any light (the Ring entity). You can also turn the ring off and keep only the display. Without a price the ring glows blue.

Display

  • Top: the label Spot price and the clock
  • Middle: the current price in large digits, unit and level (Cheap, Medium, Expensive) on the right
  • Bottom: time until the price changes (minutes:seconds) and the next price, if known (from the internet fallback)

Entities

Home Assistant builds the entity ID from the device name and the entity name, typically sensor.plosna_ryba_spot_current_price. The table lists the suffix after the device name (English firmware build).

Type Suffix Meaning Unit
sensor current_price price that drives the traffic light CZK/kWh
sensor next_price price in the next block (only when known from the fallback) CZK/kWh
text_sensor price_level Cheap, Medium, Expensive, Unknown
text_sensor price_source Home Assistant, Energy-Charts.info (CC BY 4.0), None
light ring LED ring
number cheap_price_threshold green threshold CZK/kWh
number expensive_price_threshold red threshold CZK/kWh
number eur_czk_rate rate for the fallback conversion CZK/EUR
select price_block_length 15 min or 60 min
switch automatic_ring_colour traffic light controls the ring colour
switch internet_price_fallback fallback from Energy-Charts
sensor wifi_signal signal strength dBm
sensor uptime time since start s
text_sensor firmware_version, ip_address diagnostics
button restart restart
light status_led status LED on the board
binary_sensor boot_button BOOT button, usable in automations
sensor battery_voltage, battery Spot runs on USB, values are meaningless V, %

Automations

Boiler on cheap electricity. Turns on when the price is cheap, off when it stops being cheap. Replace switch.boiler with your switch.

automation:
  - alias: "Boiler: heat on cheap electricity"
    triggers:
      - trigger: state
        entity_id: sensor.plosna_ryba_spot_price_level
    actions:
      - choose:
          - conditions:
              - condition: state
                entity_id: sensor.plosna_ryba_spot_price_level
                state: "Cheap"
            sequence:
              - action: switch.turn_on
                target:
                  entity_id: switch.boiler
        default:
          - action: switch.turn_off
            target:
              entity_id: switch.boiler

The level text depends on the firmware language (Levná in the Czech build). For a language independent automation use a numeric condition:

automation:
  - alias: "Boiler: on below 1.50 CZK/kWh"
    triggers:
      - trigger: numeric_state
        entity_id: sensor.plosna_ryba_spot_current_price
        below: 1.5
    actions:
      - action: switch.turn_on
        target:
          entity_id: switch.boiler

A boiler with a thermostat controls its temperature by itself, the automation only enables its power. The boiler switch must be rated for it and installed by an electrician (230 V, high current).

The BOOT button as a quick control, for example to toggle the ring:

automation:
  - alias: "Spot: BOOT toggles the ring"
    triggers:
      - trigger: state
        entity_id: binary_sensor.plosna_ryba_spot_boot_button
        to: "on"
    actions:
      - action: light.toggle
        target:
          entity_id: light.plosna_ryba_spot_ring

Troubleshooting

Problem What to try
Display shows Waiting for price The price entity does not exist in HA or has no number (check the ID, see Price from Home Assistant). Without HA: is the fallback on and does the device have internet?
Price source stays Energy-Charts while HA runs Spot does not read the HA entity: wrong entity ID, or the device is not added to HA.
Price is a thousand times too high The integration provides CZK/MWh. Switch it to kWh or use a template sensor that divides by 1000.
Time to change is wrong Set Price block length to match the integration (15 or 60 min).
Ring is dark Is the Ring entity on? Only USB powers it. A weak adapter or a long thin cable can reset the ring.
Ring shows a different colour than I want Automatic ring colour overrides the colour when the level changes. Turn it off to control the ring yourself.
Display is dark Check the Qwiic cable. The display has address 0x3C, the device log lists the I2C bus.

Safety

  • No mains voltage: Spot runs on USB 5 V only. Do not connect anything from the 230 V mains to it. Switch appliances like a boiler through HA and properly installed switches made for that.
  • Spot is meant for dry indoor spaces.
  • Prices are for guidance. The final price is set by your contract with your supplier.