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

Nordpool - rangering av strømpris per time?


Teknor

Anbefalte innlegg

Jeg har i dag en HomeAssistant-automatikk som aktiverer VVB når timesprisen er rimeligere enn gjennomsnittet for døgnet basert på følgnde YAML kode:

 

  binary_sensor:
    - name: "Pris er billigere enn gjennomsnitt"
      state: >
        {% set average = state_attr('sensor.nordpool_kwh_krsand_nok_2_10_025', 'average') | float(default=0) %}
        {% set timeprice = states('sensor.nordpool_kwh_krsand_nok_2_10_025') | float(default=0) %}
        {{ timeprice < average }}

 

Har funnet ut at min varmvannsbereder må være aktiv i 4-6 timer i løpet av døgnet for varme opp varmtvannsbehovet, så en løsning hvor VVB aktiveres når prisen er blant de seks billigste timene ville vært enda mer optimalt. Og når ingen er hjemme burde automatikken kun aktivere VVB i den timen prisen er billigst (som burde være nok for å varme vannet til 78 grader en gang i løpet av døgnet).

 

Har noen tips til YAML kode som gir meg template sensorer som inkluderer en sånn rangering? Vil tro behovet også er relevant for en del andre HA brukere. 

Lenke til kommentar
Del på andre sider

Her er en rekke eksempler. De baseres på data fra entso-e integrasjonen. De to nederste sensorene er for lading av bil og der er det fleksibelt antall timer ut i fra trinn på nettleie.

 

    - unique_id: billigste_timer_1_1
      name: billigste_timer_1_1
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day) }}
    - unique_id: billigste_timer_1_2
      name: billigste_timer_1_2
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day) }}
    - unique_id: billigste_timer_1_3
      name: billigste_timer_1_3
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day) }}
    - unique_id: billigste_timer_1_4
      name: billigste_timer_1_4
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day)
          or (t == as_datetime(l[3].time).hour and d == as_datetime(l[3].time).day) }}
    - unique_id: billigste_timer_1_5
      name: billigste_timer_1_5
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day)
          or (t == as_datetime(l[3].time).hour and d == as_datetime(l[3].time).day)
          or (t == as_datetime(l[4].time).hour and d == as_datetime(l[4].time).day) }}
    - unique_id: billigste_timer_1_6
      name: billigste_timer_1_6
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[14:39]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day)
          or (t == as_datetime(l[3].time).hour and d == as_datetime(l[3].time).day)
          or (t == as_datetime(l[4].time).hour and d == as_datetime(l[4].time).day)
          or (t == as_datetime(l[5].time).hour and d == as_datetime(l[5].time).day) }}
    - unique_id: billigste_timer_1_18
      name: billigste_timer_1_18
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices_today')|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ not ((t == as_datetime(l[18].time).hour and d == as_datetime(l[18].time).day)
          or (t == as_datetime(l[19].time).hour and d == as_datetime(l[19].time).day)
          or (t == as_datetime(l[20].time).hour and d == as_datetime(l[20].time).day)
          or (t == as_datetime(l[21].time).hour and d == as_datetime(l[21].time).day)
          or (t == as_datetime(l[22].time).hour and d == as_datetime(l[22].time).day)
          or (t == as_datetime(l[23].time).hour and d == as_datetime(l[23].time).day)) }}
    - unique_id: billigste_lading_venstre
      name: billigste_lading_venstre
      state: >-
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[16:29]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t >= 5 and t < 16)
          or (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day)
          or (t == as_datetime(l[3].time).hour and d == as_datetime(l[3].time).day) }}
    - unique_id: billigste_lading_hoyre
      name: billigste_lading_hoyre
      state: >-
        {% set trinn = float(states('input_select.nettleie_pristrinn')) < 6 %}
        {% set l=state_attr('sensor.average_electricity_price_today', 'prices')[16:iif(trinn, 27, 29)]|sort(attribute='price') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {{ (t >= iif(trinn, 3, 5) and t < 15)
          or (t == as_datetime(l[0].time).hour and d == as_datetime(l[0].time).day)
          or (t == as_datetime(l[1].time).hour and d == as_datetime(l[1].time).day)
          or (t == as_datetime(l[2].time).hour and d == as_datetime(l[2].time).day)
          or (t == as_datetime(l[3].time).hour and d == as_datetime(l[3].time).day)
          or iif(trinn, (t == as_datetime(l[4].time).hour and d == as_datetime(l[4].time).day), false)
          or iif(trinn, (t == as_datetime(l[5].time).hour and d == as_datetime(l[5].time).day), false)
          or iif(trinn, (t == as_datetime(l[6].time).hour and d == as_datetime(l[6].time).day), false)}}

 

Lenke til kommentar
Del på andre sider

Teknor skrev (På 22.6.2023 den 9.45):

Jeg har i dag en HomeAssistant-automatikk som aktiverer VVB når timesprisen er rimeligere enn gjennomsnittet for døgnet basert på følgnde YAML kode:

 

  binary_sensor:
    - name: "Pris er billigere enn gjennomsnitt"
      state: >
        {% set average = state_attr('sensor.nordpool_kwh_krsand_nok_2_10_025', 'average') | float(default=0) %}
        {% set timeprice = states('sensor.nordpool_kwh_krsand_nok_2_10_025') | float(default=0) %}
        {{ timeprice < average }}

 

 

Hei, jeg har testet denne, og resultatet så langt er nedslående.

Mulig jeg har misforstått målet med koden, men jeg trodde at hele hensikten er å "treffe" bunnpunktet i datasettet fra NordPool for derigjenom å kunne spare mest mulig penger?

Vel, her er kurven i det sensoren din gikk "on" nå i kveld (den blå vertikale streken);

 

image.png.9e91eb8c5235cf1405c57f7c641c792f.png

 

Rød kurve er fortid, blå kurve er fremtid.

Har jeg muligens misforstått noe, eller gjort noe feil?
Nordpool tilbyr data helt frem  til søndag kveld og lavest pris er helt tydelig mellom kl 13 og kl 14  i morgen (søndag).

Jeg trodde sensoren skulle slått inn da, og ikke nå!?

 

 

Endret av VikingOy
Lenke til kommentar
Del på andre sider

Tror den ser på dagens priser og ikke neste dagspriser?

 

Jeg har laget et fleksibelt system hvor jeg har tre valg, 'billigste døgntimer', 'billigste timer 0-12' og 'billigste timer 12-24'. 

Med noen flere ting:

Legionella kontroll - Er ikke tanken helt oppvarmet på 3 døgn settes billigste døgntimer opp på 8 .

Hvis strømprisen er billigere etter kl 20 enn de 4 billigste strømtimene neste døgn startes vvb.  

image.png.574fa8f0d56bb505c3414dc95b692b75.png

 

 

  • Like 1
Lenke til kommentar
Del på andre sider

Ingen sensor i tanken nei. Den fungerer bare på en sånn måte at hvis pluggen er på og det ikke trekkes noe strøm så blir det tolket som at varmeelementet har skrudd seg av. 

 

Sensor.yaml

- platform: template
  sensors:     
#Kjeller
    vvb_oppvarmet:
      friendly_name: "VVB Oppvarmet"
      value_template: "{{ state_attr('input_datetime.vvb_heater_completed', 'timestamp')|timestamp_custom('%d.%m.%y %H:%M') }}"

binary_sensor: 
    - name: "VVB_Legionella_OK"
      delay_on:
        minutes: 5
      state: "{{ now().strftime('%Y-%m-%d %H:%M:%S') < states('input_datetime.vvb_heater_legioniella')  }}"

 

Automations.yaml

 

# Denne automasjonen sjekker om VVB rele er skrudd på og
# og om varmelementet trekker strøm. Dette for å forhindre
# eventuelt legionella. 
- id: "031220211042"
  alias: "VVB. LegionellaOK"
  trigger: 
    - platform: template
      value_template: "{{ states('switch.varmtvannstank') == 'on' and states('sensor.varmtvannstank_electric_consumption_w')|int(default=300) < 100 }}"
      for: 
        minutes: 2
  action: 
    # Lagre hvilken dato og klokkeslett  
    # vi skal øke antall timer på.
    - service: input_datetime.set_datetime
      entity_id: input_datetime.vvb_heater_legioniella
      data:
        datetime: "{{ now() + timedelta(days=3) }}"
    # Lagre dato og klokkeslett for forrige gang helt oppvarmet. 
    - service: input_datetime.set_datetime
      entity_id: input_datetime.vvb_heater_completed
      data:
        datetime: "{{ now() }}"
    # Sjekk om antall timer på har 
    # vært økt av automatikken.
    - condition: state
      entity_id: binary_sensor.VVB_legionella_OK
      state: 'off'
    # Skru tilbake til opprinnelig antall timer. 
    - service: input_number.set_value
      entity_id: input_number.vvb_billigste_timer_dogn
      data_template:
        value: "{{ states('input_number.antall_billig_timer_natt_backup') }}"

# Denne automasjonen øker antall timer på 
# slik vi skal få helt oppvarmet vvb
- id: "031220211101"
  alias: "VVB. LegionellaFeil"
  trigger:
    - platform: time
      at: input_datetime.vvb_heater_legioniella
  action: 
    # Lagre gamle verdi
    - service: input_number.set_value
      entity_id: input_number.antall_billig_timer_natt_backup
      data_template:
        value: "{{ states('input_number.vvb_billigste_timer_dogn') }}"
    # Øk timer vvb skal være på med 3 timer
    - service: input_number.set_value
      entity_id: input_number.vvb_billigste_timer_dogn
      data_template:
        value: "{{ states('input_number.vvb_billigste_timer_dogn')|int + 3|int}}"
    # Lag en notifikasjon i home assistant
    - service: persistent_notification.create
      data:
        message: "Varmtvannsberederen har ikke oppnådd temperaturen sin på 3 dager. Berederen varmes helt opp neste gang"
        title: "Varmtvann Legionella"

 

  • Like 1
Lenke til kommentar
Del på andre sider

  • 5 måneder senere...
Kim123 skrev (På 27.6.2023 den 11.24):

Tror den ser på dagens priser og ikke neste dagspriser?

 

Jeg har laget et fleksibelt system hvor jeg har tre valg, 'billigste døgntimer', 'billigste timer 0-12' og 'billigste timer 12-24'. 

Med noen flere ting:

Legionella kontroll - Er ikke tanken helt oppvarmet på 3 døgn settes billigste døgntimer opp på 8 .

Hvis strømprisen er billigere etter kl 20 enn de 4 billigste strømtimene neste døgn startes vvb.  

image.png.574fa8f0d56bb505c3414dc95b692b75.png

 

 

Hei, @Kim123
Takk for at du har delt koden din. Jeg finner dessverre ikke helt ut av det. De to første sensorene i dette skjermbildet (Billigste fra kl 00-12 ogf Billigste fra 12-24) finner jeg ikke noe sted i koden din. Hvordan brukes de og hva er de?

Endret av Kråkerøymannen
Lenke til kommentar
Del på andre sider

  • 5 uker senere...
Kråkerøymannen skrev (På 19.12.2023 den 1.24):

Hei, @Kim123
Takk for at du har delt koden din. Jeg finner dessverre ikke helt ut av det. De to første sensorene i dette skjermbildet (Billigste fra kl 00-12 ogf Billigste fra 12-24) finner jeg ikke noe sted i koden din. Hvordan brukes de og hva er de?

Du kan lage disse under Innstillinger -> enheter og tjenester -> Hjelpere -> + Opprett hjelper -> Nummer

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.