HomeAssistant ja sähköpörssiohjaus

Temez

Aktiivinen jäsen
Eli oikeastaan kysymykseni kuuluu - laskeeko sensor.shf_average_price_next_hours input_number.shf_price_avg_slider:n antaman määrän tunteja, mutta jos ko. määrää tunteja ei vielä ole julkaistu, niin laskee tiedossa olevien tuntien keskiarvon?
Se tekee juurikin näin eli nykyhetkestä tuon input_number.shf_price_avg_slider:n määrä tunteja eteenpäin. Katsoin koodia, niin näkyy olevan, että >=now ja <now+sliderin tuntimäärä. Jos sliderissa 3h ja kello nyt 17:00:00 se siis antaisi hinnat kello 17-19:59. Jos kello on vaikka 17:01:00, niin se antaa 18-20:59 välin hinnoista laskettuna.
 

hanuri

Jäsen
Kiitos kaikille jotka tänne on vinkkejä antaneet! On helpottanut omaa osaamattomuutta ja ajan puutetta perehtyä kunnolla asiaan. Olisi kyssäri itselläkin, johon tarvitsisin apua.

Haluaisin laskea oman spotti keskiarvon kuukausitasolla, jota voisi verrata sen hetkiseen pörssisähkön hintaan ja täten lisätä kulutusvaikutusta.

Nordpool/shf käytössä ja sähkönkulutukselle oma entity/ kWh löytyy jo.
 

MarjoC

Jäsen
Kokeiltu viime yönä ja tuntui toimivan. Uusi versio tarjolla tässä eli mukana myös poiskytkentämahdollisuus jakson loputtua: https://github.com/T3m3z/spotprices...mation/shf-spotprices2ha/cheapest-period.yaml

Mahdollisia testihavaintoja otetaan vastaan.
laitettu testiin :). Hyvältä ainakin näytti. Mä kaipaisin jotain tapaa nähdä kokonaiskustannukset taulukkona. Omat taidot ei kyllä riitä. Eli vähän tähän tapaan, mutta niin että siinä olisi huomioitu nuo lisäkustannukset:


1701775895389.png




Kokeilin tuohon vaihtaa nordpoolin sijaan shf:n, mutta eihän siitä mitään syntynyt :( Vinkkejä, miten saisi nuo hinnat näkyviin?
 
laitettu testiin :). Hyvältä ainakin näytti. Mä kaipaisin jotain tapaa nähdä kokonaiskustannukset taulukkona. Omat taidot ei kyllä riitä. Eli vähän tähän tapaan, mutta niin että siinä olisi huomioitu nuo lisäkustannukset:


katso liitettä 91217



Kokeilin tuohon vaihtaa nordpoolin sijaan shf:n, mutta eihän siitä mitään syntynyt :( Vinkkejä, miten saisi nuo hinnat näkyviin?
 

Temez

Aktiivinen jäsen
@MarjoC : tuossa Ninnannunnan viestissä viittaus tekemääni konffiin, jossa yksi tapa saada ne (rumaksi) taulukoksi.

Tässä "vähän" siistitympi, jotta päivämäärä/aika olisi vähän siistimpi + näyttää vain kuluvasta tunnista eteenpäin.
Koodi:
type: custom:html-template-card
title: Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td></tr> {% for value in
  (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["PriceWithTax"]*100) | round(2)}} c/kWh</td> </tr> {% endfor %}
  </table>
1701842637637.png
 

MarjoC

Jäsen
@MarjoC : tuossa Ninnannunnan viestissä viittaus tekemääni konffiin, jossa yksi tapa saada ne (rumaksi) taulukoksi.

Tässä "vähän" siistitympi, jotta päivämäärä/aika olisi vähän siistimpi + näyttää vain kuluvasta tunnista eteenpäin.
Koodi:
type: custom:html-template-card
title: Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td></tr> {% for value in
  (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["PriceWithTax"]*100) | round(2)}} c/kWh</td> </tr> {% endfor %}
  </table>
