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

Finne de billigste strømtimene i Home Assistant


Anbefalte innlegg

Gunnar-K skrev (8 timer siden):

Hm.. etter et døgn ser det ut til at det bare virker av og til. Misset minst ett påslag, slik at berederen ble stående avslått hele dagen. Det var nok ikke bare 20-åringen som dusja en time eller to.. Er det noe ekstra betingelse en bør legge inn for å få det mere stabilt? Fra loggen ser det ut til at smartpluggen slo seg på 22:09:12 21/6, og av igjen 22:09:15, altså 3 sekunder senere.. Vet ikke hva som skjer i et slikt tilfelle?

history bereder-2.jpg

 

Det er jo en nokså enkel automasjon, så det er ikke så mye som kan feile. Ville ha gått inn på show trace ("vis sporing"?) for automasjonene for å feilsøke, der får du litt mer historikk for hvert steg av automasjonen hver gang den blir triggered.

 

Hva slags smartplugg er det?

Lenke til kommentar
Del på andre sider

RVM skrev (15 timer siden):

 

Det er jo en nokså enkel automasjon, så det er ikke så mye som kan feile. Ville ha gått inn på show trace ("vis sporing"?) for automasjonene for å feilsøke, der får du litt mer historikk for hvert steg av automasjonen hver gang den blir triggered.

 

Hva slags smartplugg er det?

Takker!

Det er en Tuya smartplugg kjøpt på Jula. Jeg har kjørt "Smartlife" appen med timer i månedsvis på den, og har ikke merket noe trøbbel. Jeg har slettet timerne fra Smartlife-appen. 

Om jeg velger "Vis sporing" ser det ut til at automasjonene utløses riktig av "billigste 4 timer", men det er bare på "Bereder av" at jeg ser et innslag i loggen for at smartpluggen har slått seg av. For "Bereder på" står det ikke at smartpluggen har skrudd seg på. Fra "History" ses at pluggen har skrudd seg på til feil tid. Jeg har hatt noe nettverkskrøll i kjelleren noen dager, ses det i loggen om det ikke oppnås kontakt med snartpluggen?373516448_berederpkl02002206.thumb.jpg.8ce14c7be067be3c4a1f08a64f4d41e7.jpg184237323_berederavkl06002206.thumb.jpg.bddec17f4d3b475333725a4a124f91ac.jpg1088131415_historybereder2206-2306.thumb.jpg.7d3ed9a8a365531e930f0d285989bc98.jpg 

 

Endret av Gunnar-K
Lenke til kommentar
Del på andre sider

Da ville jeg nok ha mistenkt pluggen/nettverksforbindelsen istedenfor automasjonen. Har ingenting Tuya selv, men ser jo på internett at ryktet til Tuya(-integrasjonen) er litt ymse.

 

Regner forresten med du er klar over at de færreste ville anbefalt stikkontakt og vanlig smartplugg til VVB (ref. NEK400 og effektgrensa på 1500 W).

Lenke til kommentar
Del på andre sider

Ja, klar over at Tuya kanskje ikke er allverdens kvalitet, men den har holdt bra fram til nå. Det står 16A på den, uten at jeg vet om dette er optimistisk eller ikke. Den vil jo også som regel måtte slå på når termostaten i VVB allerede er på.

Lenke til kommentar
Del på andre sider

Gunnar-K skrev (17 timer siden):

Ja, klar over at Tuya kanskje ikke er allverdens kvalitet, men den har holdt bra fram til nå. Det står 16A på den, uten at jeg vet om dette er optimistisk eller ikke. Den vil jo også som regel måtte slå på når termostaten i VVB allerede er på.

Følg litt med på den, støpsel og stikkontakt. Det er ikke slik at de plutselig sier poff. Varmgang foregår over lang tid og du kan oppdage det tidsnok hvis du ser etter misfarging eller andre spor. Når VVB har stått på en stund kan du også kjenne om det er varmt og eventuelt sniffe etter svilukt.

Lenke til kommentar
Del på andre sider

stigvi skrev (21 timer siden):

Følg litt med på den, støpsel og stikkontakt. Det er ikke slik at de plutselig sier poff. Varmgang foregår over lang tid og du kan oppdage det tidsnok hvis du ser etter misfarging eller andre spor. Når VVB har stått på en stund kan du også kjenne om det er varmt og eventuelt sniffe etter svilukt.

