Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Strømpriser


Anbefalte innlegg

Nå ser det ut som om entso-e integrasjonen fungerer bedre og prices attributten endres ikke ved midnatt. Så da har jeg endret mine mal-sensorer som er på i de billigste timene til det som er vist nedenfor. Nye priser kommer vanligvis klokken 14:00 så mine mal-sensorer ignorerer prisene som allerede er blitt gamle og tar kun hensyn til de fremtidige prisene.

 

    - unique_id: billigste_timer_1_2
      name: billigste_timer_1_2
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:]|sort(attribute='price') %}
        {% set t = now() %}
        {{ (t >= as_datetime(l[0].time) and t <= as_datetime(l[0].time) + timedelta(hours = 1))
          or (t >= as_datetime(l[1].time) and t <= as_datetime(l[1].time) + timedelta(hours = 1)) }}
    - unique_id: billigste_timer_1_3
      name: billigste_timer_1_3
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:]|sort(attribute='price') %}
        {% set t = now() %}
        {{ (t >= as_datetime(l[0].time) and t <= as_datetime(l[0].time) + timedelta(hours = 1))
          or (t >= as_datetime(l[1].time) and t <= as_datetime(l[1].time) + timedelta(hours = 1))
          or (t >= as_datetime(l[2].time) and t <= as_datetime(l[2].time) + timedelta(hours = 1)) }}

 

  • Like 1
Lenke til kommentar
Del på andre sider

Med nordpool integrasjonen kan en ofte oppleve at dagens billigste timer er mellom 23:00 og 0:00 samtidig som prisen fortsetter å falle utover natten. Da er det dumt å varme vannet mellom 23:00 og midnatt. Selvfølgelig kunne en også sjekke listen med morgendagens priser også, men da startet utfordringene. Nordpool integrasjonen sletter "dagens" priser ved midnatt og det som var morgendagens priser blir nye dagens priser. Det gjør det komplett umulig å lage mal-sensorer som vist ovenfor fordi historikken til prisene blir borte. Hvordan skal en finne de 2 billigste timene i løpet av natten når en ikke vet noe om det som skjedde før midnatt?

Med entso-e integrasjonen er det nå blitt lett. Med nordpool-integrasjonen må en ty til automasjoner eller skripting sammen med hjelpe-sensorer.

Lenke til kommentar
Del på andre sider

Takk, da var jeg på rett spor med mine også.

Har du innspill på hvordan man kan plukke fra bestemte tidsrom? Jeg har brukt denne med nordpool for å unngå å koble inn store laster i perioder hvor forbruket vanligvis er høyt, selv om de timene skulle være billigere:
 

    - platform: template
      sensors:
        billigste_6_timer_offpeak:
          value_template: >-
            {% set l =  
            (state_attr('sensor.nordpool', 'raw_today')
              |selectattr('start', '<', now().replace(hour=6,minute=0,second=0,microsecond=0))
              |list
              + state_attr('sensor.', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=16,minute=0,second=0,microsecond=0))
              | list
              + state_attr('sensor.', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=21,minute=0,second=0,microsecond=0))
              | list)
              | sort(attribute='value')
                %}
              {{ (now() >= l[0].start and now() <= l[0].end)
              or (now() >= l[1].start and now() <= l[1].end)
              or (now() >= l[2].start and now() <= l[2].end)
              or (now() >= l[3].start and now() <= l[3].end)
              or (now() >= l[4].start and now() <= l[4].end)
              or (now() >= l[5].start and now() <= l[5].end) }}
Endret av thoralex
Lenke til kommentar
Del på andre sider

thoralex skrev (6 minutter siden):

Har du innspill på hvordan man kan plukke fra bestemte tidsrom?



Disse to gjør stort sett det samme


 

{{state_attr('sensor.nordpool', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=16,minute=0,second=0,microsecond=0))
              | list }}

{{state_attr('sensor.nordpool', 'raw_today')[9:16]}}

 

Lenke til kommentar
Del på andre sider