katso liitettä 91251
oot kyllä super!!! Kiitos todella paljon! <3
 

MarjoC

Jäsen
Tässä vielä Rankillä lisättynä:

Koodi:
type: custom:html-template-card
title: Total Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td><td><b>Rank</b></td></tr>
  {% for value in (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["TotalPrice"]*100) | round(2)}} c/kWh</td><td>{{ (value["Rank"]) }}
  </td></tr> {% endfor %} </table>
 

Temez

Aktiivinen jäsen

jusba31

Jäsen
Voisiko vaihtoehtona olla sellainen, että otettaisiin halvimmat x tuntia uusien pörssihintojen tultua ~kello 14 seuraavan 24h ajalta? Useimmiten halvimmat tunnit joko vuorokauden viimeisinä tunteina tai sitten yöllä. Näin saisit 99,9% ajasta toimivan ohjauslogiikan, jossa itse algoritmista ei tulisi hirveän monimutkainen. Tällöin esimerkiksi kuvasi kaltainen skenaario ei tapahtuisi, koska yöltä valittaisiin halvimmat x tuntia. Joskus todella-todella harvoin varmaan käy, että halvimmat tunnit olisivat tuulen takia iltapäivällä, mutten usko näin käyvän kovinkaan usein.
Olikos tähän jossain valmis koodi? Tälläistä juuri itse kaipaisin.
 

haraldh

Vakionaama
Tässä vielä Rankillä lisättynä:

Koodi:
type: custom:html-template-card
title: Total Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td><td><b>Rank</b></td></tr>
  {% for value in (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["TotalPrice"]*100) | round(2)}} c/kWh</td><td>{{ (value["Rank"]) }}
  </td></tr> {% endfor %} </table>
Laita mielellään screenshot, tuo vaatii ilmeisesti uuden customoinnin html template card, ja olisi kiva nähdä millainen ennen kuin viitsii asentaa.
 

Temez

Aktiivinen jäsen
Mikähän se noista viidestä vaihtoehdosta mahtaa olla?
Tuo MarjoC:n mainitsema blueprint saattaa kelvata tähän käyttöösi hyvin. Ainoa huomio minulta sellainen, että tuo MarjoC:n mainitsema blueprint mahdollistaa esim. 18-17:59 välin laskennan, mutta se antaa halvimman x tunnin yhtenäisen jakson eli ei välttämättä absoluuttisesti halvimpia tunteja. Riippuu sitten käyttötarkoituksesta, että kumpi on parempi.
 
Tulipa mieleen kun ohjaan LVV:aa vuorokauden kahdelle halvimmalle tunnille, että jos oikein haluaisi hifistellä, niin automaatiohan ei lämmitä välttämättä vettä kaikkein halvimmalla tunnilla jos rank 2 tulee ennen rank 1. LVV:lle kun riittää lähes aina tuo yksi tunti. HA ei tiedä LVV:n lämpötilaa.

Varmaankin pitäisi priorisoida tuo Rank 1, ja sen jälkeen jatkaa vain tunti perään, sama mikä rank, koska todennäköisesti se on kuitenkin edullinen. Vai tuleeko kenellekään jotain fiksumpaa systeemiä mieleen? Tai onko jollain jo valmis automaatio tähän?
 

Temez

Aktiivinen jäsen
Tulipa mieleen kun ohjaan LVV:aa vuorokauden kahdelle halvimmalle tunnille, että jos oikein haluaisi hifistellä, niin automaatiohan ei lämmitä välttämättä vettä kaikkein halvimmalla tunnilla jos rank 2 tulee ennen rank 1. LVV:lle kun riittää lähes aina tuo yksi tunti. HA ei tiedä LVV:n lämpötilaa.

Varmaankin pitäisi priorisoida tuo Rank 1, ja sen jälkeen jatkaa vain tunti perään, sama mikä rank, koska todennäköisesti se on kuitenkin edullinen. Vai tuleeko kenellekään jotain fiksumpaa systeemiä mieleen? Tai onko jollain jo valmis automaatio tähän?
Ehkä jokin tämmöinen Template-koodi voisi toimia (kokeilematonta, mutta ainakin pohjaksi):

