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

Nordpool sensor for Home Assistant


Anbefalte innlegg

1 hour ago, stigvi said:

Når det gjelder VVB så styres den av en esp32 med esphome. Den måler temperatur i topp og i bunn og beregner oppvarmingstid. Og så får den de billigste timene fra HA (som kommer fra Nordpool) og slår på varme kun i de timene.

Ligger styringen av dette i esp32'en, at esp'en styrer dette selv basert på info den får fra HA, eller er det automasjoner i HA som styrer dette?

Lenke til kommentar
Del på andre sider

7 minutter siden, Mathias skrev:

Ligger styringen av dette i esp32'en, at esp'en styrer dette selv basert på info den får fra HA, eller er det automasjoner i HA som styrer dette?

All styring ligger i esp32. Der er det også logikk som sjekker at den faktisk har kontakt med HA og også at temperatur er over et minimum hvis nordpool prisene svikter.

  • Like 1
Lenke til kommentar
Del på andre sider

1 minute ago, stigvi said:

All styring ligger i esp32. Der er det også logikk som sjekker at den faktisk har kontakt med HA og også at temperatur er over et minimum hvis nordpool prisene svikter.

Har du delt den koden her fra før eller kan du dele? Skal ikke styre VVB, men er interessert i se hvordan det er satt opp :) 

Lenke til kommentar
Del på andre sider

Det du skriver virker ikke helt "uttømmende". Om øyeblikksprisen stiger til 115% (eller 140%) av dagens snitt, er helt uproblematisk dersom dagens snitt er under 15 øre/kWh.  Og de "6 dyreste timene" - hva mener du med det?  Timespris i løpet av siste uke, eller gårsdagen ?  Og slå gulvet helt av dersom prisen går over 200% er helt uakseptabelt dersom utetemperaturen er -15 (og derav tilsvarende kalt inne).  Slike styringsregler må balanseres i en kompleks algoritme som tar hensyn til mange parametre:

 

Tid på døgnet

Er noen hjemme?

Ønsket Innetemperatur?

Virkelig innetemperatur.

Både absolutt og relativ strømpris.

 

 

Lenke til kommentar
Del på andre sider

3 minutter siden, VikingOy skrev:

Om øyeblikksprisen stiger til 115% (eller 140%) av dagens snitt, er helt uproblematisk dersom dagens snitt er under 15 øre/kWh.

Jeg tar med nettleie og prisen er aldri under den som er 38 øre

 

4 minutter siden, VikingOy skrev:

Og de "6 dyreste timene" - hva mener du med det?

I løpet av dette døgnet. Ene og alene fordi jeg ikke vil at gulvvarmen skal stå av i for lange perioder om gangen. Ofte er det en topp på morgen og en annen på kveld og da ender det gjerne med at gulvvarme er av i 3 timer i de toppene selv om prisen kanskje er over 115% i fire timer i strekk.

 

7 minutter siden, VikingOy skrev:

Og slå gulvet helt av dersom prisen går over 200% er helt uakseptabelt dersom utetemperaturen er -15 (og derav tilsvarende kalt inne).  Slike styringsregler må balanseres i en kompleks algoritme som tar hensyn til mange parametre:

Dette skjer ytterst sjelden. Husk at det er 200% over dagens snitt. Da må det nødvendigvis være kortvarig for ellers dras snittet opp. Det har bare skjedd i en time så langt i år.

Lenke til kommentar
Del på andre sider

11 minutter siden, Mathias skrev:

Har du delt den koden her fra før eller kan du dele? Skal ikke styre VVB, men er interessert i se

hvordan det er satt opp :) 

esphome:
  name: varmtvannstank
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: "HEIME5.ORG"
  password: !secret heime_wifi
  domain: .lan
  #use_address: 10.0.0.46

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  #ap:
  #  ssid: "Varmtvannstank Fallback Hotspot"
  #  password: "okz8anWfZKFP"

#captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  reboot_timeout: 24h

ota:

globals:
  - id: state_automode
    type: bool
    restore_value: no
    initial_value: 'false'
    
  - id: heating
    type: bool
    restore_value: no
    initial_value: 'false'
    
  - id: heating_has_started
    type: bool
    restore_value: no
    initial_value: 'false'
  
  - id: low_temp
    type: bool
    restore_value: no
    initial_value: 'false'
  
  - id: seconds
    type: int
    restore_value: no
    initial_value: '0'
    
  - id: heating_time
    type: int
    restore_value: no
    initial_value: '0'

  - id: heating_totaltime
    type: int
    restore_value: no
    initial_value: '0'
    
  - id: heating_start
    type: int
    restore_value: no
    initial_value: '0'
    
  - id: last_temp
    type: float
    restore_value: no
    initial_value: '0.0'
  
  - id: last_value_from_ha
    type: int
    initial_value: '0'

switch:
  - platform: gpio
    pin: 12
    id: varmtvannstank_varme
    name: "varmtvannstank_varme"
    restore_mode: ALWAYS_OFF
    icon: "mdi:water-boiler"
    on_turn_on:
    - lambda: !lambda |-
        id(heating_time) = 0;
        id(heating_start) = id(homeassistant_time).utcnow().timestamp;
        id(heating) = true;
    on_turn_off:
    - lambda: !lambda 'id(heating) = false;'
    - sensor.template.publish:
        id: energy
        state: !lambda |-
          id(heating_totaltime) += id(heating_time);
          return id(heating_totaltime) / 1800.0;
  
  - platform: template
    name: "varmtvannstank_varmeautomatikk"
    id: automode
    icon: "mdi:water-boiler"
    lambda: |-
      return id(state_automode);
    turn_on_action:
      - globals.set:
          id: state_automode
          value: 'true'
    turn_off_action:
      - globals.set:
          id: state_automode
          value: 'false'

dallas:
  - pin: GPIO14
  
status_led:
  pin:
    number: GPIO13
    inverted: yes

sensor:
  - platform: dallas
    address: 0xC5000008FABF3328
    id: varmtvannstank_topp_temperatur
    name: "varmtvannstank_topp_temperatur"
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
    on_value:
      then:
        - lambda: !lambda |-
            if(x < 64 && id(state_automode) == true)
            {
              id(varmtvannstank_varme).turn_on();
              id(low_temp) = true;
            }
            
            if(x > 66)
              id(low_temp) = false;
  
  - platform: dallas
    address: 0xFA0319A2796AD628
    id: varmtvannstank_bunn_temperatur
    name: "varmtvannstank_bunn_temperatur"
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
    on_value:
      then:
        - lambda: !lambda |-
            if(x >= id(last_temp) + 0.35)
              id(heating_time) = id(homeassistant_time).utcnow().timestamp - id(heating_start) + 150;
            
            id(last_temp) = x;

  - platform: template
    id: energy
    name: "Energibruk varmtvann"
    unit_of_measurement: "kWh"
    icon: "mdi:power-plug"

binary_sensor:
  - platform: homeassistant
    id: pris1
    entity_id: binary_sensor.billigste_timer_1_1
    
  - platform: homeassistant
    id: pris2
    entity_id: binary_sensor.billigste_timer_1_2

  - platform: homeassistant
    id: pris3
    entity_id: binary_sensor.billigste_timer_1_3

  - platform: homeassistant
    id: pris4
    entity_id: binary_sensor.billigste_timer_1_4

  - platform: homeassistant
    id: pris5
    entity_id: binary_sensor.billigste_timer_1_5

  - platform: homeassistant
    id: pris6
    entity_id: binary_sensor.billigste_timer_1_6

interval:
  - interval: 4h
    then:
    - if:
        condition:
          - lambda: !lambda |-
              auto time_now = id(homeassistant_time).utcnow();
              
              if(time_now.timestamp - id(last_value_from_ha) > 600)
                return true;
              
              return false;
        then:
          - switch.turn_on: automode

  - interval: 1min
    then:
    - if:
        condition:
          - lambda: !lambda |-
              if(id(heating_has_started) == false)
                id(seconds) = (90.0 - (id(varmtvannstank_topp_temperatur).state*0.6 + id(varmtvannstank_bunn_temperatur).state*0.4)) * 404.30769;

              if(id(pris1).state)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 1");
                return true;
              }
              else if(id(pris2).state && id(seconds) > 3600)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 2");
                return true;
              }
              else if(id(pris3).state && id(seconds) > 2*3600)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 3");
                return true;
              }
              else if(id(pris4).state && id(seconds) > 3*3600)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 4");
                return true;
              }
              else if(id(pris5).state && id(seconds) > 4*3600)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 5");
                return true;
              }
              else if(id(pris6).state && id(seconds) > 5*3600)
              {
                ESP_LOGD("main", "Setter i gang oppvarming for pris 6");
                return true;
              }
              else
              {
                ESP_LOGD("main", "I ventefase. Oppvarmingstid er %d sekunder", id(seconds));
                return false;
              }
        then:
          - if:
              condition:
                - lambda: !lambda |-
                    id(heating_has_started) = true;
                    
                    if(id(heating) == false && id(state_automode) == true)
                      return true;
                    else
                      return false;
              then:
                - switch.turn_on: varmtvannstank_varme
        else:
          - if:
              condition:
                - lambda: !lambda |-
                    if(id(heating) == true && id(state_automode) == true && id(low_temp) == false)
                      return true;
                    else
                      return false;
              then:
                - switch.turn_off: varmtvannstank_varme

time:
  - platform: homeassistant
    id: homeassistant_time
    timezone: "Europe/Oslo"
    on_time:
      - seconds: 0
        minutes: 0
        hours: 0
        then:
          - lambda: !lambda |-
              id(heating_totaltime) = 0;
              id(heating_has_started) = false;

text_sensor:
  - platform: homeassistant
    id: watchdog
    entity_id: sensor.time
    on_value:
      then:
        - lambda: !lambda |-
            auto time_now = id(homeassistant_time).utcnow();
            id(last_value_from_ha) = time_now.timestamp;

 

image.png.ed5f7f05acda33cd4c9055d2e8b9905c.png

  • Like 3
  • Thanks 1
Lenke til kommentar
Del på andre sider

PS. Versjon 003 av Nordpool sensoren kom i går kveld så nå er det mulig å legge inn slikt som nettleie i prisene.

Det er et eksempel på git. Jeg har gjort det som dette:

 

additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 100 + 0.00764 }}"

 

Lenke til kommentar
Del på andre sider

5 timer siden, stigvi skrev:

PS. Versjon 003 av Nordpool sensoren kom i går kveld så nå er det mulig å legge inn slikt som nettleie i prisene.

Det er et eksempel på git. Jeg har gjort det som dette:

 


additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 100 + 0.00764 }}"

 

Har du laget en input number sensor med verdien til nettleie? Hva betyr tallene på slutten, 100 + 0,00764?

Lenke til kommentar
Del på andre sider

1 time siden, solosuper skrev:

Har du laget en input number sensor med verdien til nettleie? Hva betyr tallene på slutten, 100 + 0,00764?

Ja, et input_number felt der jeg legger inn prisen i øre. 0,00764 er el-sertifikat som også kommer i tillegg til nettleie og nordpool-pris.

Lenke til kommentar
Del på andre sider

image.png.e1a9db1919d18f63a08ea808dadc8437.png

En liten justering slik at skille mellom historiske priser og fremtidige priser flytter seg mot høyre time for time.

 

type: 'custom:apexcharts-card'
series:
  - entity: sensor.nordpool
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    color: 'rgb(255,111,0)'
  - entity: sensor.nordpool
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    color: 'rgb(2,93,136)'
    data_generator: |
      return entity.attributes.raw_today.map((p) => {
        return [new Date(p.start), (new Date() > new Date(p.start)) ? null : p.value];
      });
  - entity: sensor.nordpool
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    color: 'rgb(2,93,136)'
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    data_generator: |
      return entity.attributes.raw_tomorrow.map((p) => {
        return [new Date(p.start), p.value];
      });
y_axis_precision: 3
now:
  show: true
graph_span: 3d
span:
  start: day
  offset: '-1d'
locale: nb
apex_config:
  chart:
    height: 300px
    zoom:
      enabled: true
    toolbar:
      show: true
      tools:
        zoom: true
        zoomin: false
        zoomout: false
        pan: false
        reset: true
  legend:
    show: false
  dataLabels:
    enabled: false
  xaxis:
    type: datetime
    labels:
      datetimeFormatter:
        month: ddd
        day: ddd
  tooltip:
    fixed:
      enabled: true
      position: bottomLeft

 

  • Like 5
Lenke til kommentar
Del på andre sider

  • 2 uker senere...
4 minutter siden, Helgemor skrev:

Meget bra sensor! Men legger de ikke ut prisene for søndag? I dag er tomorrow-feltet tomt.

Hei.

 

Prisene for morgendagen blir satt kl 13. Sjekk igjen om litt over en time 🙂

Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Genial graf, Stigvi! Min blir seende slik ut med din kode:

 

image.png.b1fcb50d9892054dfc26ccae6d610006.png

I tillegg går y-grafen opp til 2.071 hvor den burde vært maks 1.593 i dag. Har du noe peiling om hvorfor?

 

Her er en annen graf som rent lister opp dagens og morgendagens priser så dataene er jo der:

 

image.png.a8e1b3a4786a5795e841eebe369a1ee3.png

Lenke til kommentar
Del på andre sider

1 time siden, Master Aeon skrev:

Har du noe peiling om hvorfor?

Ikke uten at du deler konfigurasjonen din

edit: Ser det hos meg også. Det må være en apexchart finurlighet. Du kan minimalisere problemet med å sette

 

yaxis:
    tickAmount: 8

 

 

image.png.577d9ef56d8089007131255ed6b0e628.png

Endret av stigvi
Lenke til kommentar
Del på andre sider

Jeg har verdien 0 i bunn og da går toppen helt opp..... Synes det er greit å ha en y akse som går til 0 for da får en et bedre inntrykk av hvor mye/lite prisen varierer gjennom døgnet.

yaxis:
    tickAmount: 8
    forceNiceScale: true
    min: 0

 

image.png.1f9b8407847f1e65646fa54b02ae2a0b.png

  • Like 1
Lenke til kommentar
Del på andre sider

Det hjalp. Takker og bukker! Er forøvrig helt enig i at grafer bør starte på 0 for å få et riktig bilde.

 

Er det noe mulighet for at du kunne delt "additional_costs"-formelen din for nordpool-sensoren? Det ser ut til at du har den reelle kWh-prisen i grafen din. Jeg har prøvd å legge inn noen tall der, men formelen min fungerer ikke. Det er kanskje denne?

 

additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 100 + 0.00764 }}"
Endret av Master Aeon
Lenke til kommentar
Del på andre sider

Det er den, ja. Nettleien er 38.36 øre hos meg 0.00764 er el-sertifikat som sikkert har en annen pris nå.

 

Edit:

 

- platform: nordpool
  VAT: true
  currency: NOK
  low_price_cutoff: 0.95
  region: "Kr.sand"
  precision: 5
  price_type: kWh
  friendly_name: "Nordpool"
  additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 100 + 0.00764 }}"

 

Endret av stigvi
  • Like 1
Lenke til kommentar
Del på andre sider

14 minutter siden, stigvi skrev:

Ser at nå virker den ikke hvis jeg ber om pris i NOK, men den virker med EUR. Sånn var det sist det var problemer med den.

Må vel gjøre et seriøst forsøk på å hente Tibber sine priser.........

Virker her nå. Det var en bug som nordpool igjen. Det virker som du har en eldre versjon av det underliggende nordpool pypi pakka. Den feiler hvis den ikke finner korrekt currency. Prøv å reload sensoren.

 

Hvis det ikke blir stabilt skal jeg legge til en fallback metode some retter opp currency issues.

Endret av hellowlol
Lenke til kommentar
Del på andre sider

36 minutter siden, hellowlol skrev:

Virker her nå. Det var en bug som nordpool igjen. Det virker som du har en eldre versjon av det underliggende nordpool pypi pakka. Den feiler hvis den ikke finner korrekt currency. Prøv å reload sensoren.

 

Hvis det ikke blir stabilt skal jeg legge til en fallback metode some retter opp currency issues.

Det virker ikke med NOK hos meg. Endret manifest.json til "requirements": ["nordpool>=0.3.2"], for å være sikker på at siste versjon hentes fra pypi

Oppsettet mitt er 

- platform: nordpool
  VAT: true
  currency: EUR
  low_price_cutoff: 0.95
  region: "Kr.sand"
  precision: 6
  price_type: kWh
  friendly_name: "Nordpool"
  additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 1000 + 0.000764 }}"


Endrer jeg EUR til NOK så feiler den. Men greit nok. Billigste time i euro er de samme timene som i kroner så for meg spiller det liten rolle.

Lenke til kommentar
Del på andre sider

Det virker ikke med NOK hos meg. Endret manifest.json til "requirements": ["nordpool>=0.3.2"], for å være sikker på at siste versjon hentes fra pypi

Oppsettet mitt er 
- platform: nordpool VAT: true currency: EUR low_price_cutoff: 0.95 region: "Kr.sand" precision: 6 price_type: kWh friendly_name: "Nordpool" additional_costs: "{{ states('input_number.pris_pr_kwh_kleppenergi')|float / 1000 + 0.000764 }}"


Endrer jeg EUR til NOK så feiler den. Men greit nok. Billigste time i euro er de samme timene som i kroner så for meg spiller det liten rolle.


Ok. Jeg bruker samme sone så det burde funke. Sett på debug logging kjør en restart, hvis det fortsatt ikke virker. Åpne en issue og legg ved det som det kreves av template


Sent from my iPhone using Tapatalk
Lenke til kommentar
Del på andre sider

her er  konfigurasjonen fra Stigvi med litt extra vis noen vil bruke 

 

type: 'custom:apexcharts-card'
header:
  show: true
  title: Pris
  show_states: true
  colorize_states: true
series:
  - entity: sensor.nordpool_kwh_oslo
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    color: 'rgb(255,111,0)'
  - entity: sensor.nordpool_kwh_oslo
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    color: 'rgb(2,93,136)'
    data_generator: |
      return entity.attributes.raw_today.map((p) => {
        return [new Date(p.start), (new Date() > new Date(p.start)) ? null : p.value];
      });
  - entity: sensor.nordpool_kwh_oslo
    name: Pris
    type: column
    curve: stepline
    extend_to_end: false
    color: 'rgb(2,93,136)'
    float_precision: 3
    stroke_width: 2
    opacity: 0.2
    data_generator: |
      return entity.attributes.raw_tomorrow.map((p) => {
        return [new Date(p.start), p.value];
      });
y_axis_precision: 3
now:
  show: true
graph_span: 3d
span:
  start: day
  offset: '-1d'
locale: nb
apex_config:
  chart:
    height: 148px
    zoom:
      enabled: true
    toolbar:
      show: true
      tools:
        zoom: true
        zoomin: false
        zoomout: false
        pan: false
        reset: true
  legend:
    show: false
  dataLabels:
    enabled: false
  xaxis:
    type: datetime
    labels:
      datetimeFormatter:
        month: ddd
        day: ddd
  tooltip:
    fixed:
      enabled: true
      position: bottomLeft
      color_threshold: null
      color: red

 

 

 

 

 

 

 

pris.png

  • Like 1
Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Heisann,

Har brukt Norpool en stund nå. Dette virker fint, men ville prøve å legge inn "additional cost". Har installert 0.0.3 og der ser det ut til at det legges inn på annen måte enn config.yaml. Har noen et eksempel der man legger linjeleie inn via GUI?

 

mvh

Paal

Lenke til kommentar
Del på andre sider

8 timer siden, paalj skrev:

Heisann,

Har brukt Norpool en stund nå. Dette virker fint, men ville prøve å legge inn "additional cost". Har installert 0.0.3 og der ser det ut til at det legges inn på annen måte enn config.yaml. Har noen et eksempel der man legger linjeleie inn via GUI?

 

mvh

Paal


Det gjøre på akkurat samme måte. Du må bare skrive template in additional cost i gui.

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.