Glemte kanskje å presisere at jeg prøver å få det til basert på entso-e. Men jeg tror jeg fikk det til nå, må bruke bare 6 og ikke 06 i timene.
 

    - platform: template
      sensors:
        billigste_6_timer_entsoe_offpeak:
          value_template: >-
            {% set l=
            state_attr('sensor.entsoe', 'prices')[21:6]
            + state_attr('sensor.entsoe', 'prices')[9:16]
            |sort(attribute='price') %}
            {% set t = now() %}
            {{ (t >= as_datetime(l[0].time) and t <= as_datetime(l[0].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[1].time) and t <= as_datetime(l[1].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[2].time) and t <= as_datetime(l[2].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[3].time) and t <= as_datetime(l[3].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[4].time) and t <= as_datetime(l[4].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[5].time) and t <= as_datetime(l[5].time) + timedelta(hours = 1)) }}





 

Lenke til kommentar
Del på andre sider

thoralex skrev (16 minutter siden):
state_attr('sensor.entsoe', 'prices')[21:6]

Det er ikke timer som skal inn her, men indeks i listen (elementnummer).

Så her må du bruke 21 og 31

Test det ut i Home Assistant sitt mal-verktøy med {{ state_attr('sensor.entsoe', 'prices')[9:16] }} for å se om listen du får, starter og stopper med riktig time.


state_attr('sensor.average_electricity_price_today', 'prices')[21:31]
+ state_attr('sensor.average_electricity_price_today', 'prices')[33:41]

Endret av stigvi
Lenke til kommentar
Del på andre sider

 

 

Men vær oppmerksom på at prices listen oppdateres klokken 14 så ditt ønske om billig pris fra 09 til 16 må du tenke mer på.

Spørs om det ikke er lurt å dele det opp i to malsensorer......
Eller ha det slik du hadde med å bruke selectattr. Den søker jo opp timene uavhengig av hvor i listen den timen faktisk er og da unngår en problem med at alle prisene forskyves et døgn. Men du må være obs på døgnskifte når du bruker now()

Endret av stigvi
Lenke til kommentar
Del på andre sider

Målet var å lage en liste og plukke de 6 billigste uavhengig av hvilken av de to periodene de er i. Eller rettere sagt: plukke de 6 billigste timene i et døgn untatt periodene 0600-0900 og 16-21. Nordpool sensoren jeg postet over fungerte etter hensikten bortsett fra at den oppdaterte ved midnatt som var et veldig ugunstig tidspunkt.

 


 

Endret av thoralex
Lenke til kommentar
Del på andre sider

thoralex skrev (1 time siden):

Målet var å lage en liste og plukke de 6 billigste uavhengig av hvilken av de to periodene de er i. Eller rettere sagt: plukke de 6 billigste timene i et døgn untatt periodene 0600-0900 og 16-21. Nordpool sensoren jeg postet over fungerte etter hensikten bortsett fra at den oppdaterte ved midnatt som var et veldig ugunstig tidspunkt.

 


 

Det er enkelt å få til hvis entso-e alltid oppdateres klokken 14. Det er de dagene dette ikke skjer, som blir litt utfordrende.

Perioden 0900 til 1600 ville jeg delt opp i to der 1400 var grensen mellom de.

Lenke til kommentar
Del på andre sider

Er det ikke bare å dele 1600? Eller rettere sagt starte 2100?
 

state_attr('sensor.average_electricity_price_today', 'prices')[21:31]
+ state_attr('sensor.average_electricity_price_today', 'prices')[33:41] 

Er det ikke det denne templaten vil gjøre? Starte 2100 i dag og gå til 1600 i morra?

Lenke til kommentar
Del på andre sider

thoralex skrev (1 minutt siden):

Er det ikke det denne templaten vil gjøre? Starte 2100 i dag og gå til 1600 i morra?

Nei, for i morgen klokken 14 vil de to timene mellom 14 og 16 flytte seg fram 24 timer i listen. Hvis de har indeks 38 og 39 i dag, så er de på indeks 14 og 15 i morgen etter 1400

