Sähkön hintaennuste kotiautomaatioon

Ilmainen JSON-syöte Home Assistantiin, Homeyhin ja muihin. Valmiit esimerkit: halvin 3 tunnin jakso ensi yönä, auton lataus ja lämminvesivaraaja.

Syöte: https://sahkonhinta.xn--hlytyslista-l8a.fi/api/v1/ennuste.json
Hinnat c/kWh, tukkuhinnan ennuste ilman ALV:tä (syötteessä ALV 0 %, paitsi mean_vat), ei sähkölaskusi hinta. Kellonajat Suomen aikaa. Päivittyy klo 6, 15 ja 20; hae enintään kerran 30 minuutissa.

Mitä syötteessä on

Syöte sisältää vain omia ennusteitamme. Kun huomisen viralliset hinnat on julkaistu (noin klo 14), ennuste siirtyy seuraavaan päivään ja next_night seuraavaan yöhön. Saman illan ohjaukseen käytä virallisia hintoja, esimerkiksi /api/markets/FI/prices.json (EUR/MWh); tämä syöte on suunnitteluun 1–7 päivää eteenpäin.

Esimerkkivastaus (lyhennetty)
{
  "schema": "sahkoennuste.ennuste.v1",
  "issue_time": "2026-10-22T06:05:00+03:00",
  "stale": false,
  "units": "c/kWh",
  "timezone": "Europe/Helsinki",
  "next_night": {"date": "2026-10-23", "start": "2026-10-23T02:00:00+03:00",
                 "end": "2026-10-23T05:00:00+03:00", "from": "02:00", "to": "05:00",
                 "hours": 3, "mean": 1.74},
  "days": [
    {"date": "2026-10-23", "horizon_day": 1, "mean": 3.63,
     "range_50": [2.62, 4.12], "range_80": [1.77, 5.33],
     "cheapest_3h": {...}, "cheapest_6h": {...},
     "hourly": [{"start": "2026-10-23T00:00:00+03:00", "end": "...", "price": 2.1}, ...]},
    {"date": "2026-10-26", "horizon_day": 4, "mean": 2.39,
     "range_50": [0.86, 3.24], "range_80": [0.37, 5.56]},
    ...
  ],
  "outlook": {"label": "outlook", "from": "2026-10-29", "to": "2026-11-04",
              "mean": 4.9, "range": [2.1, 9.0], "range_note": "..."},
  "attribution": "...", "terms": "..."
}

Home Assistant

1. REST-anturit

Lisää configuration.yaml-tiedostoon ja käynnistä Home Assistant uudelleen. Tarkista anturien nimet kohdasta Kehittäjätyökalut → Tilat; ne voivat poiketa esimerkistä.

# configuration.yaml
rest:
  - resource: https://sahkonhinta.xn--hlytyslista-l8a.fi/api/v1/ennuste.json
    scan_interval: 1800   # 30 min riittää: ennuste päivittyy klo 6, 15 ja 20
    sensor:
      - name: "Sähköennuste yö 3h alku"
        unique_id: sahkoennuste_yo_3h_alku
        device_class: timestamp
        value_template: "{{ value_json.next_night.start | default(none) }}"
      - name: "Sähköennuste yö 3h loppu"
        unique_id: sahkoennuste_yo_3h_loppu
        device_class: timestamp
        value_template: "{{ value_json.next_night.end | default(none) }}"
      - name: "Sähköennuste yö 3h hinta"
        unique_id: sahkoennuste_yo_3h_hinta
        unit_of_measurement: "c/kWh"
        value_template: "{{ value_json.next_night.mean | default(none) }}"
      - name: "Sähköennuste seuraava päivä"
        unique_id: sahkoennuste_seuraava_paiva
        unit_of_measurement: "c/kWh"
        value_template: "{{ value_json.days[0].mean | default(none) }}"
        json_attributes:
          - issue_time
          - stale
          - outlook

2. Mallipohjat: "halvin 3 h ensi yönä"

Binäärianturi on päällä halvimman 3 tunnin jakson ajan. Tekstianturi näyttää jakson kojelaudalla, esim. "03:00–06:00".

# configuration.yaml
template:
  - binary_sensor:
      - name: "Halvin 3h käynnissä"
        unique_id: sahkoennuste_halvin_3h_nyt
        state: >
          {% if has_value('sensor.sahkoennuste_yo_3h_alku')
                and has_value('sensor.sahkoennuste_yo_3h_loppu') %}
            {% set s = states('sensor.sahkoennuste_yo_3h_alku') | as_datetime %}
            {% set e = states('sensor.sahkoennuste_yo_3h_loppu') | as_datetime %}
            {{ s <= now() < e }}
          {% else %}
            false
          {% endif %}
  - sensor:
      - name: "Halvin 3h ensi yönä"
        unique_id: sahkoennuste_halvin_3h_teksti
        state: >
          {% if has_value('sensor.sahkoennuste_yo_3h_alku') %}
            {% set s = as_timestamp(states('sensor.sahkoennuste_yo_3h_alku')) %}
            {% set e = as_timestamp(states('sensor.sahkoennuste_yo_3h_loppu')) %}
            {{ s | timestamp_custom('%H:%M') }}–{{ e | timestamp_custom('%H:%M') }}
          {% else %}
            ei ennustetta
          {% endif %}

3. Automaatiot: auton lataus ja varaaja

