rnovacek / homeassistant_cz_energy_spot_prices

Home Assistant integration that provides current Czech electricity spot prices based on OTE.
Apache License 2.0
75 stars 17 forks source link

Vzorová automatizace. #10

Open DavidNetron opened 1 year ago

DavidNetron commented 1 year ago

Dobrý den. Integrace je super. Mam jednoduché zadání. Potřebuji sepnout rele integrovane v HA při nejnižší ceně . . Pokouším se o to už nějakou dobu, ale jsem začátečník. Mohl bych poprosit o nějaký jednoduchý vzor takové automatizace ? Tuším že se to nastaví skrze známky 1-24 jako atribut, ale stále mě to nechodí. Děkuji velice za odpověď

foxzqw commented 1 year ago

To řeší hodnota sensor.current_spot_electricity_hour_order 1 je nejlevnější atd.

Tohle by mělo fungovat:

alias: sepnout rele integrovane v HA při nejnižší ceně
trigger:
  - platform: state
    entity_id:
      - sensor.current_spot_electricity_hour_order
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.current_spot_electricity_hour_order
        below: 2
    then:
      - type: turn_on
        entity_id: #relé, které chceš zapnout
    else:
      - type: turn_off
        entity_id: #zajistí vypnutí pokud neplatí podmínka výše
    enabled: true
mode: single
Rotif commented 1 year ago

Dobrý den, díky za super integraci. Mám dotaz k automatizaci: pro začátek bych chtěl vybíjet baterii do sítě ráno, kdy je špička většinou ve všední den v 8 nebo 9 hodin. Dá se nějak vytvořit senzor current_spot_electricity_hour_order ale jen pro dopoledne? Tím bych vybral nejvyšší cenu dopoledne. Později bych využil to samé pro nabíjení a podobný senzor ale pro odpoledne. Tím bych vybral nenižší cenu odpoledne/večer. Děkuji moc

rnovacek commented 1 year ago

@Rotif Tady je příklad, jak najít nejlevnější hodinu v zadaném intervalu, to by Vám mohlo pomoct:

https://github.com/rnovacek/homeassistant_cz_energy_spot_prices#find-cheapest-hours-in-selected-interval

Rotif commented 1 year ago

Díky za okamžitou reakci. Měl jsem dočíst popis až do konce, nicméně vyzkouším.

Rotif commented 1 year ago

Senzory chodí bezvadně. Jde něco podobného udělat po 13:00 i pro příští den? Dík

Rotif commented 1 year ago

Nahradil jsem {# Get value for that hour #} {% set value = states.sensor.current_spot_electricity_hour_order.attributes.get(hour_dt.isoformat()) %} tímto {# Get value for that hour #} {% set value = states.sensor.tomorrow_spot_electricity_hour_order.attributes.get(hour_dt.isoformat()) %} ale nechodí mi to. Senzor sensor.tomorrow_spot_electricity_hour_order není od 0:00 do 13:00 k dspozici a od 13:00 do 24:00 má hodnotu neznámé.

rnovacek commented 1 year ago

@Rotif

Takhle nějak by to asi šlo:

{# Define your intervals here as tuples (hour starting the interval, hour ending the interval (excluded)) #}
{% set intervals = [
  (0, 8),
  (8, 16),
  (16, 24),
] %}

{# We need to use namespace so we can write into it in inner cycle #}
{% set min = namespace(price=None, dt=None, cheapest_hours=[]) %}
{% set cheapest_hours = [] %}

{% for interval in intervals %}
  {# Reset min price from previous runs #}
  {% set min.price = None %}

  {# Go through all the hours in the interval (end excluded) and find the hour with lowest price #}
  {% for i in range(interval[0], interval[1]) %}
     {# Get datetime of current hour in current interval #}
     {% set hour_dt = (now() + timedelta(hours=24)).replace(hour=i, minute=0, second=0, microsecond=0) %}

     {# Get value for that hour #}
     {% set value = states.sensor.tomorrow_spot_electricity_hour_order.attributes.get(hour_dt.isoformat()) %}

     {# value is tuple (order, price), we'll use the price #}
     {% set price = value[1] %}

     {# Min price is not set or is higher than price of current hour => store the min price and hour #}
     {% if min.price is none or price < min.price %}
        {% set min.price = price %}
        {% set min.dt = hour_dt %}
     {% endif %}
  {% endfor %}

  {# Store cheapest hour in current interval #}
  {% set min.cheapest_hours = min.cheapest_hours + [min.dt.hour] %}
{% endfor %}

{# use this to get the cheapest hours #}
{{ min.cheapest_hours }}

Vypisuje to, která hodina v zadaném intervalu je nejlevnější. sensor.tomorrow_spot_electricity_hour_order má sice neznámou hodnotu, ale atributy fungují (když jsou k dispozici).

Rotif commented 1 year ago

Dík, chodí