Ja, klar over slikt, men verdt å merke seg. Ta en kjapp sjekk av og til er lurt. Dette med "Unavailable" er ganske vanlig, så vidt jeg finner ut. Ikke spesielt for Tuya heller. Har ikke funnet noen god løsning på det foreløpig.

Lenke til kommentar
Del på andre sider

Sjekk i innstillingene til pluggen at det ikke er innebygget overspenningsvern som slår inn. Hadde liknende problemer med en heltun-bryter nylig: Som standard var overspenningsvernet satt til å slå inn ved 240V, så når spenning inn plutselig var 241V så nektet den å skru seg på. 

Lenke til kommentar
Del på andre sider

Falense skrev (På 21.2.2022 den 22.28):
import datetime

@time_trigger("cron(1 * * * *)")
def update_saving_hours():
    today_prices = state.getattr(sensor.nordpool_kwh_oslo_nok_3_00_025).get("today")
    hour_price_pairs = zip(range(24), today_prices)
    hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1])

    most_expensive_today = {}
    for i,(hour, price) in enumerate(hour_price_pairs):
        most_expensive_today[hour] = i 

    tomorrow_prices = state.getattr(sensor.nordpool_kwh_oslo_nok_3_00_025).get("tomorrow")
    hour_price_pairs = zip(range(24), tomorrow_prices)
    hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1])

    most_expensive_tomorrow = {}
    for i,(hour, price) in enumerate(hour_price_pairs):
        most_expensive_tomorrow[hour] = i 
    
    now = datetime.datetime.now()
    current_hour = now.hour

    log.info("Ran power saving script at %s" % now)

    for i in range(1,24):
        least_n_expensive = [{v: most_expensive_today[v] < i} for v in range(0,24)] 
        least_n_expensive_tomorrow = [{v: most_expensive_tomorrow[v] < i} for v in range(0,24)] 
        state.set("sensor.powersaving_%s_least_expensive" %i, most_expensive_today[current_hour] < i, new_attributes={"today_prices": today_prices, "today": least_n_expensive, "tomorrow_prices": tomorrow_prices, "tomorrow": least_n_expensive_tomorrow})#, new_attributes={"hours": })
        n_most_expensive = [{v: most_expensive_today[v] > 23-i} for v in range(0,24)] 
        n_most_expensive_tomorrow = [{v: most_expensive_tomorrow[v] > 23-i} for v in range(0,24)] 
        state.set("sensor.powersaving_%s_most_expensive" %i, most_expensive_today[current_hour] > 23-i, new_attributes={"today_prices": today_prices, "today": n_most_expensive, "tomorrow_prices": tomorrow_prices, "tomorrow": n_most_expensive_tomorrow})#, new_attributes={"hours:": map(lambda v: most_expensive[current_hour] >= i, range(0,24))})

 

Jeg syntes det ble litt tungvindt med template for hver time så jeg skrev dette snippet som kan brukes med pyscript (som finnes under HACS). Denne lager 23 sensorer med billigste og dyreste time. Husk å bytt ut "nordpool_kwh_oslo_nok_3_00_025" med din sensor.

 

Dette er veldig smart!

Jeg har aktivert skriptet i HACS, og det kjører som forventet, men jeg forstår ikke helt logikken i det, og får det ikke til å stemme hvis jeg f.eks. plotter opp sensor.powersaving_12_least_expensive for ett døgn - da får jeg f.eks. 19 timer med True. Blir historisk visning av denne variablen ikke riktig når skriptet kjøres hver time?

Lenke til kommentar
Del på andre sider

I utgangspunktet skal den gi 12 timer for "12 least expensive". Noe av utfordringen er at Nordpool HACS modulen ikke alltid gir ut data i timene etter midnatt. Dette fører til noe inkonsistent oppførsel. Forøvrig kan du se under Developer Tools->States hva "planen" er. F.eks denne for "12 least expensive".

 

Sitat

today_prices:
  - 2.082
  - 2.07
  - 2.064
  - 2.062
  - 2.061
  - 2.069
  - 2.084
  - 2.075
  - 2.102
  - 2.112
  - 2.123
  - 2.118
  - 2.131
  - 2.13
  - 2.116
  - 2.106
  - 2.072
  - 2.128
  - 2.129
  - 2.114
  - 2.074
  - 2.067
  - 2.048
  - 2.021