Lenke til kommentar
Del på andre sider

Selvfølgelig, listen oppdateres jo der.

Da har jeg endt opp med dette:

    - platform: template
      sensors:
        billigste_6_timer_entsoe_offpeak:
          value_template: >-
            {% set l=
            ( state_attr('sensor.entsoe', 'prices')[14:15]|list
            + state_attr('sensor.entsoe', 'prices')[21:30]|list
            + state_attr('sensor.entsoe', 'prices')[33:37]|list ) 
            |sort (attribute='price') %}
            {% set t = now() %}
              {{ (t >= as_datetime(l[0].time) and t <= as_datetime(l[0].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[1].time) and t <= as_datetime(l[1].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[2].time) and t <= as_datetime(l[2].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[3].time) and t <= as_datetime(l[3].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[4].time) and t <= as_datetime(l[4].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[5].time) and t <= as_datetime(l[5].time) + timedelta(hours = 1)) }}

Ser det fornuftig ut?

Endret av thoralex
Lenke til kommentar
Del på andre sider

Jeg har nok rotet en del med tallene underveis ja, og er egentlig veldig usikker på hvordan det er riktig å bruke dem. Lista i sensoren starter jo på "00:00:00+01:00" som betyr klokka ett i mitt hode, men prisene skal vel gå fra midnatt så det kan jo ikke stemme? Og starter lista på 0 eller 1?
Tallene er uansett bare veiledende, må fundere litt mer på hva som er optimalt.

Edit: ser at jeg har tolket xx:xx som "fra og med":"til og med", mens det riktige ser ut til å være fra:til. Så 14:16 gir to timer og ikke tre som jeg trodde.

Endret av thoralex
Lenke til kommentar
Del på andre sider

Jeg pleier å stjele litt kode her og der, hvor jeg prøver å modifisere meg frem til noe jeg ønsker, men denne gangen sliter jeg litt, så håper dere har tid til å hjelpe meg.

Jeg har tyvlånt en kodesnutt fra github, som gir meg de tre (eller antall ønsket) billigste timer med strøm ila natta (22-06), dette styrer bla.a VVB og lading av elbil

 

      sensors:
        billig_nattstrom:
          friendly_name: "Billig nattstrøm"
          value_template: >-
            {%- set ns = namespace(hour_price=[], cheapest_hour= false) %}
            {%- set cheap_hours = namespace(number=3) %}
              {% if state_attr("sensor.strompris", "tomorrow_valid")==true %}
                {% for i in range(22, 24) %}
                  {% set ns.hour_price = ns.hour_price + [(i, states.sensor.strompris.attributes.raw_today[i].price)] %}
                {%- endfor -%}
                {% for i in range(0, 7) %}
                  {% set ns.hour_price = ns.hour_price + [(i, states.sensor.strompris.attributes.raw_tomorrow[i].price)] %}
                {%- endfor -%}
              {% else %}
                {% for i in range(0, 7) %}
                  {% set ns.hour_price = ns.hour_price + [(i, states.sensor.strompris.attributes.raw_today[i].price)] %}
                {%- endfor -%}
              {% endif %}
            
            {% set hour_price_dict = dict.from_keys(ns.hour_price) %}
            {% set sorted_hour_price_dict = hour_price_dict.items()|sort(attribute='1') %}
            {% for i in range(0, cheap_hours.number) %}
              {% if sorted_hour_price_dict[i].0 == now().hour %}
                {% set ns.cheapest_hour = true %}
              {% else %}
                {% set ns.cheapest_hour = false %}
              {% endif %}
            {%- endfor -%}
            {{ ns.cheapest_hour }}

 

 

sorted_hour_price_dict i koden gir meg biligste timer i stigende rekkefølge:

