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

Finne de billigste strømtimene i Home Assistant


Anbefalte innlegg

thoralex skrev (3 timer siden):

Da går jeg potensielt glipp av de to billigste timene ved store prisøkninger om natten. Har noen forslag til kode som løser dette?

Hovedproblemet til dette er at nordpool integrasjonen helt unødvendig splitter prisene opp i to lister for i dag og i morgen. Det er unødvendig fordi hvert listeelement inneholder start og stopp for når prisen er gyldig.

En løsning er å lage en ny liste som oppdateres når det er nye priser midt på dagen og ikke ved midnatt.

Det er sikkert mange måter å gjøre det på. Jeg prøvde meg med en mal-sensor, men den insisterte på å gjøre om datatyper til noe annet enn det jeg ville. Med pyscript kan dette være en metode:

 

@state_trigger("sensor.nordpool")
def strompris():
    pyscript.strompris2 = float(sensor.nordpool)
    
    if (sensor.nordpool.raw_tomorrow is not None
        and len(sensor.nordpool.raw_tomorrow) > 0
        and sensor.nordpool.raw_tomorrow[0]['value'] is not None):
        pyscript.strompris2.raw_price = sensor.nordpool.raw_today + sensor.nordpool.raw_tomorrow



 

Lenke til kommentar
Del på andre sider

stigvi skrev (47 minutter siden):

Hovedproblemet til dette er at nordpool integrasjonen helt unødvendig splitter prisene opp i to lister for i dag og i morgen. Det er unødvendig fordi hvert listeelement inneholder start og stopp for når prisen er gyldig.


Takk, da får det bare være sånn enn så lenge. Komplisert nok å lære seg yaml når man ikke kan noe koding fra før!

Lenke til kommentar
Del på andre sider

Eksperimentene fortsetter... I dag var plutselig strømprisen høyest i de timene den normalt et lavest, så da må det gjøres litt mer avansert for å takle det. Dette er en videreutvikling av den samme koden som tidligere, men men her er intensjonen å plukke de seks billigste timene i døgnet, unntatt de to periodene hvor forbruket mitt vanligvis er høyest (av hensyn til effektprisingen i nettleia).

Jeg laget denne i går ettermiddag. I natt slo den inn fra midnatt til 0600, som er de dyreste timene dette døgnet... Det var jo ikke helt etter planen. Mulig den bare registrer den første tidsperioden og ignorer de andre? Jeg har også prøvd med 8 timer men ved alt over 6 blir sensoren unavailable, som jeg tror støtter teorien om at den bare "ser" den første perioden. Jeg har eksperimentert litt med tegnsetting og slikt, men har ikke nok forståelse av hvordan slik koding fungerer enda så det har bare laget trøbbel.

 

#plukke billigste 6 timer 0000-0600, 0900-1500, 2000-0000
    - platform: template
      sensors:
        billigste_6_timer_offpeak:
          value_template: >-
            {% set x = states("sensor.time") %}
             {% set l=state_attr('sensor.nordpool_kwh_trheim_nok_3_095_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=0,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=6,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=15,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=20,minute=0,second=0,microsecond=0))
              |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) }}


Noen som har forslag til løsning?

Endret av thoralex
Lenke til kommentar
Del på andre sider

thoralex skrev (24 minutter siden):

Noen som har forslag til løsning?

 

Hva om du bytter ut:

 

{% set l=state_attr('sensor.nordpool_kwh_trheim_nok_3_095_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=0,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=6,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=15,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=20,minute=0,second=0,microsecond=0))
              |sort(attribute='value') %}

 

...med:

 

{% set l =  
    (state_attr('sensor.nordpool_kwh_trheim_nok_3_095_025', 'raw_today')
              |selectattr('start', '<', now().replace(hour=6,minute=0,second=0,microsecond=0))
              |list
  + state_attr('sensor.nordpool_kwh_trheim_nok_3_095_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=15,minute=0,second=0,microsecond=0))
              | list
  + state_attr('sensor.nordpool_kwh_trheim_nok_3_095_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=20,minute=0,second=0,microsecond=0))
              | list)
  | sort(attribute='value')
%}

 

Hjelper det?

Lenke til kommentar
Del på andre sider

RVM skrev (8 minutter siden):

 

Hva om du bytter ut:

 

...med:

 

Hjelper det?

 Takk, jeg prøver det så får vi se hva som skjer.

Er det mulig å "simulere" koden i home assistant på noen måte, uten å måtte vente vente flere dager for å se hva som skjer? Ville gjort det mye enklere å eksperimentere med slikt...

Lenke til kommentar
Del på andre sider

thoralex skrev (1 minutt siden):

Er det mulig å "simulere" koden i home assistant på noen måte, uten å måtte vente vente flere dager for å se hva som skjer? Ville gjort det mye enklere å eksperimentere med slikt...

 

Ja, i "developer tools" i venstre marg ("utviklerverktøy" på norsk?), jeg "simulerte" det jeg kopierte over, for å sjekke at jeg får en liste som er sortert på pris for de timene du hadde valgt ut:

 

image.thumb.png.2e34a77496e1c93a70d211362506e72e.png

Lenke til kommentar
Del på andre sider

Nå som vi kan styre laster basert på dette (billader og varmtvannsbereder for min del), er det noen som vet hvordan man kan lage sensorer med forbruk?

 

Det jeg ønsker meg:

- Totalkostnad pr døgn, pr uke og pr måned, basert på strømpris

- Snittpris for strømmen som er brukt til hhv VVB og billader i løpet av siste døgn, uke og måned

 

Mulig det er mye å be om, men det hadde vært hyggelig med slik info også.

 

Jeg har fått på plass totalkostnad basert på input fra en eller annen post et eller annet sted (beklager til opprinnelsen!! Jeg burde ha dokumentert selv hvor jeg hentet det fra):

 

sensor:

  - platform: template

      easee_charge_cost_now:                                                                                                                                 
        friendly_name: "Easee ladekostnad"                                                                                                                   
        unit_of_measurement: "NOK"                                                                                                                           
        value_template: "{{ states('sensor.nordpool_kwh_krsand_nok_3_10_025') | float * states('sensor.easee_home_13599_power') | float }}"                  
 

Og jeg har gjort tilsvarende for VVB.

Med en Reimann sum integral får jeg opp en løpende "totalkostnad" for forbruk strøm. Men jeg vet ikke hvordan jeg kan få en slik til å rullere pr døgn, pr uke eller pr måned. Ei heller hvordan en slik kan utvides for å beregne snittprisen som er forbrukt.

Lenke til kommentar
Del på andre sider

jorno skrev (36 minutter siden):

Med en Reimann sum integral får jeg opp en løpende "totalkostnad" for forbruk strøm. Men jeg vet ikke hvordan jeg kan få en slik til å rullere pr døgn, pr uke eller pr måned. Ei heller hvordan en slik kan utvides for å beregne snittprisen som er forbrukt.

Du kan bruke utility integrasjonen i home assistant

Jeg bruker et easee service kall i integrasjonen for å sette strømpris. Da kan jeg i easee appen følge med på kostnader. Men integrasjonen tilbyr ikke noen tellere som teller opp kostnad. Da får jeg det ikke inn i HA.

Lenke til kommentar
Del på andre sider

Takk for svar, @stigvi . Forsøker å ta i bruk Utility-integrasjonen mot sensorene jeg har laget, for å se om det blir riktig. Tror kanskje jeg må knytte den opp mot Reimann sum-sensoren i stedet, siden den summerer opp. Er litt forvirra rundt hva som gjør hva, så det blir litt prøving og feiling, men får det sikkert til etter noen forsøk :-)

Lenke til kommentar
Del på andre sider

Darius skrev (2 timer siden):

Hei, 

 

Kan noen hjelpe å modifisere template sensor? Jeg vil ha input_number entity og velge hvor mange 'billig timer' jeg vil ha dynamisk på card.. 

 

Noe sånt kanskje?

 

{% set l=state_attr('sensor.nordpool_xxx_xxx_xxx_x_xxx_xxx', 'raw_today')|sort(attribute='value') %}
{% set ns = namespace(out=false) %}
{% set n = states('input_number.xxx')|int %}
{% for i in range(n) %}
  {% if (now() >= l[i].start and now() <= l[i].end) %}
    {% set ns.out = true %}
  {% endif %}
{% endfor %}
{{ns.out}}

 

Husk å legge inn din egen Nordpool-sensor og input_number.

  • Like 2
Lenke til kommentar
Del på andre sider

RVM skrev (22 timer siden):

 

Noe sånt kanskje?

 

{% set l=state_attr('sensor.nordpool_xxx_xxx_xxx_x_xxx_xxx', 'raw_today')|sort(attribute='value') %}
{% set ns = namespace(out=false) %}
{% set n = states('input_number.xxx')|int %}
{% for i in range(n) %}
  {% if (now() >= l[i].start and now() <= l[i].end) %}
    {% set ns.out = true %}
  {% endif %}
{% endfor %}
{{ns.out}}

 

Husk å legge inn din egen Nordpool-sensor og input_number.

 Tusen takk ! 

O jeg bruker "|sort(attribute='value', reverse=true" for dyreste priser.

 

 

 

Lenke til kommentar
Del på andre sider

Noen som har tips til hvordan jeg kan sette opp en template sensor som viser true/false on/off for inneværende time.

Jeg prøver å få til en liste som inneholder alle timer fra now() til et gitt tidspunkt definert i input_datetime.finish_charging_by sortere den fra billigst til dyrest og så en loop x antall ganger avhengig av hva som er definert i sensor.hours_of_charging_needed

Å gjøre dette direkte i python ville vært lett men jinja sliter jeg med

Lenke til kommentar
Del på andre sider

Andreas Noteng skrev (1 time siden):

Noen som har tips til hvordan jeg kan sette opp en template sensor som viser true/false on/off for inneværende time.

Jeg prøver å få til en liste som inneholder alle timer fra now() til et gitt tidspunkt definert i input_datetime.finish_charging_by sortere den fra billigst til dyrest og så en loop x antall ganger avhengig av hva som er definert i sensor.hours_of_charging_needed

Å gjøre dette direkte i python ville vært lett men jinja sliter jeg med

Jeg er på mobilen så jeg orker ikke lage det ferdig for deg, men jeg ville ha brukt selectsattr etter du har samlet raw_today og raw_tomorrow. På denne måten kan du fjerne alle timer som ikke har en verdi.

Lag en tom liste, loop over resultatene fra skrittet over. Sammenlikne end time med inputen og legg det som er true over i den tomme listen. Etter dette sorter du listen fra billigst til dyrest

 

 

Lenke til kommentar
Del på andre sider

  • 2 måneder senere...
RVM skrev (På 25.9.2022 den 12.00):

 

Ja, i "developer tools" i venstre marg ("utviklerverktøy" på norsk?), jeg "simulerte" det jeg kopierte over, for å sjekke at jeg får en liste som er sortert på pris for de timene du hadde valgt ut:

 

image.thumb.png.2e34a77496e1c93a70d211362506e72e.png

Kopierte denne koden og får result type: number og 1. Noe jeg misser her..

{% set l =  
    (state_attr('sensor.nordpool_kwh_bergen_nok_3_10_025', 'raw_today')
              |selectattr('start', '<', now().replace(hour=6,minute=0,second=0,microsecond=0))
              |list
    + state_attr('sensor.nordpool_kwh_bergen_nok_3_10_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=9,minute=0,second=0,microsecond=0))
              |selectattr('start', '<', now().replace(hour=15,minute=0,second=0,microsecond=0))
              | list
    + state_attr('sensor.nordpool_kwh_bergen_nok_3_10_025', 'raw_today')
              |selectattr('start', '>=', now().replace(hour=20,minute=0,second=0,microsecond=0))
              | list)
    | sort(attribute='value')
%}

 

Lenke til kommentar
Del på andre sider

hjemmedude skrev (3 timer siden):

Kopierte denne koden og får result type: number og 1. Noe jeg misser her..

 

Tør jeg gjette på at du prøvde å kopiere {{ l }} fra skjermbildet mitt og endte opp med {{ 1 }} istedenfor? 😀

 

{{ l }} var bare for å vise hva variabelen l inneholdt, men hvis du skriver {{ 1 }} i developer tools får du helt riktig en output som er et number med verdi 1.

Lenke til kommentar
Del på andre sider

RVM skrev (21 minutter siden):

Tør jeg gjette på at du prøvde å kopiere {{ l }} fra skjermbildet mitt og endte opp med {{ 1 }} istedenfor? 😀

 

{{ l }} var bare for å vise hva variabelen l inneholdt, men hvis du skriver {{ 1 }} i developer tools får du helt riktig en output som er et number med verdi 1.

Hehe helt rett :D Takk for info! 🙂

 

 

Lenke til kommentar
Del på andre sider

  • 3 uker senere...
Gunnar-K skrev (9 timer siden):

Er Nordpool-data via HA-integrasjonen egentlig gratis å bruke? Ikke så lett å skjønne ut fra nordpoolgroup.com, hvis det er der integrasjonen henter prisene.

Den er gratis å bruke, men den henter data som i flg Nordpool ikke er tillatt å bruke. Vi får neppe en faktura i posten. Jeg har installert entso-e integrasjonen og tibber-data integrasjonen som begge gir meg priser "lovlig". Entso-e integrasjonen er den beste av disse. Den er laget slik at den ikke sletter priser ved midnatt slik de andre to merkelig nok er laget. Det betyr at det er langt lettere å bruke entso-e integrasjonen i forbindelse med automasjoner som går natten gjennom.

Lenke til kommentar
Del på andre sider

stigvi skrev (18 minutter siden):

Den er gratis å bruke, men den henter data som i flg Nordpool ikke er tillatt å bruke. Vi får neppe en faktura i posten. Jeg har installert entso-e integrasjonen og tibber-data integrasjonen som begge gir meg priser "lovlig". Entso-e integrasjonen er den beste av disse. Den er laget slik at den ikke sletter priser ved midnatt slik de andre to merkelig nok er laget. Det betyr at det er langt lettere å bruke entso-e integrasjonen i forbindelse med automasjoner som går natten gjennom.

Takker! Jeg har installert ENTSO-E integrasjonen, og den virker, men får ikke akkurat samme priser som fra Nordpool. Muligens fingertrøbbel, evt at det ligger noe mere enn mva i prisene fra Nordpool.

Lenke til kommentar
Del på andre sider

Gunnar-K skrev (44 minutter siden):

Takker! Jeg har installert ENTSO-E integrasjonen, og den virker, men får ikke akkurat samme priser som fra Nordpool. Muligens fingertrøbbel, evt at det ligger noe mere enn mva i prisene fra Nordpool.

Jeg bruker denne malen på entso-e
 

{% set s = {
    "day": 0.4176,
    "night": 0.2926,
    "cert": 0.01,
    "vat": 1.25,
    "eur": float(states("sensor.kurs_eur"), 10.5)
}
%}
{% 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 %}


og denne på Nordpool
 

{% set s = {
        "hourly_fixed_cost": 0.0,
        "night": 0.2926,
        "day": 0.4176,
        "cert": 0.01
        }
      %}
        {% if now().isoweekday() >= 1 and now().isoweekday() <= 5 %}
          {% if now().hour >=6 and now().hour <22 %}
            {{(s.day+s.hourly_fixed_cost+s.cert)|float(0)}}
          {% else %}
            {{(s.night+s.hourly_fixed_cost+s.cert)|float(0)}}
          {% endif %}
        {% else %}
          {{(s.night+s.hourly_fixed_cost+s.cert)|float(0)}}
        {% endif %}


Nå er differansen mellom de kun 1/1000 øre. (2,2384 vs 2,2385)

  • Like 1
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.