today:
  - price: 2.082
    hour: 0
    state: true
  - price: 2.07
    hour: 1
    state: true
  - price: 2.064
    hour: 2
    state: true
  - price: 2.062
    hour: 3
    state: true
  - price: 2.061
    hour: 4
    state: true
  - price: 2.069
    hour: 5
    state: true
  - price: 2.084
    hour: 6
    state: false
  - price: 2.075
    hour: 7
    state: true
  - price: 2.102
    hour: 8
    state: false
  - price: 2.112
    hour: 9
    state: false
  - price: 2.123
    hour: 10
    state: false
  - price: 2.118
    hour: 11
    state: false
  - price: 2.131
    hour: 12
    state: false
  - price: 2.13
    hour: 13
    state: false
  - price: 2.116
    hour: 14
    state: false
  - price: 2.106
    hour: 15
    state: false
  - price: 2.072
    hour: 16
    state: true
  - price: 2.128
    hour: 17
    state: false
  - price: 2.129
    hour: 18
    state: false
  - price: 2.114
    hour: 19
    state: false
  - price: 2.074
    hour: 20
    state: true
  - price: 2.067
    hour: 21
    state: true
  - price: 2.048
    hour: 22
    state: true
  - price: 2.021
    hour: 23
    state: true
tomorrow_prices:
  - 2.119
  - 2.112
  - 2.105
  - 2.101
  - 2.096
  - 2.11
  - 2.086
  - 1.882
  - 2.105
  - 2.082
  - 2.114
  - 2.107
  - 2.104
  - 2.109
  - 2.114
  - 2.091
  - 2.1
  - 2.098
  - 2.091
  - 2.115
  - 2.092
  - 2.087
  - 2.068
  - 1.888
tomorrow:
  - price: 2.119
    hour: 0
    state: false
  - price: 2.112
    hour: 1
    state: false
  - price: 2.105
    hour: 2
    state: false
  - price: 2.101
    hour: 3
    state: false
  - price: 2.096
    hour: 4
    state: true
  - price: 2.11
    hour: 5
    state: false
  - price: 2.086
    hour: 6
    state: true
  - price: 1.882
    hour: 7
    state: true
  - price: 2.105
    hour: 8
    state: false
  - price: 2.082
    hour: 9
    state: true
  - price: 2.114
    hour: 10
    state: false
  - price: 2.107
    hour: 11
    state: false
  - price: 2.104
    hour: 12
    state: false
  - price: 2.109
    hour: 13
    state: false
  - price: 2.114
    hour: 14
    state: false
  - price: 2.091
    hour: 15
    state: true
  - price: 2.1
    hour: 16
    state: true
  - price: 2.098
    hour: 17
    state: true
  - price: 2.091
    hour: 18
    state: true
  - price: 2.115
    hour: 19
    state: false
  - price: 2.092
    hour: 20
    state: true
  - price: 2.087
    hour: 21
    state: true
  - price: 2.068
    hour: 22
    state: true
  - price: 1.888
    hour: 23
    state: true

 

Screenshot from 2022-07-04 20-45-24.png

Screenshot from 2022-07-04 20-44-50.png

Screenshot from 2022-07-04 20-44-34.png

  • Like 1
Lenke til kommentar
Del på andre sider

Takk for svar Falense!

Ja, ser ut til å fungere hos deg. Godt tips angående Developer Tools->States og attributtene der. Jeg la inn info om når sensoren har blitt oppdatert som en egen attribute, så da blir det lettere å se hva som evt går galt hos meg.

 

Update:

Ok, her ser vi problemet: For de 2 billigste timene, så er det tilsynelatende flere enn to timer som har True her, selv om attributes viser at det faktisk kun er to timer. Antar det har med når det oppdateres å gjøre:

Screenshot_20220705_211009.thumb.png.be741b7dd88c767a6f383a608e500f46.png

 

 

Er den en innstilling for hvor ofte man henter data fra nordpool?

(skal sjekke)

Endret av mgartin
La ved bilde
Lenke til kommentar
Del på andre sider

  • 1 måned senere...

Når jeg prøver å legge inn denne sensoren får jeg feilmelding "TypeError: 'NoneType' object is not iterable". Noen som kan hjelpe?