[(1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (0, 1), (6, 1), (23, 10), (22, 15)]

Det jeg ønsker er å printe ut klokkeslettet for de billigste timene (tallet til venstre).

 

sorted_hour_price_dict.0

gir meg

(1, 0)

sorted_hour_price_dict.1 gir meg parentes nr 2 i listen, etc.

 

Et fint resultat hadde vært om utfallet blir "Kl 0-3" eller "Kl 2-6" hvis man har puttet inn ønske om de 4 billigste timer, etc.

Håper dere kan hjelpe!

Lenke til kommentar
Del på andre sider

thoralex skrev (På 7.11.2022 den 14.36):

Selvfølgelig, listen oppdateres jo der.

Da har jeg endt opp med dette:

    - platform: template
      sensors:
        billigste_6_timer_entsoe_offpeak:
          value_template: >-
            {% set l=
            ( state_attr('sensor.entsoe', 'prices')[14:15]|list
            + state_attr('sensor.entsoe', 'prices')[21:30]|list
            + state_attr('sensor.entsoe', 'prices')[33:37]|list ) 
            |sort (attribute='price') %}
            {% set t = now() %}
              {{ (t >= as_datetime(l[0].time) and t <= as_datetime(l[0].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[1].time) and t <= as_datetime(l[1].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[2].time) and t <= as_datetime(l[2].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[3].time) and t <= as_datetime(l[3].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[4].time) and t <= as_datetime(l[4].time) + timedelta(hours = 1))
              or (t >= as_datetime(l[5].time) and t <= as_datetime(l[5].time) + timedelta(hours = 1)) }}

Ser det fornuftig ut?



En enklere måte er å gjøre som dette (etter inspirasjon fra et annet innlegg i dag)

 

{% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:38]|sort(attribute='price') %}
{% set t = now().hour %}
{{ (t == as_datetime(l[1].time).hour)
or (t == as_datetime(l[1].time).hour) }}

 

Lenke til kommentar
Del på andre sider

  • 2 måneder senere...
stigvi skrev (På 16.10.2022 den 18.18):

Et alternativ til Nordpool integrasjonen, er Entso-e. Til Entso-e er det nettopp laget en integrasjon til Home Assistant og den finnes her, https://github.com/JaccoR/hass-entso-e

På samme måte som i Nordpool integrasjonen så kan en legge til nettleie på prisen. Denne gjør det derimot litt annerledes så malene er ikke helt like. Min mal for å gjøre om euro til kroner og legge til nettleie, ser slik ut.

 

{% set s = {
    "day": 0.6676,
    "night": 0.5426,
    "cert": 0.01,
    "vat": 1.25,
    "eur": 10.36
}
%}
{% if now().isoweekday() >= 1 and now().isoweekday() <= 5 %}
  {% if now().hour >= 6 and now().hour < 22 %}
    {{(current_price * s.eur * s.vat + s.day + s.cert) | float}}
  {% else %}
    {{(current_price * s.eur * s.vat + s.night + s.cert) | float}}
  {% endif %}
{% else %}
  {{(current_price * s.eur * s.vat + s.night + s.cert) | float}}
{% endif %}

 

@stigvi , jeg modifiserte denne litt for å få med Elvias satser for januar - mars, og april - desember, og la malen inn i Entso-e integrasjonen. Fungerer fint! Men jeg har bruk for spotprisene både med og uten nettleie, siden jeg har solceller, og muligens kommer til å selge overskuddskraft. Jeg tenkte at jeg kunne fjerne koden fra integrasjonen, og heller bruke den i en "ekstern" mal-sensor? Men  koden kan kanskje ikke brukes uten videre? Hva er dette slags "språk"?

Lenke til kommentar
Del på andre sider

21 minutes ago, Gunnar-K said:

@stigvi , jeg modifiserte denne litt for å få med Elvias satser for januar - mars, og april - desember, og la malen inn i Entso-e integrasjonen. Fungerer fint! Men jeg har bruk for spotprisene både med og uten nettleie, siden jeg har solceller, og muligens kommer til å selge overskuddskraft. Jeg tenkte at jeg kunne fjerne koden fra integrasjonen, og heller bruke den i en "ekstern" mal-sensor? Men  koden kan kanskje ikke brukes uten videre? Hva er dette slags "språk"?