YAML:
{% set start = today_at("18:00") if now() > today_at("18:00") else (today_at("0:00") - timedelta(hours=6)) %}
{% set stop = start + timedelta(hours=24) %}
{% set hours = 5 %}
{% set cheapest = state_attr("sensor.shf_data", "data") | selectattr("Timestamp", "ge", start | as_timestamp) | selectattr("Timestamp", "lt", stop | as_timestamp)| list | sort(attribute="TotalPrice") | first %}
{% set limit = (state_attr("sensor.shf_data", "data") | selectattr("Timestamp", "ge", cheapest.Timestamp) | selectattr("Timestamp", "lt", stop | as_timestamp)  | sort(attribute="TotalPrice"))[:hours] %}
{{ now() | as_timestamp >= cheapest.Timestamp and states("sensor.shf_electricity_price_now") | float <= (limit | last).TotalPrice}}

Koodi koettaa ottaa "edellinen kello 18 - seuraava kello 18" väliltä halvimman tunnin ja sitten etsii sen jälkeen hours-muuttujan mukaan X halvinta tuntia, joista kallein määrittää "hintarajan". Jos hinta on alle tai yhtä suuri kuin sen X tunnin hinta ja aika on mennyt jo ohi halvimmasta tunnista, niin koodi palauttaa True. Tuota voisi siis ajaa vaikka tunneittain.

Ehkäpä triggerinä time pattern tunnin välein ja sitten if-then action, jossa Conditionina tuo Template Action. Sillä if-thennillä saa päälle/pois-kytkennän.
 

Temez

Aktiivinen jäsen
Ehkä jokin tämmöinen Template-koodi voisi toimia (kokeilematonta, mutta ainakin pohjaksi):

YAML:
{% set start = today_at("18:00") if now() > today_at("18:00") else (today_at("0:00") - timedelta(hours=6)) %}
{% set stop = start + timedelta(hours=24) %}
{% set hours = 5 %}
{% set cheapest = state_attr("sensor.shf_data", "data") | selectattr("Timestamp", "ge", start | as_timestamp) | selectattr("Timestamp", "lt", stop | as_timestamp)| list | sort(attribute="TotalPrice") | first %}
{% set limit = (state_attr("sensor.shf_data", "data") | selectattr("Timestamp", "ge", cheapest.Timestamp) | selectattr("Timestamp", "lt", stop | as_timestamp)  | sort(attribute="TotalPrice"))[:hours] %}
{{ now() | as_timestamp >= cheapest.Timestamp and states("sensor.shf_electricity_price_now") | float <= (limit | last).TotalPrice}}

Koodi koettaa ottaa "edellinen kello 18 - seuraava kello 18" väliltä halvimman tunnin ja sitten etsii sen jälkeen hours-muuttujan mukaan X halvinta tuntia, joista kallein määrittää "hintarajan". Jos hinta on alle tai yhtä suuri kuin sen X tunnin hinta ja aika on mennyt jo ohi halvimmasta tunnista, niin koodi palauttaa True. Tuota voisi siis ajaa vaikka tunneittain.

Ehkäpä triggerinä time pattern tunnin välein ja sitten if-then action, jossa Conditionina tuo Template Action. Sillä if-thennillä saa päälle/pois-kytkennän.
Mutta kuten moni oli täällä jo todennut, niin taitaa mennä overengineeringin ja senttien säästelyksi per vuorokausi tämä, joten käteen ei taida jäädä paljoa tästä. Voihan sitä laskeskella, että jos menee X kWh LVV:n lämmittämiseen ja joko lämmität vuorokauden halvimmalla tai toiseksi halvimmalla tunnilla, niin miten usein halvimman ja toiseksi halvimman tunnin hinta on isompi kuin joitain senttejä (edit: tai sentin osia)? Eli säästöpotentiaali per päivä on ehkä jotain senttejä max.