Er fortsatt veldig fersk på dette, så det det er sikkert noe jeg gjør feil et sted...

Edit: Glem det, bare meg som er en surregjøk.

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

  • 2 uker senere...
stigvi skrev (På 28.1.2021 den 6.35):

Her er et tips til hvordan en i Home Assistant finner de timene som har billigst strøm.

Start med å legge inn en Nordpool integrasjon. Jeg bruker denne: custom-components/nordpool: nordpool sensor for ha. (github.com)
Enklest er vel å legge den inn via HACS.....

Så oppretter du denne mal-sensoren:
 

binary_sensor:
    - platform: template
      sensors:
        billigste_4_timer:
          value_template: >-
            {% set l=state_attr('sensor.nordpool_kwh_xxxxxx_xxx_x_xx_xxx', 'raw_today')|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) }}


Bytt navn på nordpool sensor til det du har valgt. Denne sorterer raw_today på pris og så bruker en de 4 billigste timene til å avgjøre om den skal være true eller false. En svakhet er at den ikke vil oppdatere seg hvis prisen er uforandret fra en time til en annen, men skjer det? Men en kan legge inn {% set x = states("sensor.time") %} som en linje øverst hvis en bekymrer seg for det. De dyreste timene vil ha indeks 20, 21, 22 og 23 hvis en heller vil ha de istedenfor billigste.
image.png.c92ebd7be331281da5029a686cd4ed15.png
 

Jeg har duplisert denne for å få både de dyreste og de billigste timene, men nå får jeg feilmelding i loggen og den ene er utilgjengelig i lovelace. Jeg har gitt den andre navnet dyreste_4_timer men det er åpenbart mer som må ha et unikt navn, men hva? 

Lenke til kommentar
Del på andre sider

Tusen takk for genial logikk @Falense !

Liker hvordan den lager 23 varianter av antall dyreste timer, og også av billigste timer. Da blir det enkelt å underveis endre automasjoner til å benytte de 8 eller 10 dyreste timene som variabel. :-)

 

Jeg importerte scriptet ditt i går, og har endelig fått satt opp strømstyring av VVB med denne.

 

Dog får jeg noen feilmeldinger. Både ved første kjøring i går (på formiddag) og etter en omstart av HA nå i morges, så feiler kjøringen av scriptet med melding:

Exception in <file.powersaving.update_saving_hours> line 15: hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1]) ^ TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'

Men det virket som om det fungerte etter kl 13 på dagen i går. Muligens noe som sammenfaller med når Nordpool annonnserer morgendagens priser? Og på grunn av dette virker det ikke som om variabelen ble oppdatert i timene i natt/morges. Når jeg sjekket under Utviklerverktøy, så jeg gårsdagens priser og verdien av hver enkelt var ikke oppdatert til å speile faktisk pris.

 

Jeg kjører HA 2022.08.6, med HACS 1.27.1 og Pyscript 1.3.3 - dersom det betyr noe.

Lenke til kommentar
Del på andre sider

roarborgen skrev (13 timer siden):

Jeg har duplisert denne for å få både de dyreste og de billigste timene, men nå får jeg feilmelding i loggen og den ene er utilgjengelig i lovelace. Jeg har gitt den andre navnet dyreste_4_timer men det er åpenbart mer som må ha et unikt navn, men hva? 

Det er nok avhengig om du bruker gammel eller nytt format for å spesifisere mal-sensorer. Det du viste er gammelt format. Her er den i nytt format

 

template:
  - binary_sensor:
    - unique_id: billigste_timer_1_4
      name: billigste_timer_1_4
      state: >-
        {% set l=state_attr('sensor.nordpool', 'raw_today')|sort(attribute='value') %}
        {% set t = now() %}
        {{ (t >= l[0].start and t <= l[0].end)
          or (t >= l[1].start and t <= l[1].end)
          or (t >= l[2].start and t <= l[2].end)
          or (t >= l[3].start and t <= l[3].end) }}

 

Lenke til kommentar
Del på andre sider

Siden pyscriptet fra @Falense feilet for meg, måtte jeg lete etter andre måter å styre min VVB på.

 

Jeg kom over en som skulle styre bassengpumpen sin i HA-forumet ( https://community.home-assistant.io/t/any-good-ideas-are-welcome-nordpool-energy-price-per-hour/34646/168?u=jornodberg ) , med en nedtrekksmeny for å velge om den skal være avslutt i X av de dyreste timene i døgnet.

 

Denne har jeg tilpasset til å skru av og på min Aeotec Heavy Duty Switch, med noen flere endringer i selve automasjonen. Jeg deler den, med mine tilpasninger, her:

 

1) Opprett en Hjelper -> Nedtrekksmeny (Dropdown). Min ble slik:

Navn: VVB av i X dyreste timer

Ikon: mdi:water-bilder-off

Alternativer: 6, 8, 10, 12

Entitets-ID: input_select.vvb_av

 

2) Legg til en sensor-template i configuration.yaml :

sensor:
  - platform: template
    sensors:
      nordpool_krsand_on_hours:
        friendly_name: "Nordpool Krsand Configurable On"
        unit_of_measurement: 'NOK/kWh'
        value_template: >
          {{average((state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'today') | sort(reverse=true))[int(states('input_select.vvb_av'))-1],
                    (state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'today') | sort(reverse=true))[int(states('input_select.vvb_av'))]) | 
            round(3) }}
        attribute_templates:
          below_config_value_now: >
            {% if state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'current_price') <= 
                  average((state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'today') | sort(reverse=true))[int(states('input_select.vvb_av'))-1],
                          (state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'today') | sort(reverse=true))[int(states('input_select.vvb_av'))]) | 
                  round(3) %}
            True
            {% else %}
            False
            {% endif %}
          current_price: >
            {{ state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'current_price') }}
          today: >
            {{ state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'today') }}
          tomorrow_valid: >
            {{ state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'tomorrow_valid') }}
          tomorrow: >
            {% if state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'tomorrow_valid') %}
            {{average((state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'tomorrow') | sort(reverse=true))[int(states('input_select.vvb_av'))-1],
                      (state_attr('sensor.nordpool_kwh_krsand_nok_3_10_025', 'tomorrow') | sort(reverse=true))[int(states('input_select.vvb_av'))]) | 
              round(3) }}
            {% else %}
            []
            {% endif %}

 

OBS: Tilpass 'sensor.nordpool_kwh_krsand_nok_3_10_025' alle steder med det du bruker. (Sørg for å ha nordpool-integrasjonen fra HACS installert)

OBS: Bytt ut 'input_select.vvb_av' med ID til din Hjelper.

 

 

3) Opprett automasjonen. Min ser slik ut:

alias: VVB-styring
description: Skrur av og på varmtvannsbereder ut fra strømpris
trigger:
  - platform: time_pattern
    minutes: "1"
  - platform: state
    entity_id:
      - input_select.vvb_av
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.nordpool_kwh_krsand_nok_3_10_025
        above: sensor.nordpool_krsand_on_hours
    then:
      - if:
          - condition: device
            type: is_on
            device_id: CHANGEME-til-din-ID
            entity_id: switch.heavy_duty_switch
            domain: switch
        then:
          - type: turn_off
            device_id: CHANGEME-til-din-ID
            entity_id: switch.heavy_duty_switch
            domain: switch
          - service: notify.mobile_app_CHANGEME
            data:
              title: Dyr strøm
              message: En av de dyreste timene i dag - skrur av VVB
    else:
      - if:
          - condition: device
            type: is_off
            device_id: CHANGEME-til-din-ID
            entity_id: switch.heavy_duty_switch
            domain: switch
        then:
          - type: turn_on
            device_id: CHANGEME-til-din-ID
            entity_id: switch.heavy_duty_switch
            domain: switch
          - service: notify.mobile_app_CHANGEME
            data:
              message: Ikke en av de dyreste timene i dag - skrur på VVB
              title: Billigere
mode: single

 

Denne utløses hver time (ett minutt over) ELLER når man foretar et valg i nedtrekksmenyen (Hjelper), og vil da enten skru AV strømmen dersom nåværende strømpris er blant de X dyreste timene i døgnet, eller PÅ dersom strømmen ikke er blant de X dyreste timene i døgnet.

 

Jeg liker hvordan løsningen lar en endre verdien rett fra dashbordet:

 

image.thumb.png.417ed32efde378b0ca9b40174beaf11b.png

 

 

  • Like 5
Lenke til kommentar
Del på andre sider

