Open lukasde opened 8 months ago
Ano, chápete to správně. Není ale těžké vyrobit senzor který najde blok X nejlevnějších hodin.
Řeším pro sebe výpočet se zapojením distribučních cen a HDO času. To bude trochu složitější. Pokud z toho něco bude pošlu sem výsledek.
Me to furt nejak nedochazi:( Muzu poprosit o vetsi nakopnuti, jak najit napr. 5 nejlevnejsich hodin v intervalu 0:00 - 12:00? Diky moc
Tohle jsem řešil nedávno, zde je verze pro 2 nejlevnější hodiny v intervalu.
Mělo by to jít snadno upravit pro libovolný počet hodin úpravou této podmínky {% if min.min_hours|length < 2 %}
- sensor:
- name: "two cheapest hours in interval"
unique_id: two_cheapest_hours_in_interval
state: >
{# Define your intervals here as tuples (hour starting the interval, hour ending the interval (excluded)) #}
{% set intervals = [
(0, 8),
(8, 18),
(18, 24),
] %}
{# We need to use namespace so we can write into it in the inner cycle #}
{% set min = namespace(min_hours=[], dt=None, cheapest_hours=[]) %}
{% set cheapest_hours = [] %}
{% set min_hours = [] %}
{% for interval in intervals %}
{# Initialize a list to store the two cheapest hours for the current interval #}
{% set min.min_hours = [] %}
{# Go through all the hours in the interval (end excluded) and find the two hours with the lowest prices #}
{% for i in range(interval[0], interval[1]) %}
{# Get datetime of the current hour in the current interval #}
{% set hour_dt = now().replace(hour=i, minute=0, second=0, microsecond=0) %}
{# Get value for that hour #}
{% set value = states.sensor.current_spot_electricity_hour_order.attributes.get(hour_dt.isoformat()) %}
{# Skip if not found #}
{% if value is not defined %}
{% break %}
{% endif %}
{# value is tuple (order, price), we'll use the price #}
{% set price = value[1] %}
{# Add the hour to the list of two cheapest hours if it has a lower price #}
{% if min.min_hours|length < 2 %}
{% set min.min_hours = min.min_hours + [(hour_dt.hour, price)] %}
{% else %}
{% set min.min_hours = min.min_hours|sort(attribute=1) %}
{% if price < min.min_hours[1][1] %}
{% set min.min_hours = min.min_hours[:1] + [(hour_dt.hour, price)] %}
{% endif %}
{% endif %}
{% endfor %}
{# Store two cheapest hours in the overall list #}
{% set min.cheapest_hours = min.cheapest_hours + min.min_hours %}
{% endfor %}
{{ now().hour in min.cheapest_hours | map(attribute=0) }}
@rnovacek je tu už několik vytvořených issue na téma hledání jedné nebo více hodin v nějakém intervalu. Na kratší intervaly, které nejdou přes půlnoc se dá většinou použít ta vzorová šablona pro jednu hodinu, případně pro víc hodin v komentáři nahoře. Bohužel to má nevýhodu v tom, že to nejde používat moc dynamicky (např, v automatizaci, kde si spočítám kolik hodin mi bude trvat nabití auta, nebo nahřátí bojleru a hledám nejlevnější tak velký interval) a také to nejde používat přes půlnoc, kdy definice intervalu nefunguje.
Nešlo by vygenerovat něco jako current_spot_electricity_hour_order
pro daný interval (typicky noc)?
Ja mám v plánu pár vylepšení, ale nemám na to čas ☹️ Snad v příštím týdnu. Na některé věci jde udělat šablonu. Na něco bude potřeba změna kódu.
Dobrý den,
chtěl bych se zeptat, zda můžu nějak zjistit X nejlevnějších hodin v zadaném intervalu. Pokud správně chápu "Find cheapest hours in selected interval", tak to najde vždy jednu nejlevnější hodinu, ale já bych potřeboval najít např. 3 nebo 4 nejlevnější hodiny v intervalu 10-18hod.
Díky moc, Lukáš