EDIT: tänään halvimman ja toiseksi halvimman tunnin ero oli 0,49snt/kWh. Minulla kaksoisvaippavaraaja, joten en ole seurannut lämpimän käyttöveden energiankulutusta erikseen. Mutta muistelen, että 3-5kWh on foorumilla pyörinyt? 0,0049€/kWh * 5kWh/d * 365 d = 8,9425€ per vuosi olisi säästöpotentiaali?
 
Viimeksi muokattu:
Mutta kuten moni oli täällä jo todennut, niin taitaa mennä overengineeringin ja senttien säästelyksi per vuorokausi tämä, joten käteen ei taida jäädä paljoa tästä. Voihan sitä laskeskella, että jos menee X kWh LVV:n lämmittämiseen ja joko lämmität vuorokauden halvimmalla tai toiseksi halvimmalla tunnilla, niin miten usein halvimman ja toiseksi halvimman tunnin hinta on isompi kuin joitain senttejä (edit: tai sentin osia)? Eli säästöpotentiaali per päivä on ehkä jotain senttejä max.

EDIT: tänään halvimman ja toiseksi halvimman tunnin ero oli 0,49snt/kWh. Minulla kaksoisvaippavaraaja, joten en ole seurannut lämpimän käyttöveden energiankulutusta erikseen. Mutta muistelen, että 3-5kWh on foorumilla pyörinyt? 0,0049€/kWh * 5kWh/d * 365 d = 8,9425€ per vuosi olisi säästöpotentiaali?
Tuohan on 6,624 Sandelssia. Ehkäpä tuon voisi ottaa käyttöön.
 

Temez

Aktiivinen jäsen
Tuohan on 6,624 Sandelssia. Ehkäpä tuon voisi ottaa käyttöön.
Ainiin: tänään sattui niin, että toiseksi halvin tunti yöllä oli halvimman jälkeen. Jos arpoisi, että nämä vaihtelisi vaan 50/50 ennen/jälkeen, niin etu optimoinnista tippuu puoleen.

Itselläni menee kyllä ylioptimoinnin puolelle nämä aina, mutta harrastukseen pitääkin saada käyttää kaikki liikenevä vapaa-aika :)
 

timop

Aktiivinen jäsen
Ite kanssa tuota LVV ohjausta aluksi mietin vaikeimman kautta. Tulin siihen lopputulokseen että on päällä jos on rank alle 4 tai hinta alle 3sepekkiä.
Sitä lämmintä vettä pitää kuintenkin olla ja onhan siinä termostaatti. Ja se legionellan tappo..
Eli ei nyt ihan hullutuksiin kannata mennä :)

muoks: käytän itse triggerinä binary_sensor.shf_price_or_rank_acceptable
 
Viimeksi muokattu:
Kyllähän tästä harrastus on tullut, ja koska pystyy kyseisen automaation tekemään niin miksipä ei. Sentti sieltä, toinen täältä metodilla.
On tullut monta asiaa HA:lla tehtyä missä ei välttämättä niin järkeä ole, mutta jostain syystä kaikenlaiset käppyrät ja niiden optimointi on hirveän kiinnostavaa. Kyllähän nämä välillä aiheuttavat ihmetystä ja kulmienkohottelua kanssaeläjissä.
 

MarjoC

Jäsen
@Temez seuraava kysymys:
1702125919103.png


1) mistä rank haetaan? input_number.shf_rank_slider? rank accepted?
2) miksei max pricea haeta input_number.shf_price_slider arvosta? tai vielä parempi olisi price accepted arvosta. Silloin käyttäjä saisi sitä käyttöliittymältään muutettua, jos haluaa, ilman että täytyy automatiikkaa muokata.

Tai oikeastaan, tarvitaanko tuota tuossa lainkaan?? nyt kun tarkemmin ajattelen kun kerta ei kysytä tuota rankkiäkään :eek:
 
Viimeksi muokattu:

ederopaa