Er det noen som har fått montert Aeotec Heavy Duty Switch og som kan svare på om det er mulig å betjene dette releet hvis Gateway/Hub går dukken? Ville vært kjedelig om serveren med HomeAssistant kneler akkurat når Aeotec'en har slått av varmtvannsberederen 😆

Lenke til kommentar
Del på andre sider

oysteinl skrev (43 minutter siden):

Er det noen som har fått montert Aeotec Heavy Duty Switch og som kan svare på om det er mulig å betjene dette releet hvis Gateway/Hub går dukken? Ville vært kjedelig om serveren med HomeAssistant kneler akkurat når Aeotec'en har slått av varmtvannsberederen 😆

Ja, det er en manuell bryter under dekselet, men man må skru ut en skrue for å komme til bryteren. Når dekselet er av er også terminalene eksponert, så det er bare i nødstilfeller du vil ta det av.

  • Thanks 1
Lenke til kommentar
Del på andre sider

Du kan sette hva standard oppførsel for Aeotec Heavy Duty Switch skal være etter et strømbrudd. Min er satt til å skru seg på etter strømbrudd.

Så om noe slikt skjer, kan jeg nappe sikringen og på igjen, for å få den til å varme vvb dersom systemet havarerer.

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

jorno skrev (På 31.8.2022 den 9.36):

Tusen takk for genial logikk @Falense !

Liker hvordan den lager 23 varianter av antall dyreste timer, og også av billigste timer. Da blir det enkelt å underveis endre automasjoner til å benytte de 8 eller 10 dyreste timene som variabel. 🙂

 

Jeg importerte scriptet ditt i går, og har endelig fått satt opp strømstyring av VVB med denne.

 

Dog får jeg noen feilmeldinger. Både ved første kjøring i går (på formiddag) og etter en omstart av HA nå i morges, så feiler kjøringen av scriptet med melding:

Exception in <file.powersaving.update_saving_hours> line 15: hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1]) ^ TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'

Men det virket som om det fungerte etter kl 13 på dagen i går. Muligens noe som sammenfaller med når Nordpool annonnserer morgendagens priser? Og på grunn av dette virker det ikke som om variabelen ble oppdatert i timene i natt/morges. Når jeg sjekket under Utviklerverktøy, så jeg gårsdagens priser og verdien av hver enkelt var ikke oppdatert til å speile faktisk pris.

 

Jeg kjører HA 2022.08.6, med HACS 1.27.1 og Pyscript 1.3.3 - dersom det betyr noe.

 

Rart. Mitt fungerer fortsatt helt fint. Se om du har samme som meg eller om jeg har endret noe:

 

import datetime

@time_trigger("cron(* * * * *)")
def update_saving_hours():
    #Get todays prices from nordpool hacs addon. Todays prices should always be available
    today_prices = state.getattr(sensor.nordpool_kwh_oslo_nok_3_00_025).get("today")
    hour_price_pairs = zip(range(24), today_prices)
    hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1])

    #Create a lookup table from hour to index. Index of 0 is the least expensive hour, 23 the most.
    most_expensive_today = {}
    for i,(hour, price) in enumerate(hour_price_pairs):
        most_expensive_today[hour] = i 

    #Try to fetch tomorrows prices. This might fail before 14:00
    tomorrow_prices = state.getattr(sensor.nordpool_kwh_oslo_nok_3_00_025).get("tomorrow")

    #If prices for tomorrow is available
    if len(tomorrow_prices) > 0 and tomorrow_prices[0] is not None:
        hour_price_pairs = zip(range(24), tomorrow_prices)
        hour_price_pairs = sorted(hour_price_pairs, key=lambda v: v[1])

        most_expensive_tomorrow = {}
        for i,(hour, price) in enumerate(hour_price_pairs):
            most_expensive_tomorrow[hour] = i 
    
    now = datetime.datetime.now()
    current_hour = now.hour

    log.info("Ran power saving script at %s" % now)

    #Generate 23 sensors for least and most expensive hours of the day
    for i in range(1,24):
        #Generate schedule attribute for today
        least_n_expensive = [{"price": today_prices[v], "hour": v, "state": most_expensive_today[v] < i} for v in range(0,24)] 

        #If tomorows prices are available, generate schedule for tomorrow. 
        if len(tomorrow_prices) > 0 and tomorrow_prices[0] is not None:
            least_n_expensive_tomorrow = [{"price": tomorrow_prices[v], "hour": v, "state": most_expensive_tomorrow[v] < i} for v in range(0,24)] 
        else:
            least_n_expensive_tomorrow = []

        #Set the new state of the sensor
        state.set("sensor.powersaving_%s_least_expensive" %i, most_expensive_today[current_hour] < i, new_attributes={"today_prices": today_prices, "today": least_n_expensive, "tomorrow_prices": tomorrow_prices, "tomorrow": least_n_expensive_tomorrow})#, new_attributes={"hours": })
        
        #Generate schedule for most expensive hours today
        n_most_expensive = [{v: most_expensive_today[v] > 23-i} for v in range(0,24)] 
        
        #If tomorrows prices are available, generate schedule for tomorrow
        if len(tomorrow_prices) > 0 and tomorrow_prices[0] is not None:
            n_most_expensive_tomorrow = [{v: most_expensive_tomorrow[v] > 23-i} for v in range(0,24)] 
        else:
            n_most_expensive_tomorrow = []

        #Set the new state of the sensor
        state.set("sensor.powersaving_%s_most_expensive" %i, most_expensive_today[current_hour] > 23-i, new_attributes={"today_prices": today_prices, "today": n_most_expensive, "tomorrow_prices": tomorrow_prices, "tomorrow": n_most_expensive_tomorrow})#, new_attributes={"hours:": map(lambda v: most_expensive[current_hour] >= i, range(0,24))})

 