Vaihda switch.auton_laturi ja switch.varaaja omiin laitteisiisi. Varalla-automaatio lämmittää varaajan klo 2–5, jos ennustetta ei saada.

# automations.yaml
- alias: "Auton lataus halvimmalla 3 h jaksolla"
  triggers:
    - trigger: state
      entity_id: binary_sensor.halvin_3h_kaynnissa
  actions:
    - action: >
        {{ 'switch.turn_on' if trigger.to_state.state == 'on' else 'switch.turn_off' }}
      target:
        entity_id: switch.auton_laturi   # vaihda omaksi

- alias: "Lämminvesivaraaja halvimmalla 3 h jaksolla"
  triggers:
    - trigger: state
      entity_id: binary_sensor.halvin_3h_kaynnissa
      to: "on"
  actions:
    - action: switch.turn_on
      target:
        entity_id: switch.varaaja       # vaihda omaksi
    - wait_for_trigger:
        - trigger: state
          entity_id: binary_sensor.halvin_3h_kaynnissa
          to: "off"
      timeout: "04:00:00"
    - action: switch.turn_off
      target:
        entity_id: switch.varaaja

- alias: "Varaaja: varalla klo 02-05 jos ennustetta ei ole"
  triggers:
    - trigger: time
      at: "02:00:00"
  conditions:
    - condition: template
      value_template: "{{ not has_value('sensor.sahkoennuste_yo_3h_alku') }}"
  actions:
    - action: switch.turn_on
      target:
        entity_id: switch.varaaja
    - delay: "03:00:00"
    - action: switch.turn_off
      target:
        entity_id: switch.varaaja

- alias: "Ilmoitus: halvin 3 h ensi yönä"
  triggers:
    - trigger: time
      at: "20:30:00"
  actions:
    - action: notify.notify
      data:
        message: >
          Halvin 3 h ensi yönä {{ states('sensor.halvin_3h_ensi_yona') }},
          noin {{ states('sensor.sahkoennuste_yo_3h_hinta') }} c/kWh (ennuste, tukkuhinta).

Homey

Homey Pro, HomeyScript-sovellus (Athomin ilmainen sovellus).

  1. Luo HomeyScriptissä uusi skripti, esim. halvin3h, ja liitä alla oleva koodi.
  2. Tee Flow: KUN "Joka 5. minuutti" (Päivämäärä ja aika) → JA HomeyScript "Suorita skripti" halvin3h → SITTEN laturi tai varaaja päälle. MUUTEN pois päältä.
  3. Skripti luo myös tagin "Sähkö halvin 3h" (esim. "03:00–06:00"), jota voi käyttää ilmoituksissa.
// HomeyScript: palauttaa true, kun ollaan halvimmalla 3 h jaksolla.
// Hakee syötteen enintään kerran 30 minuutissa ja muistaa sen.
const URL = 'https://sahkonhinta.xn--hlytyslista-l8a.fi/api/v1/ennuste.json';
let d = global.get('sahkoennuste');
if (!d || Date.now() - d.at > 30 * 60 * 1000) {
  const res = await fetch(URL);
  if (res.ok) {
    const j = await res.json();
    d = { at: Date.now(), n: j.next_night };
    global.set('sahkoennuste', d);
  }
}
const n = d && d.n;
if (!n) return false;
await tag('Sähkö halvin 3h', n.from + '–' + n.to);
const now = Date.now();
return now >= Date.parse(n.start) && now < Date.parse(n.end);

Ilman HomeyScriptiä: "HTTP request flow cards" -sovelluksen GET-kortilla voi hakea syötteen ja poimia kentät next_night.from ja next_night.to JSON-polulla. Korttien nimet vaihtelevat sovellusversion mukaan.

Käyttöehdot

In English

Free JSON feed of our Finnish day-ahead price forecasts: https://sahkonhinta.xn--hlytyslista-l8a.fi/api/v1/ennuste.json. Prices in c/kWh, wholesale, VAT 0 %, not your bill. Times are Europe/Helsinki with UTC offset. Updated 06:00, 15:00 and 20:00; poll at most every 30 minutes.

next_night is the cheapest 3-hour block in the nearest forecast night (00–07). days covers days 1–7 (mean, 50/80 % ranges); days 1–4 also carry cheapest 3 h/6 h blocks and hourly values. outlook is days 8–14 as one week level with a range, no daily values. The feed never contains exchange (official) prices; once tomorrow's prices are published (about 14:00) the feed moves on to the next day. Check stale before acting. The Home Assistant and Homey examples above work as-is; entity names are Finnish. Credit "Sähkönhinta"; no warranty.

Mitä luvut ovat

Ennuste. Toteutuneet hinnat voivat poiketa. Pörssisähkön tukkuhinta, ei sähkölaskusi hinta. Laskuun tulevat lisäksi myyjän marginaali, sähkövero ja siirto. Miinushintoihin ei lisätä ALV:tä.

Kuinka pitkälle

Päivät 1–4: tuntihinnat ja halvimmat ajat. Päivät 5–7: päivän keskihinta ja halvin päivä – tuntihinnat tulevat 4 päivää ennen. Viikko 2: viikon keskihinta.

Lähteet

Lähteet: Nord Pool, ENTSO-E. Päivitys klo 6, 15 ja 20. Kellonajat Suomen aikaa. Tämän päivän ja huomisen viralliset hinnat ovat etusivulla.