Jäsen
Moi, mikä olisi toimiva tapa HA:ssa visualisoida listamuodossa paremmuusjärjestyksessä tuntiranking hyödyntämällä @Temez 'n aiemmin esittämää pythonia:

Python:
{% set start = now() %}
{% set end = start + timedelta(hours=24) %}
{% set hours = 6 %}

{{ (state_attr('sensor.shf_data', 'data') |
selectattr("Timestamp", "ge", start | as_timestamp) |
selectattr("Timestamp", "lt", end | as_timestamp) |
sort(attribute="TotalPrice"))[:hours]  }}

Ajatuksena listata joko tästä eteenpäin halvimmat x tuntia tai klo 15 alkaen.

Tuolla aiemmin oli tämä. Mitenkä tuosta sorttaus rankingin mukaan menisikään?

Koodi:
type: custom:html-template-card
title: Total Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td><td><b>Rank</b></td></tr>
  {% for value in (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["TotalPrice"]*100) | round(2)}} c/kWh</td><td>{{ (value["Rank"]) }}
  </td></tr> {% endfor %} </table>
 
Viimeksi muokattu:

Temez

Aktiivinen jäsen
1) mistä rank haetaan? input_number.shf_rank_slider? rank accepted?
Blueprint vertaa arvoa sensor.shf_rank_now vs. Blueprintissä asetettu "Number of hours" = "maksimi sallittu Rank".
2) miksei max pricea haeta input_number.shf_price_slider arvosta? tai vielä parempi olisi price accepted arvosta. Silloin käyttäjä saisi sitä käyttöliittymältään muutettua, jos haluaa, ilman että täytyy automatiikkaa muokata.
Ajattelin, että laittamalla tuo blueprinttiin voisi eri laitteille (= eri automaatioille) laittaa helposti useita eri rajoja eikä vain yhtä ainoaa. Sinänsä voisi olla hyvä kehitysehdotus lisätä tuohon jokin "Input Numberin/Sliderin" -valinta, jolloin käyttäjä saisi noita käyttöliittymästä muokattua kerralla useampaa (mutta se vaatisi sitä, että käyttäjä luo useampia Input Numbereita tai käyttää input_number.shf_price_slider:ia).
 
Viimeksi muokattu:

MarjoC

Jäsen
Blueprint vertaa arvoa sensor.shf_rank_now vs. Blueprintissä asetettu "Number of hours" = "maksimi sallittu Rank".

