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.
"{{ 22 + 2*states('sensor.shf_control_factor_1') | float }}"
"{{ (22 + 2*states('sensor.shf_control_factor_1') | float) | round(1) }}"
Onko kyseinen koodi suomeksi jotakuinkin näin:Koodi:"{{ (22 + 2*states('sensor.shf_control_factor_1') | float) | round(1) }}"
type: custom:apexcharts-card
experimental:
color_threshold: true
now:
show: true
color: '#ff0000'
apex_config:
forceNiceScale: true
chart:
height: 165%
graph_span: 24h
yaxis:
- id: pyynti
show: true
min: 17
max: 24
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
seriesName: pyynti
- id: hinta
show: true
opposite: true
min: 0
max: ~25
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
show:
last_updated: false
header:
standard_format: false
show: true
show_states: true
colorize_states: true
title: Lattialämmityksen pyynti vs. pörssisähkö.
span:
start: day
offset: +0h
series:
- entity: input_number.test_lattialampo
yaxis_id: pyynti
name: Lämpötila
type: line
unit: °C
extend_to: now
stroke_width: 2
show:
legend_value: false
in_header: false
name_in_header: false
extremas: true
- entity: sensor.shf_electricity_price
yaxis_id: hinta
name: Pörssisähkö c/kWh
extend_to: now
type: area
curve: stepline
opacity: 0.02
group_by:
func: last
duration: 60m
stroke_width: 1
data_generator: |
return entity.attributes.data.map((d, index) => {
return [new Date(d["DateTime"]).getTime(), entity.attributes.data[index]["PriceWithTax"]*100];
});
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
type: custom:apexcharts-card
experimental:
color_threshold: true
now:
show: true
color: '#ff0000'
apex_config:
forceNiceScale: true
chart:
height: 165%
yaxis:
- id: pyynti
show: true
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
seriesName: pyynti
- id: hinta
show: true
opposite: true
min: 0
max: ~25
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
show:
last_updated: false
header:
standard_format: false
show: true
show_states: true
colorize_states: true
title: Lattialämmityksen pyynti vs. pörssisähkö.
span:
start: day
offset: +0h
series:
- entity: sensor.shf_electricity_price
yaxis_id: hinta
name: Pörssisähkö c/kWh
extend_to: now
type: area
curve: stepline
opacity: 0.02
group_by:
func: last
duration: 60m
stroke_width: 1
data_generator: |
return entity.attributes.data.map((d, index) => {
return [new Date(d["DateTime"]).getTime(), entity.attributes.data[index]["PriceWithTax"]*100];
});
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
- entity: sensor.shf_electricity_price_now
yaxis_id: pyynti
name: Pyyntilämpötila
unit: C
extend_to: now
type: area
curve: stepline
opacity: 0.02
group_by:
func: last
duration: 60m
stroke_width: 1
data_generator: |
var temp_default = 22;
var temp_diff = 2;
var pmax = entity.attributes.today_max;
var pmin = entity.attributes.today_min;
var data = entity.attributes.today_prices;
var output = [];
for (var i = 0; i<24; ++i){
var k = temp_default + temp_diff*(2*(pmax-data[i])/(pmax-pmin)-1);
output.push([start.getTime()+i*3600000,k]);
}
return output;
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
Kehtaisitko vähän avata tätä Node Red:n sisältöä? Kiinnostaa, mutta devaajan taidot lähellä nollaa.Tähän vähän taustaa. Valitettavasti itselläni ei ole niin hyvää osaamista, että saisin näistä mitään järkevää jaettavaa aikaiseksi.
Linkki tuulivoiman tuotantoennusteen tunnittaiseen päivitysaineistoon: https://data.fingrid.fi/fi/dataset/wind-power-generation-forecast-updated-every-hour
Tuosta API-tietoa: https://data.fingrid.fi/fi/dataset/...resource/389cda12-9438-42d4-a5dd-0499b346a8c0
Tuosta APIn yleistä ohjeistusta, API-avaimen saa automaattisesti heti rekisteröitymisen jäleen: https://data.fingrid.fi/fi/pages/api
Tuossa JSON-muotoisen haun parametreistä teknisempää tietoa: https://data.fingrid.fi/open-data-api/#!/events-controller/getEventsJsonUsingGET
Olen toteuttanut tuon itse siten, että Node Red hakee HTTP requestilla kerran tunnissa päivitetyt tiedot. Halutussa formaatissa (apexcharts-cardin ymmärtämässä) tyrkkään tiedot HAn MQTT-sensoriin, josta tiedot haetaan apexcharts-cardille näytettäväksi. API on siitä hyvä, että myös historiatieto löytyy.
Toimii, mutta tämä lähestymistapa ei tainnut käyttää sitä SHF Control hommelia ? Olisi ollut kiva kokeilla eri kertoimia ja sinusoidal/linearin vaikutuksia.Tämä ei nyt ole ihan täydellinen mallinnus, mutta jotain tämän suuntaista?
katso liitettä 82954
Joo, ei tosiaan ollut. Se SHF Control Function Factor itseasiassa kyllä vetää aika nopsaan ne "ääripäät" joko arvoon -1 tai +1 eli. Voisi olla tietysti ihan järkevää laskeskella ne arvot jo valmiiksi tuonne anturin attribuutteihin, niin ei tarvitsisi sitten tuolla ApexChartin puolella niitä generoida.Toimii, mutta tämä lähestymistapa ei tainnut käyttää sitä SHF Control hommelia ? Olisi ollut kiva kokeilla eri kertoimia ja sinusoidal/linearin vaikutuksia.Eli tavallaan olisi helpottanut kertoimien hakua omiin tarpeisiin, vaikka eihän noilla mitään dramaattisia vaikutuksia varmaan ole.
Kehtaisitko vähän avata tätä Node Red:n sisältöä? Kiinnostaa, mutta devaajan taidot lähellä nollaa.
Lisäyksenä toki, eli Node RED on olemassa ja kopioinut sen hakemaan ENTSO-E:stä SPOT-hinnat. Mutta itse blokkien sisällöt kopioinut muilta.
{
"aikaleima": [
1670976000000,
1670979600000,
1670983200000,
1670986800000,
1670990400000,
1670994000000,
1670997600000,
1671001200000,
1671004800000,
1671008400000,
1671012000000,
1671015600000,
1671019200000,
1671022800000,
1671026400000,
1671030000000,
1671033600000,
1671037200000,
1671040800000,
1671044400000,
1671048000000,
1671051600000,
1671055200000,
1671058800000,
1671062400000,
1671066000000,
1671069600000,
1671073200000,
1671076800000,
1671080400000,
1671084000000,
1671087600000,
1671091200000,
1671094800000,
1671098400000,
1671102000000,
1671105600000,
1671109200000,
1671112800000,
1671116400000,
1671120000000,
1671123600000,
1671127200000,
1671130800000,
1671134400000,
1671138000000,
1671141600000,
1671145200000,
1671148800000,
1671152400000,
1671156000000,
1671159600000,
1671163200000,
1671166800000,
1671170400000,
1671174000000,
1671177600000,
1671181200000,
1671184800000,
1671188400000,
1671192000000,
1671195600000,
1671199200000,
1671202800000,
1671206400000,
1671210000000,
1671213600000,
1671217200000,
1671220800000,
1671224400000,
1671228000000,
1671231600000,
1671235200000,
1671238800000,
1671242400000,
1671246000000,
1671249600000,
1671253200000,
1671256800000,
1671260400000,
1671264000000,
1671267600000,
1671271200000,
1671274800000,
1671278400000,
1671282000000,
1671285600000,
1671289200000,
1671292800000,
1671296400000,
1671300000000,
1671303600000,
1671307200000,
1671310800000,
1671314400000,
1671318000000,
1671321600000
],
"tuuliTuotantoennuste": [
"0.558",
"0.623",
"0.628",
"0.640",
"0.710",
"0.757",
"0.782",
"0.800",
"0.765",
"0.689",
"0.793",
"0.858",
"0.876",
"0.827",
"0.911",
"0.933",
"0.909",
"0.810",
"0.743",
"0.668",
"0.635",
"0.584",
"0.540",
"0.468",
"0.474",
"0.495",
"0.595",
"0.753",
"0.977",
"1.178",
"1.450",
"1.851",
"2.237",
"2.477",
"2.645",
"2.719",
"2.920",
"2.958",
"2.779",
"2.609",
"2.479",
"2.493",
"2.522",
"2.476",
"2.416",
"2.279",
"2.126",
"2.217",
"2.137",
"2.058",
"2.075",
"1.939",
"1.728",
"1.635",
"1.604",
"1.578",
"1.605",
"1.654",
"1.803",
"2.026",
"2.144",
"2.254",
"2.462",
"2.624",
"2.646",
"2.731",
"2.720",
"2.759",
"2.845",
"3.009",
"3.143",
"3.179",
"3.156",
"3.128",
"3.162",
"3.159",
"3.164",
"3.189",
"3.208",
"3.201",
"3.224",
"3.232",
"3.236",
"3.151",
"3.076",
"3.036",
"3.015",
"2.917",
"2.792",
"2.648",
"2.421",
"2.132",
"1.918",
"1.721",
"1.514",
"1.339",
"1.200"
],
"tuuliTuotantoennusteNyt": "2.624"
}
Itseäni kiinnostaisi alkaa simuloimaan eri siirtotuotteiden hintaeroa toteutuneella sähkönkäytöllä. Shelly EM3 olisi jo kulutusta mittaamassa, mutta pitäisi jaksaa kehitellä zydeemi joka laskisi siirtohinnan tuntitasolla jokaiselle sirtomuodolle (Yleissiirto vs Vuodenaikasiirto vs yösiirto.)Mallailin vähän tuonne HomeAssistantin puolelle nyt tuota siirtomaksua. Privachatissa oli puhetta Mikin kanssa siitä, että tekisikö tuota suoraan API:n puolelle, mutta tuntui syntyvän suht helposti tänne Home Assistantin päähänkin.
katso liitettä 82940
Tosin kävi käpy äsken ja onnistuin ylikirjoittamaan kyseisen konffin. Mutta olisiko tämmöiselle tilausta? Yö/päiväsiirto + samalla saa spottisähkön marginaalin myös mukaan.

Innostuin nyt kokeilemaan, että miten tämä onnistuisi HA:lla. Ja heti kärkeen pitää sanoa, että hienoa omistautumista, jos olet pienellä kokemuksella lähtenyt yrittämään. Se on hieno juttu ja tosiaan tärkeintä on, että olet saanut datan tulemaan sisään NodeRedillä!Jos olisin koodari, voisin laittaa koko flow:n jakoon, mutta oma räpellys on varmaan juuri ja juuri toimiva ilman ja luultavasti hyvien koodaustapojen vastainen. Laitoin kuitenkin alle kuvan flow:n palikoista. Ehkä joku osaavampi tekee tuulivoimaennusteesta valmiin ja toimintavarman ratkaisun suoraan HA:lle.
sensor:
- platform: rest
resource_template: https://api.fingrid.fi/v1/variable/245/events/xml
name: SHF Test Wind
value_template: 'OK' # static value as sensor is not updated regularly
headers:
x-api-key: "CENSORED"
params:
start_time: "{{ (now() - timedelta(days = 1)).strftime('%Y-%m-%dT%H:00:00Z') }}"
end_time: "{{ (now() - timedelta(days = -1)).strftime('%Y-%m-%dT%H:00:00Z') }}"
json_attributes:
- "events"
scan_interval: 3600
type: custom:apexcharts-card
now:
show: true
color: '#ff0000'
yaxis:
- id: production
show: true
decimals: 0
align_to: 1
apex_config:
tickAmount: 4
seriesName: pyynti
forceNiceScale: true
show:
last_updated: false
header:
standard_format: false
show: true
show_states: true
colorize_states: true
title: Tuulituotanto
graph_span: 48h
span:
start: day
offset: +0h
series:
- entity: sensor.shf_test_wind
yaxis_id: hinta
name: Wind forecast
extend_to: now
type: area
curve: stepline
group_by:
func: last
duration: 60m
stroke_width: 1
data_generator: |
return entity.attributes.events.event.map((d, index) => {
return [new Date(d["start_time"]).getTime(), entity.attributes.events.event[index]["value"]*1];
});
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
Tätähän voisi varmaan tehdä Excelillä? Omalta firmalta saa ainakin ulos excelissä edellisen 12kk sähkönkäytön. Siihen sitten vähän näpräilyä, että saa vuorokauden tunnin ulos ja sen perusteella siirtohinta + vähän summailua. Vai mitä sulla oli ajatuksissa? Jotenkin Shellyn kanssa tehdä jonkinlaista muuta analyysia?Itseäni kiinnostaisi alkaa simuloimaan eri siirtotuotteiden hintaeroa toteutuneella sähkönkäytöllä.
Innostuin nyt kokeilemaan, että miten tämä onnistuisi HA:lla. Ja heti kärkeen pitää sanoa, että hienoa omistautumista, jos olet pienellä kokemuksella lähtenyt yrittämään. Se on hieno juttu ja tosiaan tärkeintä on, että olet saanut datan tulemaan sisään NodeRedillä!
Datan saisi ladattua HA:han tämmöisellä YAML-konffilla (kunhan tuonne laittaa oman x-api-key:n ja halutessaan muokkaa noita päivämäärähakuja):
Kuvaajakoodi tässä:YAML:sensor: - platform: rest resource_template: https://api.fingrid.fi/v1/variable/245/events/xml name: SHF Test Wind value_template: 'OK' # static value as sensor is not updated regularly headers: x-api-key: "CENSORED" params: start_time: "{{ (now() - timedelta(days = 1)).strftime('%Y-%m-%dT%H:00:00Z') }}" end_time: "{{ (now() - timedelta(days = -1)).strftime('%Y-%m-%dT%H:00:00Z') }}" json_attributes: - "events" scan_interval: 3600
Tällä sai aikaan tämmöistä:YAML:type: custom:apexcharts-card now: show: true color: '#ff0000' yaxis: - id: production show: true decimals: 0 align_to: 1 apex_config: tickAmount: 4 seriesName: pyynti forceNiceScale: true show: last_updated: false header: standard_format: false show: true show_states: true colorize_states: true title: Tuulituotanto graph_span: 48h span: start: day offset: +0h series: - entity: sensor.shf_test_wind yaxis_id: hinta name: Wind forecast extend_to: now type: area curve: stepline group_by: func: last duration: 60m stroke_width: 1 data_generator: | return entity.attributes.events.event.map((d, index) => { return [new Date(d["start_time"]).getTime(), entity.attributes.events.event[index]["value"]*1]; }); show: header_color_threshold: true legend_value: false in_header: false name_in_header: false extremas: true
katso liitettä 82977
Lopputulos ratkaisee ja tosiaan tärkeintä on, että esim. se tuuliennustedata tulee läpi. Itse olen enemmän "koodari", mutta arvostan paljon sitä, että on intoa yrittää ja koettaa. Ja nykyiset low-code/no-code systeemit mahdollistavatkin sitten onneksi myös paljon ilman koodinpätkän kirjoittamista.Hieno esimerkki! Arvelinkin, että tämä menee aika suoraviivaisesti HA:n puolella, jos vain osaa. Tuossa YAMLissa on jotain, mikä on tehnyt siitä itselleni hankalaa aloittaa. En ole tosin varsinaisesti edes yrittänyt. Pythonilla aloitin syksyllä harrastukset, mutta totesin, että menee HA:n kanssa hankalaksi. Node Redin kanssa on onnistunut moni asia, mutta onhan tuo HA:n oma YAML varmaan useimmiten lopulta yksinkertaisin.
Taipumusta on kyllä tehdä asiat omalla tavalla ja varmaan tulee aika monesti kiivettyä puuhun takaperoisesti.
No nyt olisi Githubissa kuluvan päivän arvot sensorin attribuuteissa.Toimii, mutta tämä lähestymistapa ei tainnut käyttää sitä SHF Control hommelia ? Olisi ollut kiva kokeilla eri kertoimia ja sinusoidal/linearin vaikutuksia.Eli tavallaan olisi helpottanut kertoimien hakua omiin tarpeisiin, vaikka eihän noilla mitään dramaattisia vaikutuksia varmaan ole.
type: custom:apexcharts-card
experimental:
color_threshold: true
now:
show: true
color: '#ff0000'
apex_config:
forceNiceScale: true
chart:
height: 165%
yaxis:
- id: pyynti
show: true
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
seriesName: pyynti
- id: hinta
show: true
opposite: true
min: 0
max: ~25
decimals: 2
align_to: 1
apex_config:
tickAmount: 4
show:
last_updated: false
header:
standard_format: false
show: true
show_states: true
colorize_states: true
title: Lattialämmityksen pyynti vs. pörssisähkö.
span:
start: day
offset: +0h
update_delay: 2s
series:
- entity: sensor.shf_electricity_price
yaxis_id: hinta
name: Pörssisähkö c/kWh
extend_to: now
type: area
curve: stepline
opacity: 0.02
group_by:
func: last
duration: 60m
stroke_width: 1
data_generator: |
return entity.attributes.data.map((d, index) => {
return [new Date(d["DateTime"]).getTime(), d["PriceWithTax"]*100];
});
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
- entity: sensor.shf_control_factor_1
yaxis_id: pyynti
name: Ohjaus
unit: C
type: area
curve: stepline
opacity: 0.02
stroke_width: 1
data_generator: |
return entity.attributes.today_values.map((d, index) => {
return [start.getTime()+index*3600000, 22+2*d];
});
show:
header_color_threshold: true
legend_value: false
in_header: false
name_in_header: false
extremas: true
Sain Husdata+Homeassistant kombon toimimaan. Etsimäni säädin olikin termostaatti joten sitä piti ohjata automaatiossa termostaattina eikä lukuna.
Testissä sliderin avulla 10h "kovaa lämpöä" halvoilla tunneilla ja 14h "lämmityksen pienennystä. Eli lasken ulkolämmön ofsettiä (kerron pumpulle että pakasstuu->pumppu nostaa kiertoveden lämpöä tai nostan ulkolämmön ofsettiä mikäli haluan vähemmän lämpöä->kerron pumpulle että ulkona lauhtuu ->vähemmän sähkönkulutusta. Tuntuu toimivan. Eilen kun oli yöllä kova pakkanen oli aamulla sisällä jopa vähän kuuma (23,5c) ja päivän sekä illan pumppu huilaili enemmän jolloin sisälämpö taas normaalimpi 22,0c. Laskuvaraa lämpökäyrässä on vielä paljon. Testailut jatkuu.
MQTT koodi on aika pitkälti valmiina ainakin tämän pumpun osalta Husdatan ohjeissa. Jonkin verran piti muokata esim nimiä että pelasi. Sillä siis ohjaan.Husdata tulossa tännekin. Eikös siinä ollut aika monta ohjausvaihtoehtoa? MQTT, Modbus ja HTTP ainakin?
Mitä laitetta ohjaat Husdatalla?
Vaikuttaa oikein mielenkiintoiselta. Ja ehkä tuosta voisi olla hyötyä tuonne Github-pakettiinkin, jotta ihmiset saisivat esittämälläsi tavalla tiputettua kuormaa mahdollisen sähköpulan uhatessa. Tai ainakin olisi helpot työkalut sen mahdollistamiseksi.Jos tällainen jollain tasolla kiinnostaa, niin voin toki jakaa muidenkin käyttöön.
Rakensin HA:n automaatiot kuormien automaattiselle alasajolle Fingridin API:sta saatavien reaaliaikaisten sähköpula- ja järjestelmän käyttötilannetietojen mukaisesti.
Tästähän nyt ei kansalainen "hyödy" mitään, pois lukien ehkä sen, että ennen kuin esimerkiksi verkko on kaatumassa, voidaan sammuttaa ILPit, LVV:t ja muut ohjattavat kuormat ja mahdollisesti estää niitä menemästä joissain tilanteissa rikki.
Jos tällainen jollain tasolla kiinnostaa, niin voin toki jakaa muidenkin käyttöön.
Laita ehdottomasti jakoon! Itse olen pohtinut tuota samaa nimenomaan kotiautomaatiojärjestelmien ja muun aateekoon näkökulmasta - tietokoneet ja verkkolevyt kun eivät tykkää siitä, jos virrat katoavat kesken kaiken - eli voisi jonkun shutdown-signaalin lähettää valituille laitteille (ja vaikka notifikaation HA:n käyttöliittymään).Rakensin HA:n automaatiot kuormien automaattiselle alasajolle Fingridin API:sta saatavien reaaliaikaisten sähköpula- ja järjestelmän käyttötilannetietojen mukaisesti.
Tästähän nyt ei kansalainen "hyödy" mitään, pois lukien ehkä sen, että ennen kuin esimerkiksi verkko on kaatumassa, voidaan sammuttaa ILPit, LVV:t ja muut ohjattavat kuormat ja mahdollisesti estää niitä menemästä joissain tilanteissa rikki.
Jos tällainen jollain tasolla kiinnostaa, niin voin toki jakaa muidenkin käyttöön.
Painotan, että olen tässä hyödyntänyt muiden kontribuutiota ja kuin sattumalta, Home Assistantin communityssä tästä tuli ketju vastaan, josta pystyin kopioimaan toimivat sensori-määritykset konfiguraatioon. Sen lisäksi, tämä on laadultaan kehnoa ja oikeissa käsissä varmastikin tästäkin saisi hyvin paketoidun kokonaisuuden.Vaikuttaa oikein mielenkiintoiselta. Ja ehkä tuosta voisi olla hyötyä tuonne Github-pakettiinkin, jotta ihmiset saisivat esittämälläsi tavalla tiputettua kuormaa mahdollisen sähköpulan uhatessa. Tai ainakin olisi helpot työkalut sen mahdollistamiseksi.
EDIT: jos se siis sinulle sopii, että nappaisin ajatuksen sinne puolelle.
- platform: rest
resource_template: "https://api.fingrid.fi/v1/variable/336/events/json?start_time={{ (now()-timedelta(hours=4)).strftime('%Y-%m-%dT%H:%M:%SZ') }}&end_time={{ (now()+timedelta(hours=12)).strftime('%Y-%m-%dT%H:%M:%SZ') }}"
name: SHF Sähköpula
value_template: "{{ value_json.0.value }}"
headers:
x-api-key: "TÄHÄN_API_AVAIN"
json_attributes_path: $.0
json_attributes:
- value
- start_time
- end_time
scan_interval: 120
- platform: rest
resource_template: "https://api.fingrid.fi/v1/variable/209/events/json?start_time={{ (now()-timedelta(hours=4)).strftime('%Y-%m-%dT%H:%M:%SZ') }}&end_time={{ (now()+timedelta(hours=12)).strftime('%Y-%m-%dT%H:%M:%SZ') }}"
name: SHF Sähköverkon tila
value_template: "{{ value_json.0.value }}"
headers:
x-api-key: "TÄHÄN_API_AVAIN"
json_attributes_path: $.0
json_attributes:
- value
- start_time
- end_time
scan_interval: 120
type: custom:apexcharts-card
update_interval: 1m
header:
show: true
title: Sähköverkon tila
show_states: true
colorize_states: true
apex_config:
yaxis:
min: 0
legend:
show: false
graph_span: 1d
span:
start: day
experimental:
color_threshold: true
series:
- entity: sensor.shf_sahkoverkon_tila
type: area
curve: stepline
stroke_width: 0
extend_to: now
show:
name_in_header: true
in_header: raw
header_color_threshold: true
color_threshold:
- value: 1
color: lime
- value: 2
color: yellow
- value: 3
color: red
- value: 4
color: black
- value: 5
color: blue
- entity: sensor.shf_sahkopula
type: area
curve: stepline
stroke_width: 0
extend_to: now
show:
name_in_header: true
in_header: raw
header_color_threshold: true
color_threshold:
- value: 0
color: lime
- value: 1
color: yellow
- value: 2
color: red
- value: 3
color: black
yaxis:
- decimals: 0
max: 5
min: 0
apex_config:
tickAmount: 5
alias: Sähköpula laitteet OFF
description: ""
trigger:
- platform: state
entity_id:
- sensor.shf_sahkopula
attribute: value
to: "2"
- platform: state
entity_id:
- sensor.shf_sahkoverkon_tila
attribute: value
to: "2"
condition: []
action:
- service: switch.turn_off
data: {}
target:
entity_id:
- switch.xxxxxx
- switch.xxxxxx
- switch.xxxxxx
- switch.xxxxxx
- switch.xxxxxx
- switch.xxxxxx
- switch.xxxxxx
device_id:
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- service: switch.turn_on
data: {}
target:
entity_id: switch.xxxxxxxxxxxxx
- service: notify.mobile_app_MATKAPUHELIMESI_NIMI
data:
message: Sähköpulan ja/tai sähköverkon tilan takia laitteet sammutettu
title: Sähköpula / sähköverkon häiriö
mode: single
Suorat linkit näihin kahteen tietoon ovat:Laittaisitko linkin näihin kyseisiin tietoihin? Nämä ilmeisesti siis reaaliaikaisia tietoja ja näihin perustuvat ohjaukset vastaa todelliseen tarpeeseen?
sensor:
- platform: rest
resource_template: https://api.fingrid.fi/v1/variable/336/events/xml
name: SHF Electricity shortage
unique_id: shf_electricity_shortage
value_template: '{{ value_json.events.event.value }}'
headers:
x-api-key: "CENSORED"
params:
start_time: "{{ (utcnow() - timedelta(minutes = 3)).strftime('%Y-%m-%dT%H:%M:%SZ') }}"
end_time: "{{ (utcnow() + timedelta(hours = 2)).strftime('%Y-%m-%dT%H:00:00Z') }}"
scan_interval: 180
Suorat linkit näihin kahteen tietoon ovat:
Sähköpulan reaaliaikainen tieto
Sähköverkon reaaliaikainen tila
Ja kyllä, molemmat ovat täysin reaaliaikaisia (päivitys 3min välein) ja uskoisin, että näiden läpi mahdolliset sähköpula- ja/tai verkon häiriötilanteet tulevat nopeimmin, kuin minkään muun kanavan.
sensor:
- platform: rest
resource_template: https://api.fingrid.fi/v1/variable/336/events/xml
name: Fingrid Electricity Shortage
value_template: '{{ value_json.events.event[-1].value }}'
headers:
x-api-key: "CENSORED"
params:
start_time: "{{ (utcnow() - timedelta(minutes = 60)).strftime('%Y-%m-%dT%H:%M:%SZ') }}"
end_time: "{{ (utcnow() + timedelta(days = 1)).strftime('%Y-%m-%dT%H:00:00Z') }}"
json_attributes_path: "events"
json_attributes:
- "event"
scan_interval: 180
Kiitos, tämä toimii paremmin. Toki sensorin attribuutteihin timestampit tulostuvat muodossa +00h, joka on vain visuaalinen virhe. HA:n timezone on oikein, joten siitä ei ole kiinni. Niin se tosin teki tuolla aiemmallakin koodinpätkällä.Tulipa kokeiltua ja tämmöisellä tosiaan saisi sähköpulasta datan. Attribuutteihin saa talteen "historian" (muokkaa pituus start_time-rivillä) ja uusin arvo tulee näemmä nätisti indeksillä -1 anturin arvoksi.
YAML:sensor: - platform: rest resource_template: https://api.fingrid.fi/v1/variable/336/events/xml name: Fingrid Electricity Shortage value_template: '{{ value_json.events.event[-1].value }}' headers: x-api-key: "CENSORED" params: start_time: "{{ (utcnow() - timedelta(minutes = 60)).strftime('%Y-%m-%dT%H:%M:%SZ') }}" end_time: "{{ (utcnow() + timedelta(days = 1)).strftime('%Y-%m-%dT%H:00:00Z') }}" json_attributes_path: "events" json_attributes: - "event" scan_interval: 180
Olisi tilausta. Eilen aamusta paloi käpy, kun entso-e:n DNS oli nurin (nordpool integraation ongelmat palasi mieleen), niin otin tämän käyttöön. Mutta noiden lisäkulujen ymppäystä mukaan kaipaan.Tosin kävi käpy äsken ja onnistuin ylikirjoittamaan kyseisen konffin. Mutta olisiko tämmöiselle tilausta? Yö/päiväsiirto + samalla saa spottisähkön marginaalin myös mukaan.
Ensimmäinen testi sallittujen tuntien haarukoinnista HA:lla takana. Edelleen mennään jalat irti maasta ja teoriatasolla, kun ei ohjattavaa vielä ole. Ajatuksena on tehdä liukuva tarkastelu lämmitystarpeesta eli valitun ajanjakson (esim. -12 h ... + 24 h) tuntihintojen ja ulkolämpötilan perusteella määritetään optimaaliset tunnit lämmitystä varten. Tuntimäärät saa syöttää HA:ssa eri lämpötiloille ja välit interpoloidaan syötetyistä tunneista.
Omassa toteutuksessa ei ole vielä mukana historiatietoa menneistä sallituista tunneista eli nykyinen tarkastelu katsoo aina tulevaisuuteen. Pienellä lisäyksellä historiatiedon saa mukaan, jolloin tarkastelu on vähän enemmän oikea, kun toteutuneet lämmitystunnit saa mukaan.
Alla olevassa kuvassa sallittuID kertoo, onko menossa oleva tunti ns. lämmitystunti (numero 0 = ei sallittu). Numero 3 on rank-tiedon perusteella mukana oleva tunti (määräävä tekijä), numero 2 alemman hintarajan alittava tunti, numero 1 ylemmän hintarajan alittava tunti. Numerolla 4 on kuvattu tunti, joka on mukana sen vuoksi, ettei "lämmityskatko" tule liian pitkäksi - valintaperusteena halvin tunti siten, että lämmityskatkon ehto täyttyy. Tämä viimeisin tarkastelu ei ole tosin valmis, mutta alla olevassa esimerkissä sattui toimimaan. Aika näyttää tarvitseeko noita 4-tunteja lämmityksessä vai ennemmin ehkä käyttöveden kanssa.
Nämä ihan vain harjoituksia, mutta eiköhän nämä jossain muodossa tule aikanaan todelliseen ohjaukseenkin.
Alla muutama kuvakaappaus HA:sta.
Energy valikko toimii, kunhan pörssihinta on euroina ei sentteinä.Tarkoitus tällä kaikella siis ennakoida tuleva sähkölasku![]()
Nyt olisi price_margins-haarassa tämmöinen koeversio: https://github.com/T3m3z/spotprices2ha/tree/price_marginsOlisi tilausta. Eilen aamusta paloi käpy, kun entso-e:n DNS oli nurin (nordpool integraation ongelmat palasi mieleen), niin otin tämän käyttöön. Mutta noiden lisäkulujen ymppäystä mukaan kaipaan.
Jos tästä saisi vähän kommentteja, että toimiiko vai ei, niin voisin sitten laittaa tuonne päähaaraan sen jälkeen. Ellei nyt hirveitä bugeja löydy.Nyt olisi price_margins-haarassa tämmöinen koeversio: https://github.com/T3m3z/spotprices2ha/tree/price_margins