Follow along with the video below to see how to install our site as a web app on your home screen.
Huomio: This feature may not be available in some browsers.
voi olla että tuli myöhässä. Mulla näkyy nyt ainakin.Onko mun HA:ssa joku vika kun pörssihinnat eivät ole ilmestyneet kello 14:54?
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.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?
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.yamlKoetan tehdä jonkin proton tuosta ehtiessäni. Vauva-arki vie vapaa-ajan melko tehokkaasti
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: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:
katso liitettä 91217
Kokeilin tuohon vaihtaa nordpoolin sijaan shf:n, mutta eihän siitä mitään syntynyt Vinkkejä, miten saisi nuo hinnat näkyviin?
@MarjoC : tuossa Ninnannunnan viestissä viittaus tekemääni konffiin, jossa yksi tapa saada ne (rumaksi) taulukoksi.HomeAssistant ja sähköpörssiohjaus
Datahubin mukaan meillä on käytössä varttinetotus, joten varmuuden vuoksi siirryin virtuaaliseen varttinetotukseen LVV:n kanssa. Kylllähän tuo LVV kontaktori paukkuu kokoajan ja oikein hirvittää, että koska se paukkuu lopullisesti. :) Mistään ei tunnu löytyvän tietoa, että onko varttinetotus...lampopumput.info
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>
oot kyllä super!!! Kiitos todella paljon! <3@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.
katso liitettä 91251Koodi: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>
Toimi viimeyön testiajossa juuri niin kuin pitikin!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.
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>
Olikos tähän jossain valmis koodi? Tälläistä juuri itse kaipaisin.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.
Katsos tämä: SHF: Search for cheapest period and run actions when time is reached - blueprint löytyy täältä: https://github.com/T3m3z/spotprices2ha/tree/main/blueprintsOlikos tähän jossain valmis koodi? Tälläistä juuri itse kaipaisin.
Mikähän se noista viidestä vaihtoehdosta mahtaa olla?Katsos tämä: SHF: Search for cheapest period and run actions when time is reached - blueprint löytyy täältä: https://github.com/T3m3z/spotprices2ha/tree/main/blueprints
https://github.com/T3m3z/spotprices...mation/shf-spotprices2ha/cheapest-period.yaml - tuota varten tarvitaan helper:n luonti. Ohjeet sille tuossa blueprintissä.Mikähän se noista viidestä vaihtoehdosta mahtaa olla?
Laita mielellään screenshot, tuo vaatii ilmeisesti uuden customoinnin html template card, ja olisi kiva nähdä millainen ennen kuin viitsii asentaa.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>
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.Mikähän se noista viidestä vaihtoehdosta mahtaa olla?
Ehkä jokin tämmöinen Template-koodi voisi toimia (kokeilematonta, mutta ainakin pohjaksi):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?
{% 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}}
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.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.
Laita mielellään screenshot, tuo vaatii ilmeisesti uuden customoinnin html template card, ja olisi kiva nähdä millainen ennen kuin viitsii asentaa.
Tuohan on 6,624 Sandelssia. Ehkäpä tuon voisi ottaa käyttöö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?
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.Tuohan on 6,624 Sandelssia. Ehkäpä tuon voisi ottaa käyttöön.
{% 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] }}
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>
Blueprint vertaa arvoa sensor.shf_rank_now vs. Blueprintissä asetettu "Number of hours" = "maksimi sallittu Rank".1) mistä rank haetaan? input_number.shf_rank_slider? rank accepted?
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).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.
hmmm.. tuo voisi olla oikeasti hyvä, tälläiseen olisi kyllä tarvetta! Itse miettinyt käyttölogiikoita kokonaistilanteen hallinnassa kutakuinkin näin: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.
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>
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>
No just tota, kiitti @Temez !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ä?
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 %}
{{ is_state('binary_sensor.mahkarinne_lammitysverkko_t_button_1', 'on') | iif(((hot_out-hot_in) * 0.21 * 4.186) | round(1, default=0),0) }}
Kuulostaa järkevältä, laitetaanpas todo-listalle. Ei vie pitkään tehdä tuota onneksi.@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
- 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 %}
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ä.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ä?