Endret av Falense
Lenke til kommentar
Del på andre sider

RVM skrev (På 9.9.2022 den 22.40):

Ja, det er en manuell bryter under dekselet, men man må skru ut en skrue for å komme til bryteren. Når dekselet er av er også terminalene eksponert, så det er bare i nødstilfeller du vil ta det av.

 

jorno skrev (På 10.9.2022 den 9.20):

Du kan sette hva standard oppførsel for Aeotec Heavy Duty Switch skal være etter et strømbrudd. Min er satt til å skru seg på etter strømbrudd.

Så om noe slikt skjer, kan jeg nappe sikringen og på igjen, for å få den til å varme vvb dersom systemet havarerer.

 

Takk for svar, begge to. Releet er nå montert og jeg ser at det kan opereres uten at man trenger hverken åpne dekselet eller slå av/på sikringen. Det går helt fint å trykke utenpå dekselet 🙂

 

Lenke til kommentar
Del på andre sider

chrlod skrev (52 minutter siden):

Noen som kan hjelpe kode for en sensor som identifiserer billigste time fra nordpool mellom kl 00 og kl 06 og en sensor som finner billigste time mellom kl 09 og kl 17?

 

Litt avhengig av hvordan du vil ha outputen din, så legger du bare til en slice (hhv. [0:6] og [9:17]) i templaten i åpningsposten. Eks:

image.thumb.png.73a1725f911afd3299fe3ccbc719cbe0.png

 

image.thumb.png.bd83d427178786087cf68b2053ba9b38.png

 

Edit: Fikset slicen, blandet start og end-tidspunkter.

Endret av RVM
  • Thanks 1
Lenke til kommentar
Del på andre sider

Hei! Etter beskrivelsene i denne tråden har jeg nå endt opp med dette:
 

#Plukke billigste fire timer om natten
    - platform: template
      sensors:
        billigste_4_timer_natt:
          value_template: >-
            {% set x = states("sensor.time") %}
             {% set l=state_attr('sensor.nordpool_kwh_trheim_nok_3_10_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=22,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) }}


Dette fungerer, men ikke helt etter hensikten. Målet er å velge de fire billigste timene i perioden 22:00-06:00, mens denne velger de fire billigste i periodene 00:00-06:00 og 22:00-00:00. Den velger altså fra timene i samme døgn, og ikke fra samme natt (delt på to døgn) som jeg ønsket. 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?

Lenke til kommentar
Del på andre sider

Falense skrev (På 17.9.2022 den 22.12):

Rart. Mitt fungerer fortsatt helt fint. Se om du har samme som meg eller om jeg har endret noe:

 

Ah, nå ser scriptet ditt annerledes ut enn hva jeg hadde! Virket ikke som om scriptet tok høyde for at det kanskje ikke klarte å hente morgendagens priser, så den kom med feilmelding helt frem til disse var tilgjengelig, hver dag.

Takk for at du delte ny versjon!

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.