Miten latauslogiikka toimii?
Automaatio lukee talon verkkoon/verkosta kulkevaa tehoa, sähkön hintaa ja käyttäjän valitsemaa lataustapaa. Lataus käynnistetään vain silloin, kun valitun tilan ehdot täyttyvät.
| Tila | Käynnistyy kun... | Pysähtyy kun... |
|---|---|---|
| Pelkkä aurinko | Verkkoon vienti on vähintään asetetun rajan verran, esimerkiksi -3400 W. | Talo alkaa ostaa sähköä verkosta yli 300 W 10 minuutin ajan. |
| Aurinko ja halpa sähkö | Verkkoon vienti ylittää aurinko + halpa sähkö -rajan ja hinta on alle halvan sähkön rajan. | Verkosta ostetaan yli sammutusrajan tai hinta ei enää ole halpa ja talo ostaa sähköä. |
| Halpa sähkö sallittu | Hinta on alle halvan sähkön rajan tai aurinkoylijäämää on paljon. | Hinta nousee yli rajan ja talo ostaa sähköä verkosta. |
sensor.sauna_grid_power on miinuksella silloin kun sähköä menee verkkoon päin.
Jos siun mittari toimii toisinpäin, vertailumerkit pitää kääntää.
Tarvittavat osat ja entityt
Tässä ohjeessa käytetty kokoonpano:
Tässä ohjeessa käytetyt entityt
| Asia | Entity ID |
|---|---|
| Verkosta ostettu / verkkoon myyty teho | sensor.sauna_grid_power |
| Sähkön hinta | sensor.nordpool_kwh_fi_eur_3_10_0255 |
| Latauksen ohjaus | switch.charger_charge_control |
| Latausteho | sensor.charger_power_active_import |
| Tämän session energia | sensor.charger_energy_session |
1. Helperit YAMLilla
Helperit voi tehdä myös Home Assistantin käyttöliittymästä, mutta tässä ne tehdään YAMLilla, jotta kokonaisuus on helpompi kopioida ja dokumentoida.
configuration.yaml-tiedostoon include-rivit.
Jos siulla on nämä jo ennestään, älä lisää samoja otsikoita kahteen kertaan.
input_booleans.yaml, input_numbers.yaml ja input_selects.yaml.
# configuration.yaml
default_config:
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
template: !include templates.yaml
input_boolean: !include input_booleans.yaml
input_number: !include input_numbers.yaml
input_select: !include input_selects.yaml
# input_selects.yaml
ioniq_lataustapa:
name: Ioniq lataustapa
options:
- Pelkkä aurinko
- Aurinko ja halpa sähkö
- Halpa sähkö sallittu
initial: Aurinko ja halpa sähkö
icon: mdi:car-electric
# input_booleans.yaml
ioniq_lataus_override:
name: Ioniq lataus pakolla päälle
icon: mdi:flash
ioniq_lataus_automatiikka:
name: Ioniq latausautomatiikka käytössä
icon: mdi:auto-mode
# input_numbers.yaml
ioniq_halpa_sahko_raja:
name: Ioniq halvan sähkön raja
min: 0
max: 30
step: 0.1
unit_of_measurement: "c/kWh"
icon: mdi:currency-eur
mode: box
initial: 5
ioniq_pelkka_aurinko_vientiraja:
name: Ioniq pelkän auringon vientiraja
min: 500
max: 6000
step: 100
unit_of_measurement: "W"
icon: mdi:solar-power
mode: box
initial: 3400
ioniq_aurinko_halpa_vientiraja:
name: Ioniq aurinko + halpa sähkö vientiraja
min: 0
max: 6000
step: 100
unit_of_measurement: "W"
icon: mdi:transmission-tower-export
mode: box
initial: 1000
ioniq_sammutus_ostoraja:
name: Ioniq sammutuksen ostoraja
min: 0
max: 6000
step: 100
unit_of_measurement: "W"
icon: mdi:transmission-tower-import
mode: box
initial: 2500
2. Automaatiot
Nämä lisätään automations.yaml-tiedoston loppuun. Jos käytät Home Assistantin automaatioeditoria,
voi olla selkeintä tehdä automaatiot ensin UI:ssa ja muokata sen jälkeen YAML-näkymässä.
# automations.yaml
# Lisää nämä automations.yaml-tiedoston loppuun.
# Älä lisää erillistä automation:-otsikkoa, jos configuration.yaml sisältää rivin:
# automation: !include automations.yaml
- id: ioniq_lataus_kaynnistys
alias: Ioniq lataus - käynnistys
description: Käynnistää Ioniqin latauksen valitun lataustavan mukaan.
mode: single
trigger:
- platform: state
entity_id: input_boolean.ioniq_lataus_override
to: "on"
- platform: template
value_template: >
{% set grid_w = states('sensor.sauna_grid_power') | float(0) %}
{# Nordpool voi olla joko €/kWh tai c/kWh. Muutetaan tarvittaessa senteiksi. #}
{% set price_raw = states('sensor.nordpool_kwh_fi_eur_3_10_0255') | float(999) %}
{% set price_c = price_raw * 100 if price_raw < 1 else price_raw %}
{% set mode_now = states('input_select.ioniq_lataustapa') %}
{% set halpa_raja = states('input_number.ioniq_halpa_sahko_raja') | float(5) %}
{% set aurinko_raja = states('input_number.ioniq_pelkka_aurinko_vientiraja') | float(3400) %}
{% set aurinko_halpa_raja = states('input_number.ioniq_aurinko_halpa_vientiraja') | float(1000) %}
{% set charger_off = is_state('switch.charger_charge_control', 'off') %}
{% set automatiikka_on = is_state('input_boolean.ioniq_lataus_automatiikka', 'on') %}
{% set override_on = is_state('input_boolean.ioniq_lataus_override', 'on') %}
{{
charger_off and (
override_on
or
(
automatiikka_on and (
(
mode_now == 'Pelkkä aurinko'
and grid_w <= (aurinko_raja * -1)
)
or
(
mode_now == 'Aurinko ja halpa sähkö'
and grid_w <= (aurinko_halpa_raja * -1)
and price_c <= halpa_raja
)
or
(
mode_now == 'Halpa sähkö sallittu'
and (
price_c <= halpa_raja
or grid_w <= (aurinko_raja * -1)
)
)
)
)
)
}}
for: "00:05:00"
condition:
- condition: state
entity_id: switch.charger_charge_control
state: "off"
action:
- service: switch.turn_on
target:
entity_id: switch.charger_charge_control
- service: logbook.log
data:
name: Ioniq lataus
message: Lataus käynnistettiin automaattisesti valitun lataustavan perusteella.
entity_id: switch.charger_charge_control
- id: ioniq_lataus_pysaytys
alias: Ioniq lataus - pysäytys
description: >
Pysäyttää Ioniqin latauksen, jos valitun lataustavan ehdot eivät enää täyty.
Override estää automaattisen pysäytyksen.
mode: restart
trigger:
- platform: template
value_template: >
{% set grid_w = states('sensor.sauna_grid_power') | float(0) %}
{# Nordpool voi olla joko €/kWh tai c/kWh. Muutetaan tarvittaessa senteiksi. #}
{% set price_raw = states('sensor.nordpool_kwh_fi_eur_3_10_0255') | float(999) %}
{% set price_c = price_raw * 100 if price_raw < 1 else price_raw %}
{% set mode_now = states('input_select.ioniq_lataustapa') %}
{% set halpa_raja = states('input_number.ioniq_halpa_sahko_raja') | float(5) %}
{% set sammutus_raja = states('input_number.ioniq_sammutus_ostoraja') | float(2500) %}
{% set charger_on = is_state('switch.charger_charge_control', 'on') %}
{% set automatiikka_on = is_state('input_boolean.ioniq_lataus_automatiikka', 'on') %}
{% set override_on = is_state('input_boolean.ioniq_lataus_override', 'on') %}
{{
charger_on
and automatiikka_on
and not override_on
and (
(
mode_now == 'Pelkkä aurinko'
and grid_w > 300
)
or
(
mode_now == 'Aurinko ja halpa sähkö'
and (
grid_w > sammutus_raja
or
(
price_c > halpa_raja
and grid_w > 300
)
)
)
or
(
mode_now == 'Halpa sähkö sallittu'
and price_c > halpa_raja
and grid_w > 300
)
)
}}
for: "00:10:00"
condition:
- condition: state
entity_id: switch.charger_charge_control
state: "on"
- condition: state
entity_id: input_boolean.ioniq_lataus_override
state: "off"
action:
- service: switch.turn_off
target:
entity_id: switch.charger_charge_control
- service: logbook.log
data:
name: Ioniq lataus
message: Lataus pysäytettiin automaattisesti, koska valitun lataustavan ehdot eivät enää täyttyneet.
entity_id: switch.charger_charge_control
- id: ioniq_lataus_automatiikka_pois
alias: Ioniq lataus - automatiikka pois
description: >
Pysäyttää latauksen heti, kun Ioniqin latausautomatiikka kytketään pois päältä.
Jos override on päällä, latausta ei pysäytetä.
mode: single
trigger:
- platform: state
entity_id: input_boolean.ioniq_lataus_automatiikka
to: "off"
condition:
- condition: state
entity_id: switch.charger_charge_control
state: "on"
- condition: state
entity_id: input_boolean.ioniq_lataus_override
state: "off"
action:
- service: switch.turn_off
target:
entity_id: switch.charger_charge_control
- service: logbook.log
data:
name: Ioniq lataus
message: Lataus pysäytettiin, koska latausautomatiikka kytkettiin pois päältä.
entity_id: switch.charger_charge_control
3. Dashboard
Tämä on kokonainen Home Assistant -näkymä nimellä Auton lataus. Se on jaettu videota varten siististi osiin: aurinkolatauksen ohjaus, tilanne, rajat, laturin tiedot, latausvirta, energia, historia ja diagnostiikka.
views:
- title: Auton lataus
path: auton-lataus
icon: mdi:ev-station
type: sections
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: Aurinkolataus - ohjaus
heading_style: title
- type: tile
entity: input_boolean.ioniq_lataus_automatiikka
name: Automatiikka käytössä
icon: mdi:auto-mode
color: green
features:
- type: toggle
- type: tile
entity: input_select.ioniq_lataustapa
name: Lataustapa
icon: mdi:car-electric
color: blue
- type: tile
entity: input_boolean.ioniq_lataus_override
name: Pakko päällä / override
icon: mdi:flash
color: red
features:
- type: toggle
- type: tile
entity: switch.charger_charge_control
name: Latauksen ohjaus
icon: mdi:ev-plug-type2
color: amber
features:
- type: toggle
- type: grid
cards:
- type: heading
heading: Aurinkolataus - tilanne
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.sauna_grid_power
name: Verkosta ostettu / myyty
icon: mdi:transmission-tower
color: amber
- type: tile
entity: sensor.nordpool_kwh_fi_eur_3_10_0255
name: Sähkön hinta
icon: mdi:currency-eur
color: blue
- type: tile
entity: sensor.charger_power_active_import
name: Latausteho
icon: mdi:flash
color: amber
- type: tile
entity: sensor.charger_energy_session
name: Tämän session energia
icon: mdi:battery-charging
color: blue
- type: grid
cards:
- type: heading
heading: Aurinkolataus - rajat
heading_style: title
- type: entities
title: Säädettävät rajat
show_header_toggle: false
entities:
- entity: input_number.ioniq_halpa_sahko_raja
name: Halvan sähkön raja
- entity: input_number.ioniq_pelkka_aurinko_vientiraja
name: Pelkän auringon vientiraja
- entity: input_number.ioniq_aurinko_halpa_vientiraja
name: Aurinko + halpa sähkö vientiraja
- entity: input_number.ioniq_sammutus_ostoraja
name: Sammutuksen ostoraja
- type: grid
cards:
- type: heading
heading: Latauksen tilanne
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.charger_status
name: Laturin tila
icon: mdi:ev-station
color: green
- type: tile
entity: sensor.charger_status_connector
name: Pistokkeen tila
icon: mdi:power-plug
color: blue
- type: tile
entity: sensor.charger_energy_session
name: Tämän session energia
icon: mdi:battery-charging
color: blue
- type: tile
entity: sensor.charger_time_session
name: Session aika
icon: mdi:timer-outline
color: grey
- type: grid
cards:
- type: heading
heading: Ratio-laturi
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: switch.charger_availability
name: Laturi käytettävissä
icon: mdi:check-network
color: green
features:
- type: toggle
- type: tile
entity: switch.charger_charge_control
name: Latauksen ohjaus
icon: mdi:ev-plug-type2
color: amber
features:
- type: toggle
- type: tile
entity: sensor.charger_status
name: Laturin tila
icon: mdi:ev-station
color: green
- type: tile
entity: sensor.charger_status_connector
name: Pistokkeen tila
icon: mdi:power-plug
color: blue
- type: grid
cards:
- type: heading
heading: Latausvirta
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: number.charger_maximum_current
name: Maksimivirta
icon: mdi:current-ac
color: amber
features:
- type: numeric-input
- type: tile
entity: sensor.charger_current_offered
name: Tarjottu virta
icon: mdi:current-ac
color: amber
- type: tile
entity: sensor.charger_current_import
name: Virta autoon
icon: mdi:current-ac
color: blue
- type: tile
entity: sensor.charger_voltage
name: Jännite
icon: mdi:sine-wave
color: green
- type: grid
cards:
- type: heading
heading: Teho ja energia
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.charger_power_active_import
name: Latausteho
icon: mdi:flash
color: amber
- type: tile
entity: sensor.charger_energy_session
name: Tämän session energia
icon: mdi:battery-charging
color: blue
- type: tile
entity: sensor.charger_energy_active_import_register
name: OCPP kokonaisenergia
icon: mdi:counter
color: grey
- type: tile
entity: sensor.charger_soc
name: Akun varaustaso
icon: mdi:battery
color: green
- type: grid
cards:
- type: heading
heading: Lataushistoria
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.ioniq_lataus_paiva
name: Tänään ladattu
icon: mdi:ev-station
color: blue
- type: tile
entity: sensor.ioniq_lataus_kuukausi
name: Tässä kuussa
icon: mdi:calendar-month
color: green
- type: tile
entity: sensor.ioniq_lataus_vuosi
name: Tänä vuonna
icon: mdi:calendar
color: amber
- type: tile
entity: sensor.charger_energy_active_import_register
name: OCPP kokonaisenergia
icon: mdi:counter
color: grey
- type: grid
cards:
- type: heading
heading: Auto / sessio
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.charger_soc
name: Akun varaustaso
icon: mdi:battery
color: green
- type: tile
entity: sensor.charger_time_session
name: Session aika
icon: mdi:timer-outline
color: blue
- type: tile
entity: sensor.charger_transaction_id
name: Transaction ID
icon: mdi:identifier
color: grey
- type: tile
entity: sensor.charger_stop_reason
name: Pysäytyksen syy
icon: mdi:stop-circle-outline
color: red
- type: grid
cards:
- type: heading
heading: Manuaaliohjaus
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: button
entity: button.charger_unlock
name: Avaa lukitus
icon: mdi:lock-open
tap_action:
action: toggle
- type: button
entity: button.charger_reset
name: Käynnistä laturi uudelleen
icon: mdi:restart
tap_action:
action: toggle
- type: grid
cards:
- type: heading
heading: Yhteys ja diagnostiikka
heading_style: title
- square: false
type: grid
columns: 2
cards:
- type: tile
entity: sensor.charger_heartbeat
name: Heartbeat
icon: mdi:heart-pulse
color: red
- type: tile
entity: sensor.charger_latency_ping
name: Ping
icon: mdi:lan-connect
color: blue
- type: tile
entity: sensor.charger_latency_pong
name: Pong
icon: mdi:lan-check
color: green
- type: tile
entity: sensor.charger_reconnects
name: Uudelleenyhdistykset
icon: mdi:connection
color: amber
- type: tile
entity: sensor.charger_error_code
name: Virhekoodi
icon: mdi:alert-circle-outline
color: red
- type: tile
entity: sensor.charger_version_firmware
name: Firmware
icon: mdi:chip
color: grey
4. Käyttöönotto ja testaus
input_select.ioniq_lataustapa,
input_boolean.ioniq_lataus_override,
input_boolean.ioniq_lataus_automatiikka ja input_number-rajat.
switch.charger_charge_control todella käynnistää ja pysäyttää latauksen.
Testaa ensin käsin ennen automaatiota.
sensor.sauna_grid_power menee miinukselle silloin, kun sähköä viedään verkkoon.
5. Vianhaku
Lataus ei käynnisty
Tarkista ensin nämä:
- Onko Automatiikka käytössä päällä?
- Onko valittu lataustapa sellainen, jonka ehdot oikeasti täyttyvät?
- Onko
switch.charger_charge_controlvarmasti pois päältä ennen käynnistystä? - Näyttääkö
sensor.sauna_grid_poweroikeaa suuntaa? Miinus tarkoittaa tässä ohjeessa verkkoon vientiä. - Onko sähkön hinta oikeassa yksikössä? Automaatio yrittää huomioida sekä €/kWh että c/kWh.
Lataus ei pysähdy
Tarkista nämä:
- Onko override päällä? Jos on, automaattinen pysäytys ei sammuta latausta.
- Onko valitun lataustavan pysäytysehto täyttynyt vähintään 10 minuutin ajan?
- Onko
switch.charger_charge_controlentity oikea?
Latausvirran säätö ei toimi
Tässä versiossa lataus tehdään päälle/pois-logiikalla. Vaikka Home Assistantissa näkyisi number.charger_maximum_current,
auto ja laturi eivät välttämättä tottele muutosta halutulla tavalla.
Jos virransäätö saadaan myöhemmin toimimaan luotettavasti, tästä voi tehdä paremman version, jossa Home Assistant säätää latausta portaittain aurinkoylijäämän mukaan.
Entityt ovat eri nimisiä
Vaihda YAML-koodeihin omat entity ID:t. Tärkeimmät vaihdettavat ovat:
sensor.sauna_grid_power,
sensor.nordpool_kwh_fi_eur_3_10_0255 ja
switch.charger_charge_control.
Päivitykset ja jatkoideat
Tämä on ensimmäinen toimiva versio. Jatkossa tähän voisi lisätä:
- portaattoman tai portaittaisen virransäädön, jos laturi ja auto saadaan tottelemaan sitä luotettavasti,
- auton akun varaustasoon perustuvan logiikan, jos SOC saadaan luotettavasti Home Assistantiin,
- lähtöaika-helperin, jolla auto ladataan varmasti ennen tiettyä kellonaikaa,
- ilmoituksen puhelimeen, kun lataus käynnistyy tai pysähtyy automaattisesti,
- erillisen “talvi/kevyt/kesä”-profiilin eri raja-arvoille.