Ajattelin, että laittamalla tuo blueprinttiin voisi eri laitteille = eri automaatioille laittaa helposti useita eri rajoja. Sinänsä voisi olla hyvä kehitysehdotus lisätä tuohon jokin "Input Numberin/Sliderin" -valinta, jolloin käyttäjä saisi noita käyttöliittymästä muokattua kerralla useampaa (mutta se vaatisi sitä, että käyttäjä luo useampia Input Numbereita tai käyttää input_number.shf_price_slider:ia.
hmmm.. tuo voisi olla oikeasti hyvä, tälläiseen olisi kyllä tarvetta! Itse miettinyt käyttölogiikoita kokonaistilanteen hallinnassa kutakuinkin näin:

  1. Mitä tehdään kun tulevan vuorokauden sähkön hinta ylittää kipurajan max price1 -> minimi käyttö:
    1. Tehdään tarvittavat actionit, että pystytään ajamaan se minimi mitä tarvitaan, että talo pysyy jossain säädyllisessä lämmössä. Esim. Rankkäyksellä, joka on niin matalalla kuin vain pystyy laittamaan.
    2. vaihtoehtoinen energianmuoto (takka, öljy yms).
    3. ajetaan lämmityksen korotus halvimmilla tunneilla ennen kallista päivää
  2. mitä tehdään kun sähkö älyttömän halpaa - max price 2 -> ajetaan ränkeistä riippumatta kaikkia laitteita normaalisti
  3. Mitä tehdään kun hinta on normaali (max price 3 & min price -> eli hintahaarukka, jonka välissä toimitaan
    1. esim. ränkätään kalliit tunnit pois ja muuten ajetaan normaalisti. Rank voi olla esim. ulkolämpötilasidonnainen tai vain korkeampi kuin vaihtoehdossa 2.
    2. xxxx

Nyt minulla itselläni on jo:

  1. kalliin hinnan toiminnalisuus: SHF: Search for cheapest period and run actions when time is reached
    1. käytössä vain kun SHF Average price next hours > x euroa. Tämä rakennettu nyt vain extra ehtona tuon automaation sisällä. Tästä vielä minulla puuttuu tuo kaiken muun jarrutus, ja vaihtoehtoisenergiamuodon automatisointi, mutta logiikka on olemassa kyllä, pitää vain mennä askel kerrallaan :)
  2. normaalitoiminta: tehty rank OR pricella: toimii hienosti mutta lisättävä vielä tuo SHF average price next hours tarkistus lisää, jotta ei aja tätä kun sähkö sika kallista. Jotta tässä voitaisiin toimia tietyn haarukan välissä, niin pitäisi olla min ja max price arvot tiedossa.
  3. toiminta kun hinta super halpaa: edellä oleva pitäisi toimia myös tuossa sika halpaa scenaariossa, kun price OR rank raja vain on ok. Tämä toiminnalisuus vaatii siis tuon OR:n käytön. vaihtoehtoisesti tässä voisi olla vain ihan hintaraja, eli mitä tehdään kun hinta alittaa x:n.

Nyt minulla on siis useita rinnakkaisia automaatioita, toistaiseksi ne aika vähän cläshännyt, ja se mitä onkin ajanut päällekkäin ei kokonaiskuvassa mitään haittaa :)


saatkohan mitään selvää? :D :D
 

Temez

Aktiivinen jäsen
Moi, mikä olisi toimiva tapa HA:ssa visualisoida listamuodossa paremmuusjärjestyksessä tuntiranking hyödyntämällä @Temez 'n aiemmin esittämää pythonia:

Python:
{% set start = now() %}
{% set end = start + timedelta(hours=24) %}
{% set hours = 6 %}

{{ (state_attr('sensor.shf_data', 'data') |
selectattr("Timestamp", "ge", start | as_timestamp) |
selectattr("Timestamp", "lt", end | as_timestamp) |
sort(attribute="TotalPrice"))[:hours]  }}

Ajatuksena listata joko tästä eteenpäin halvimmat x tuntia tai klo 15 alkaen.

Tuolla aiemmin oli tämä. Mitenkä tuosta sorttaus rankingin mukaan menisikään?

Koodi:
type: custom:html-template-card
title: Total Electricity prices
ignore_line_breaks: true
content: >
  <style> table, th, td { border: 1px solid;} </style> <table style="border: 1px
  solid"><tr><td><b>Time</b></td><td><b>Price</b></td><td><b>Rank</b></td></tr>
  {% for value in (state_attr("sensor.shf_electricity_price_now", "data") |
  selectattr("Timestamp", "ge", (now() - timedelta(hours=1)) | as_timestamp)) %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["TotalPrice"]*100) | round(2)}} c/kWh</td><td>{{ (value["Rank"]) }}
  </td></tr> {% endfor %} </table>
YAML:
type: custom:html-template-card
title: Electricity prices
ignore_line_breaks: true
content: >
  {% set start = now() %} {% set end = start + timedelta(hours=24) %} {% set
  hours = 6 %}

  {% set d = (state_attr('sensor.shf_data', 'data') | selectattr("Timestamp",
  "ge", start | as_timestamp) | selectattr("Timestamp", "lt", end |
  as_timestamp) | sort(attribute="TotalPrice"))[:hours] |
  sort(attribute="TotalPrice")  %} <style> table, th, td { border: 1px solid;}
  </style> <table style="border: 1px solid"><tr><td><b>Time</b></td><td><b>Price
  c/kWh</b></td><td><b>Rank</b></td></tr> {% for value in d %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["PriceWithTax"]*100) | round(2)}}</td><td>{{ value["Rank"] }}</td>
  </tr> {% endfor %} </table>

1702210657748.png


Tämmöistä?
 

Kaimax

Jäsen
Moi!

Osaisko joku auttaa kun en saa koodia toimimaan?
Yritän laskea puu kattilan tehoa lämpötila erolla ja kun "pump_on" on tila "on" niin laskisi kaavan, muuten arvo olisi "0"

{% set hot_out = states('sensor.mahkarinne_lammitysverkko_t_probe_3') | float %}
{% set hot_in = states('sensor.mahkarinne_lammitysverkko_t_probe_4') | float %}
{% set flow_rate =(0.21) | float %}
{% set pump_on = states('binary_sensor.mahkarinne_lammitysverkko_t_button_1') %}
{% if is_state('pump_on', 'on') %}
{{ (hot_out - hot_in) * flow_rate * 4.186 | round(1, default=0) }}
{% else %}
0
{% endif %}
 

ederopaa

Jäsen
YAML:
type: custom:html-template-card
title: Electricity prices
ignore_line_breaks: true
content: >
  {% set start = now() %} {% set end = start + timedelta(hours=24) %} {% set
  hours = 6 %}

  {% set d = (state_attr('sensor.shf_data', 'data') | selectattr("Timestamp",
  "ge", start | as_timestamp) | selectattr("Timestamp", "lt", end |
  as_timestamp) | sort(attribute="TotalPrice"))[:hours] |
  sort(attribute="TotalPrice")  %} <style> table, th, td { border: 1px solid;}
  </style> <table style="border: 1px solid"><tr><td><b>Time</b></td><td><b>Price
  c/kWh</b></td><td><b>Rank</b></td></tr> {% for value in d %}
  <tr><td>{{strptime(value["DateTime"][:-6], '%Y-%m-%dT%H:%M:%S') |
  as_timestamp  | timestamp_custom('%d.%m. %H:%M', local=True)}}</td><td>{{
  (value["PriceWithTax"]*100) | round(2)}}</td><td>{{ value["Rank"] }}</td>
  </tr> {% endfor %} </table>

katso liitettä 91530

Tämmöistä?
No just tota, kiitti @Temez !
 

Temez

Aktiivinen jäsen
Moi!

Osaisko joku auttaa kun en saa koodia toimimaan?
Yritän laskea puu kattilan tehoa lämpötila erolla ja kun "pump_on" on tila "on" niin laskisi kaavan, muuten arvo olisi "0"

Ehkä jokin tämmöinen voisi toimia:

Koodi:
{% set hot_out = states('sensor.mahkarinne_lammitysverkko_t_probe_3') | float %}
{% set hot_in = states('sensor.mahkarinne_lammitysverkko_t_probe_4') | float %}
{{ is_state('binary_sensor.mahkarinne_lammitysverkko_t_button_1', 'on') | iif(((hot_out-hot_in) * 0.21 * 4.186) | round(1, default=0),0) }}
 

MarjoC

Jäsen
@Temez voisiko kaikkiin sensoreihin state-classin, jotta säilyttäisi historiadataa? Nyt siis tallessa 10 päivää. Minulla on ainakin tuo energia boardi joka käyttää tuota dataa ja jos haluaa saada esim. exceliin datat, niin history explorerista puuttuu vanhat datat kokonaan.

1702298950429.png
 
Viimeksi muokattu:

Temez

Aktiivinen jäsen
@Temez voisiko kaikkiin sensoreihin state-classin, jotta säilyttäisi historiadataa? Nyt siis tallessa 10 päivää. Minulla on ainakin tuo energia boardi joka käyttää tuota dataa ja jos haluaa saada esim. exceliin datat, niin history explorerista puuttuu vanhat datat kokonaan.

katso liitettä 91569
Kuulostaa järkevältä, laitetaanpas todo-listalle. Ei vie pitkään tehdä tuota onneksi.
 

