Skip to content

Instantly share code, notes, and snippets.

@jaakla
Last active October 10, 2023 05:43
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaakla/b1a9acc1636add863248a071d2a830ad to your computer and use it in GitHub Desktop.
Save jaakla/b1a9acc1636add863248a071d2a830ad to your computer and use it in GitHub Desktop.
home assistant configuration hinnakontrolliks
# kolme seadme kõige odavamate tundide otsimiseks sensorid - maja küte, sooja vee küte ja BEV laadimine
# 1. eeldused:
# - Installi Nordpool HACS extension - hinnainfo
# - EV auto integratsioon (Hyundai Bluelink minul) - annab kui palju hetkel akus ruumi. Kui seda pole, võib ka panna staatilise tundide arvu (nt 4)
# - välistemperatuuri sensor kütte jaoks - "keskminetemp" saadud mul kasutades 'average' HACS extensioni abil mitmest lokaalsest sensorist. Aga võib ka asukohapõhist ilmateadet kasutada.
# - boileri küttevajadus 8 tundi ööpäevas on leitud katsetusega - siis ei jahtu alla 35 kraadi väljas olevatel tundidel
# - dashboardis input_number.ev_laadimine_valmis - mis kellaks peab EV laadimine valmis olema, tavaliselt mul "9" (öiseid tunde võtab), aga kui järgmine päev on ka odav ja on aega oodata, võib optimaalsem panna olla nt 14.
# 2. lisa allolevad sensorid configuration.yaml faili, sensorite nimed võivad vajada kohandamist
# - nipp "developer tools, template" on väga abiks templiitide kontrolliks ja testimiseks
# 3. automation teha UIs - mis lülitab vastavate seadmete lüliteid "taimer" binary sensori muutuse pealt sisse ja välja
# - seadmed sõltuvad sellest, kuidas mida täpselt lülitad.
# - ilmselt on tore dashboardi panna ka hinnagraafik, seadmete staatused
# 4. boonusülesanne : arvuta välja kokkuhoitud sendid ja näita graafiku või numbrina. Anna siia kommentaariks kuidas õnnestus.
- sensor:
# 1. mitu tundi elektrit on vaja?
- name: heat request
# 1.1. küte - sõltuvalt välitemperatuurist
unique_id: heatrequest
state: >-
{% set req_hours = (states('sensor.keskminetemp')|int - 6) * -0.5 + 6 %}
{% if (req_hours > 24) %}
req_hours=24
{% elif (req_hours < 1) %}
req_hours=1
{% endif %}
{{ req_hours|int }}
unit_of_measurement: "H"
# 1.2. sooja vee tank - alati 8 tundi ööpäevas, ühtlane tarbimine
- name: tank request
unique_id: tankrequest
state: 8
unit_of_measurement: "H"
# 1.3. elektriauto - vajadus vastavalt auto antud laadimisaja nõudele (minutites)
- name: ev request
unique_id: evrequest
state: {{ states('sensor.santa_fe_estimated_charge_duration')|int/60 }}
unit_of_measurement: "H"
# 2. sensor - kas on küte sees või väljas - sellele saab seada juba automation-i
- binary_sensor:
- name: pumba taimer
unique_id: pumba taimer
state: >-
{% set l=state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today')|sort(attribute='value') %}
{% set t = now() %}
{% for i in range(states('sensor.heatrequest')|int) %}
{% if (t >= l[i].start and t <= l[i].end) %}
{{ true }}
{% endif %}
{% endfor %}
- name: tank taimer
unique_id: tank taimer
state: >-
{% set l=state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today')|sort(attribute='value') %}
{% set t = now() %}
{% for i in range(states('sensor.tank_request')|int) %}
{% if (t >= l[i].start and t <= l[i].end) %}
{{ true }}
{% endif %}
{% endfor %}
- name: ev taimer
unique_id: ev taimer
state: >-
{% set l_today = state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today') %}
{% set l_tomorrow = state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_tomorrow') %}
{% set t = now() %}
{% set until_h = states('input_number.ev_laadimine_valmis')|int %}
{% set l_combined = l_today[t.hour:] + l_tomorrow[:until_h] %}
{% set l_sorted = l_combined|sort(attribute='value') %}
{% for i in range(states('sensor.ev_request')|int) %}
{% if (t >= l_sorted[i].start and t <= l_sorted[i].end) %}
{{ true }}
{% endif %}
{% endfor %}
# 3. informatiivne - kui odava hinna pealt lülitatakse seade sisse, hea graafikus näidata
- sensor:
- name: odav hind
unique_id: odavhind
state: >-
{% set l=state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today')|sort(attribute='value') %}
{{ l[states('sensor.heatrequest')|int].value }}
unit_of_measurement: "EUR/MWh"
- name: odav tank hind
unique_id: odavhind_vesi
state: >-
{% set l=state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today')|sort(attribute='value') %}
{{ l[states('sensor.tank_request')|int].value }}
unit_of_measurement: "EUR/MWh"
- name: odav ev hind
unique_id: odavhind_ev
state: >-
{% set l_today = state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_today') %}
{% set l_tomorrow = state_attr('sensor.nordpool_mwh_ee_eur_3_10_02', 'raw_tomorrow') %}
{% set t = now() %}
{% set until_h = states('input_number.ev_laadimine_valmis')|int %}
{% set hours = states('sensor.santa_fe_estimated_charge_duration')|int/60 %}
{% set l_combined = l_today[t.hour:] + l_tomorrow[:until_h] %}
{% set l_sorted = l_combined|sort(attribute='value') %}
{{ l_sorted[hours|int].value }}
unit_of_measurement: "EUR/MWh"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment