Jump to content
  • Sign Up

Recommended Posts

Posted

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. 

Posted

Det er diskutert flere steder her på forumet før, blant annet i denne tråden:

Jeg bruker samme prinsipp men gikk over til entso-e da den integrasjonen kom.

  • Like 1
Posted

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)}}

 

Posted (edited)
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å!?

 

 

Edited by VikingOy
Posted

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
Posted (edited)

Kim, har du temperatursensor i tanken? Hvis ikke, hvordan laget du sensoren? Har prøvd å lage en sånn selv, men ikke klart å få til noe særlig brukbart.

Edited by thoralex
Posted

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
  • 5 months later...
Posted (edited)
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?

Edited by Kråkerøymannen
  • 5 weeks later...
Posted
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.