MarjoC

Jäsen
Pystyisikö joku auttamaan minua? Haluaisin laskea öljyn kulutusta kWh:na. Meillä on shelly switch jonka päällä olo-ajan mukaan pitäisi laskea kulutus (oletetaan 9000W). Tämä pitäisi muuttaa kWh:ksi, jotta saisin tuon kulutuksen mukaan myös energy boardille. Meillä käy öljypannu käydessään noin 15 minuutin syklin ja sitten lepää noin 2h. Riemann summilla tehdä konversiota, mutta se laskee väärin todennäköisesti sen takia että on integraali. Mutta meillä on on/off kuorma, joka tunnetaan. Koska tarve on Energy boardiin lisätä, niin tarvisi olla total_increasing-sensori? super kiitos jo etukäteen jos joku pystyisi auttamaan. Mä olen tän kanssa jo tapellut viikon enkä ole päässyt mihinkään.


Koodi:
 - sensor:
    - name: "Current Oil Power"
      unique_id: current_oil_power
      unit_of_measurement: 'W'
      device_class: "power"
      state_class: measurement
      state: >
        {% if is_state('switch.shelly_d48afc563710_switch_0', 'on') %}
          9000  
        {% else %}
          0
        {% endif %}

Mutta miten tuosta pitäisi edetä?
 
Viimeksi muokattu:

SON

Vakionaama
Pystyisikö joku auttamaan minua? Haluaisin laskea öljyn kulutusta kWh:na. Meillä on shelly switch jonka päällä olo-ajan mukaan pitäisi laskea kulutus (oletetaan 9000W). Tämä pitäisi muuttaa kWh:ksi, jotta saisin tuon kulutuksen mukaan myös energy boardille. Meillä käy öljypannu käydessään noin 15 minuutin syklin ja sitten lepää noin 2h. Riemann summilla tehdä konversiota, mutta se laskee väärin todennäköisesti sen takia että on integraali. Mutta meillä on on/off kuorma, joka tunnetaan. Koska tarve on Energy boardiin lisätä, niin tarvisi olla total_increasing-sensori? super kiitos jo etukäteen jos joku pystyisi auttamaan. Mä olen tän kanssa jo tapellut viikon enkä ole päässyt mihinkään.


Koodi:
 - sensor:
    - name: "Current Oil Power"
      unique_id: current_oil_power
      unit_of_measurement: 'W'
      device_class: "power"
      state_class: measurement
      state: >
        {% if is_state('switch.shellyplusplugs_d48afc563710_switch_0', 'on') %}
          9000 
        {% else %}
          0
        {% endif %}

Mutta miten tuosta pitäisi edetä?
Polttoöljyn kulutuksen laskemiseen on monia tapoja ja tarkkuus voi vaihdella useista eri syistä. Suuttimen koko, öljyn paine ja polttimen käyntiajan mittaus ja vielä polttimen tuuletusaika ovat näitä epätarkkuustekijöitä.

Ise lasken pö kulutuksen kWh seuraavasti: Poku:=Pok*Poh*PkWh; jossa
Poku= Kumulatiivinen polttoöljyn laskuriarvo
Pok= 1,9 l/h poltto-öljyn kulutus tunnissa (0,5 kallonan suuttimella) Arvo on kokemusperäinen!
Poh= polttimen käyntituntilaskuri (tieto taloautomaation polttimen tilatiedosta)
PkWh= 10 kerroin jolla polttoöljylitra muutetaan kWh:si

Oma polttoöljyn kulutuksen seuranta on vrk alusta, kk alusta ja vuoden alusta ja kulutuksen alkuarvo luetaan näiden aikojen alkaessa (klo 00, kk alusta klo 00 ja vuoden alusta klo 00 ) ja loppuarvo on tietenkin lukuhetken arvo ja näiden erotus on siten ko ajan kumulatiivinen kulutus. Mittaus toimii kuiten sähkön kWh mittari.
 
Viimeksi muokattu:
Back
Ylös Bottom