Du kan ha flere Entso-e integrasjoner, det er kanskje det enkleste? Jeg har en med og en uten nettleie, fungerer perfekt!

  • Like 1
Lenke til kommentar
Del på andre sider

Gunnar-K skrev (1 time siden):

@stigvi , jeg modifiserte denne litt for å få med Elvias satser for januar - mars, og april - desember, og la malen inn i Entso-e integrasjonen. Fungerer fint! Men jeg har bruk for spotprisene både med og uten nettleie, siden jeg har solceller, og muligens kommer til å selge overskuddskraft. Jeg tenkte at jeg kunne fjerne koden fra integrasjonen, og heller bruke den i en "ekstern" mal-sensor? Men  koden kan kanskje ikke brukes uten videre? Hva er dette slags "språk"?

"Språket" er standard jinja2 som brukes i mal-sensorer i HA. Men både Nordpool og Entso-e integrasjonen overstyrer now() funksjonen så det er ikke så lett å bruke disse malene til noe annet enn i entso-e

  • Thanks 1
Lenke til kommentar
Del på andre sider

Mal-sensoren (billigste_timer_1_6, etter mønster fra stigvi) for å finne de billigste timene virker fint, men automasjonen min slår aldri ut. Sikkert noe banalt, ser slik ut for å slå på:

 

- id: '1674599131167'
  alias: bereder_paa
  description: Slå på bereder
  trigger:
  - platform: state
    entity_id:
    - sensor.billigste_timer_1_6
    from: 'false'
    to: 'true'
  condition: []
  action:
  - type: turn_on
    device_id: 0d7f8d04e25596dd5c7e468371f8bfc5
    entity_id: switch.bereder_kjeller_socket_1
    domain: switch
  mode: single

 

Lenke til kommentar
Del på andre sider

Gunnar-K skrev (På 26.1.2023 den 17.23):

Mal-sensoren (billigste_timer_1_6, etter mønster fra stigvi) for å finne de billigste timene virker fint, men automasjonen min slår aldri ut. Sikkert noe banalt, ser slik ut for å slå på:

 

- id: '1674599131167'
  alias: bereder_paa
  description: Slå på bereder
  trigger:
  - platform: state
    entity_id:
    - sensor.billigste_timer_1_6
    to: 'True'
  condition: []
  action:
  - type: turn_on
    device_id: 0d7f8d04e25596dd5c7e468371f8bfc5
    entity_id: switch.bereder_kjeller_socket_1
    domain: switch
  mode: single

Tok bort from: og endret true til True, slik som det kommer opp om jeg kjører billigste_timer_1_6 i mal-debuggeren. Ser ut til å ha fungert i natt. Tenkte å legge inn en repeat-funksjon for å vekke smart-pluggen noen ganger. Redigerte direkte i automations.yaml fila. Får ingen feilmelding, men automasjonen forsvinner fra Innstillinger -> automasjoner. Mulig det fungerer likevel. får prøve i natt.

 

Lenke til kommentar
Del på andre sider

Gunnar-K skrev (5 timer siden):

 

Hvis du i HA kikker på tilstander i det som heter utviklerverktøy så vil du se at ingen binære sensorer har tilstanden False, false, true eller True. De har enten off eller on (med små bokstaver). At det virker med True og ikke true er nok fordi python vil ha det slik. Men det som skjer er at din automasjon må konvertere True til on. Det beste er egentlig å bruke de tilstandene som sensoren har, nemlig on og off.

Lenke til kommentar
Del på andre sider

Gunnar-K skrev (10 timer siden):

OK. Jeg var usikker på om mal-sensoren "billigste_timer_1_6" er en binær sensor eller ikke. Under tilstander står den  ihvertfall til False eller True.

Merkelig. Hos meg er den on og off. Hvordan ser din malsensor ut?

Endret av stigvi
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.