HomeAssistant ja sähköpörssiohjaus

Temez

Aktiivinen jäsen
Mikin api.spot-hinta.fi -ketjun puolella oli keskustelua siitä, että HomeAssistant-kulmasta voisi olla oma ketjunsa. Tässäpä siis se. Kirjailin puhtaana tajunnanvirtana juttuja ylös tänne eivätkä ole missään erityisessä järjestyksessä. Ja moni asia puuttuu, mutta onpahan näillekin nyt oma ketjunsa.

Itse käytän Nordpoolin Custom Componenttia (https://github.com/custom-components/nordpool) ja FMI:tä omana datalähteinäni. Ohjaavat ILP:tä infrapunalla ja sitten vanhempaa Nibe F410P:tä releillä huijaten ulkolämpötilaa. Puhelimeen tulee notifikaatteja siitä, että jos kotiautomaation mielestä olisi seuraavan 12h ajanjaksolla syytä lämmittää takkaa tai vaihtoehtoisesti se kuvittelee ILP:n ja PILPin riittävän lämmitykseen.

Nordpoolin komponentin asentaminen
Helpointa lienee seurata jo valmiita ohjeita. Tässä asennusvideo (tosin ruotsinkielisessä HA:ssa). Asennusohjeet HACSiin, Nordpool-integraatioon sekä kuvaajien lisäämiseen. Englanniksi blogipostaus, jossa tehdään vastaavanoloista hommaa.

Ajatuksia automatisoinnista
Tässä Hyötynen.iki.fi:stä suomenkielistä tekstiä siitä, että kuinka Input Numberilla ja pikkaisella template-koodaamisella saisi aikaan dynaamisia kytkentärajoja.

Template-anturi, joka palauttaa TRUE määritellyn hintarajan alle tai jos halvimmat x tuntia menossa
Koodi:
template:
  - sensor:
    - name: "Nordpool cheap hours"
      state: >
            {% set hours = 8 %}
            {% set price_limit = 0.05 %}
            {% set sensor_id = 'sensor.nordpool_kwh_fi_eur_3_10_0' %}
            {{ states(sensor_id) | float < price_limit or (state_attr(sensor_id,'today') | sort)[hours-1] >= states(sensor_id) | float  }}

Sääennusteita
Mahdollista käyttää joko suoraan ilman erityisiä toimenpiteitä löytyvää yr.no-integraatiota tai sitten asentaa custom_component, jolla saa FMI:ltä avointa dataa: https://github.com/anand-p-r/fmi-hass-custom

Sääennusteiden avulla on sitten mahdollista katsoa tulevaisuuteen lämmityksen osalta. Itsellä on template-anturi Home Assistantissa, joka katsoo 24h eteenpäin lämmitystarvetta ja toinen anturi 3h päähän. Näiden perusteella sitten säädetään lämmitystä aavistuksen suuntaan tai toiseen, mutta ei mitään maagista.

Mikin API:sta ttk2:sen toteutus datan lataamiseen

Mikin API:sta kyllä/ei-lämmitystiedon hakeminen

Sensorien päivittäminen vain tiettyyn aikaan
Jedillä oli postauksessa hyvä ajatus tähän: https://lampopumput.info/foorumi/threads/yksinkertainen-ohjelmistorajapinta-api-sähkön-pörssihinnan-hakemiseen.33938/page-13#post-550530

Käytännössä sensorille kerrotaan päivitysväliksi vaikkapa 24h scan_interval asetuksella ja sitten automaatiosäännöllä määräajoin päivitetään anturi. Tätä voi käyttää esimerkiksi Mikin API:n kuorman vähentämiseen, kun tietoja ei tarvitse latailla joka minuutti.
 

Temez

Aktiivinen jäsen
  • Keskustelun aloittaja
  • #2
Mikin kanssa juteltiin hänen API:nsa yhdistämisestä HomeAssistanttiin/HA ns. "oikealla integraatiolla". Suunnitelmissa oli sellainen koodata, mutta hetken mietittyäni se ei olisi ollut yhtään sen helppokäyttöisempi vasta-alkajille kuin Nordpoolin custom component, jonka kanssa ilmeisesti oli ollut ongelmia. Tai jos haluaisi helposti käyttöönotettavan, niin pitäisi saada HomeAssistantiin sisäänrakennetuksi integraatioksi, jossa sitten olisi taas enemmän hommaa/ylläpidettävää jne.

Noh, hetken juteltuamme löytyi keino (maustettuna pienellä API-muutoksella) ladata dataa järkevästi Home Assistantiin sisään käytännössä lähes samaan formaattiin kuin Nordpoolin-integraatiokin tekee. Tästä sitten jatkoajatuksena oli tehdä mahdollisimman yksinkertainen copypastella käyttöönotettava perussetti, jolla saisi A) hinnat HA:han, B) mahdollisuus visualisointiin, C) valmiit anturit ja muutamia UI-elementtejä "peruskäyttöön", D) edellä mainittujen avulla osan Mikin API:n toiminnoista jäljentäminen HA:han ja E) valmiita automaatiokyvykkyyksiä. Jottei tarvitsisi sitten itse Template-sensorien kanssa niin paljoa pyöritellä. Setistä voi ottaa käyttöön pelkän Rank-rajauksen tai hintarajauksen tai näiden molempien yhdistelmän.

Syntyi sitten tosiaan seuraavanlaista BETA-tason settiä (ohjeita ja kuvia alla, näitä jaotteluita ei tule mukana paketissa, mutta voit lisätä itse haluamasi elementit haluamallesi sivulle HA:n käyttöliittymässä). Valmiita antureita: keskimääräinen hinta tänään, hinta nyt, tunnin järjestysluku/rank nyt. Lisäksi voi syöttää haluamansa määrän tunteja "Average price hours"-sliderin kautta ja systeemi laskee x tunnilta keskihinnan. Laitteiden ohjaukseen on kolme anturia: "Price acceptable/Rank Acceptable/Rank or Price acceptable". Nämä palauttavat on/off-tyyppistä tietoa ja niihin voi suoraan vaikuttaa kahdella käyttöliittymän elementillä eli "Max Rank allowed" ja "Max Price Allowed".

Eli tosiaan tämmöiset anturit (ilman tätä käyttöliittymän ryhmittelyä) olisi tarjolla:
1669615160107.png

Asennusohjeet
EDIT: alkuperäisen postauksen jälkeen koodi siirtyi Githubiin. Uusin versio asennusohjeineen löytyy täältä: https://github.com/T3m3z/spotprices2ha/

Suosittelen varmuuskopion ottamista ennen muutoksia. Tämä onnistuu Settings>System>Backups>alhaalla nappi Create Backup. Kannattaa valita Full Backup ja myös ladata se varmuuskopion muodostumisen jälkeen (jossa voi hetki kestää) omalle koneelle talteen. Ohjevideo Youtubesta tässä.
  1. Asenna ensin "File Editor". Perusohjeet löytyvät täältä, mutta lyhyesti: Settings>Addons>alhaalta Add-on Store>"File Editor">Install>Odota asentumista>lisää sivupalkkiin halutessasi valitsemalla "Show in sidebar">käynnistä painamalla Start>paina Open Web UI.
    • Tämä vaihe on lähinnä aloittelijoille. Saman voi myös tehdä SSH:lla tai Samban yli ja muitakin tapoja varmasti on. Vaiheen tarkoitus on mahdollistaa konfiguraatiotiedostojen editointi.
  2. Tässä vaiheessa sinun pitäisi olla File Editor auki. Vasemmasta ylälaidasta kansion kuvaketta. Varmista, että olet kansiossa /config (tai jos sinulla on jokin eksoottisempi asennus, niin samassa kansiossa kuin configuration.yaml-tiedosto on) ja lisää/uploadaa sinne liitteenä oleva spot-price.yaml. Huom! Poista liitteestä loppuosa .txt, jotta tiedostonimeksi tulee tosiaan spot-price.yaml, sillä foorumi ei antanut lisätä liitettä .yaml-päätteellä.
    • EDIT: Koodi laitettu Githubiin, jossa jatkoylläpito eli sieltä löytyvät sekä asennusohjeet englanniksi että uusin versio.
  3. Muokkaa tiedostoa configuration.yaml sisältöä niin, että "homeassistant:" -rivin jälkeen tulee alla esitetyssä muodossa kaksi tärkeäksi merkittyä riviä. Huomioi, että sisennyksien pitää olla samalla tavalla kuin aiemmissa riveissä. Jätä aiempi koodi ennalleen. Jos tiedostossa ei ole "homeassistant:"-riviä, niin voit lisätä alla olevat pätkät sellaisenaan.
    YAML:
    homeassistant: # Etsi tämä kohta
      # Tässä välissä voi olla muuta konfiguraatiota. Sisennys oltava täsmälleen samalla tavalla kuin muissa riveissä. Jätä aiempi koodi ennalleen.
      packages: # UUSI JA TÄRKEÄ RIVI, HUOMIOI SISENNYS
        pack_1: !include spot-price.yaml # UUSI JA TÄRKEÄ RIVI, HUOMIOI SISENNYS
      # Tässä välissä voi olla muuta konfiguraatiota. Sisennys oltava täsmälleen samalla tavalla kuin muissa riveissä. Jätä aiempi koodi ennalleen.
  4. Käynnistä Home Assistant uudelleen. Settings>System>ylälaidasta oikealta Restart.
Käyttöliittymä
Katso yllä olevasta kuvasta haluamiesi anturien kuvat. HA:n etusivulla oikeasta ylälaidasta kolme pistettä ja sen takaa Edit Dashboard, jotta pääset muokkaustilaan. Paina oikealta alhaalta "Add Card" ja syötä hakuun "entities". Tällä korttityypillä voi näyttää järjestelmässä olevia antureita jne. käyttöliittymässä. Tee asetukset esimerkiksi alla olevan kuvan mukaisesti:
1669615190191.png


Automatisointi
Tämä riippuu paljon siitä, että millaisia ohjattavia laitteita sinulla on. Mutta esimerkkinä voisi tehdä, että Trigger-kentässä valitsee tilamuutoksen (eli "State"), muuttuvaksi anturiksi (eli kenttään Entity ID) "Price or Rank Acceptable" ja sitten Actions-osuuteen yksi Choose, jossa kaksi vaihtoehtoa. Vaihtoehdossa 1 tarkistetaan, että onko "Price or Rank Acceptable" tilassa "On" ja tehdään sitten jotain sen perusteella. Alalaidasta saa laitettua "Add default actions" eli sinne saa sitten kerrottua toimenpiteen, jonka HA:n pitää tehdä, jos anturi ei ole tilassa ON. Erilaisia ohjevideoita löytyy Youtubesta mukavasti.

Automaation trigger-ehtoina voit käyttää seuraavia antureita:
  • State-triggers:
    • Price Acceptable, palauttaa On/Off sen mukaan onko hinta nyt yli vai alle "Max Price allowed" sliderin arvon
    • Rank Acceptable, palauttaa On/Off sen mukaan onko hinta nyt yli vai alle "Max Rank allowed" sliderin arvon
    • Price or Rank Acceptable, palauttaa On/Off sen mukaan onko jompikumpi edellisistä "päällä"
  • Time-triggers:
    • Cheapest Period start, johon tulee halvin tiedossa oleva tänään tai huomenna oleva asettamasi pituinen jakso. Triggerinä tehtävissä näin:
      1669616794382.png

Ajatuksia sääohjauksesta
Mikin API:n säätiedot perustuvat YR.NO:n dataan. Tähän löytyy suoraan HomeAssistantista sisäänrakennettu integraatio.

Dynaamista Rankin muuttumista voi matkia automaatiolla, joka lukee YR.NO:n tuomaa dataa ja kirjoittaa sitten sen perusteella arvoja "Max Rank allowed"-kenttään dynaamisesti.

BONUS: Hintojen visualisointi
EDIT: alkuperäisen postauksen jälkeen @aol paranteli kuvaajakoodia. Uusin versio täällä: https://github.com/T3m3z/spotprices2ha/

Tämä ei ole ihan täydellinen, mutta jos haluat visualisoida hinnat, niin tässä jotain ajatuksia (alkuperäinen toteutus täällä: https://www.creatingsmarthome.com/i...d-how-to-automate-devices-for-cheapest-hours/ ).
  1. Lataa tiedosto apexcharts-card.js täältä: https://github.com/RomRider/apexcharts-card/releases/tag/v2.0.1
  2. Mene File Editorilla Home Assistantin kansioon /config (eli sinne missä configuration.yaml on).
  3. Tee kansio www ja lisää apexcharts-card.js tuohon kansioon.
  4. Home Assistantissa mene etusivulle, ylälaidasta kolme pistettä, Edit Dashboard, uudestaan kolme palluraa ja Manage Resources.
  5. Alhaalta Add Resource. Syötä URL:ksi /local/apexcharts-card.js ja valitse "JavaScript Module". Paina Updatea.
  6. Mene takaisin etusivulle ja varmista, että olet muokkaustilassa (ylälaidasta kolme pistettä, Edit Dashboard). Paina alhaalta Add Card, etsi hakusanalla "Manual" ja valitse ainoa esille tullut vaihtoehto. Syötä vasemmalle seuraava koodi:
  7. YAML:
    type: custom:apexcharts-card
    graph_span: 48h
    header:
      title: Electricity price (c/kWh)
      show: true
    span:
      start: day
    yaxis:
      - min: 0
        decimals: 2
        apex_config:
          forceNiceScale: true
    now:
      show: true
      label: Now
    series:
      - entity: sensor.electricity_price
        type: column
        float_precision: 3
        data_generator: |
          return entity.attributes.data.map((d, index) => {
            return [new Date(d["DateTime"]).getTime(), entity.attributes.data[index]["PriceWithTax"]];
          });
  8. Paina Save ja nauti alla olevan kuvan mukaisesta graafista.

1669535365100.png


Loppukaneetit
Kiitokset vielä Mikille hienosta API:sta ja yhteistyöstä. Koetan tukea ja kehittää tätä yaml-pakettia, mutta vain best-efforttina ja oman arjen pyörittäminen menee tämän edelle eli valitettavasti en pysty kaikessa auttamaan. Enkä voi luvata, että nykyiset koodit toimivat täydellisesti. Toivon, että foorumin HA-käyttäjät alkavat laittaa tänne omia kokemuksiaan/ajatuksia siitä, että mitä yleisesti kannattaisi tehdä, miten muut voisivat hyötyä teidän koodistanne ja miten esim. tätä pakettia kannattaisi jatkokehittää. Voin sitten apinoida tuohon perussettiin mukaan noita, jos tulee hyvää yleiskäyttöistä ideaa. Koodista/toteutuksesta voi löyty jotain virhettä ja parannettavaa ja siksi tämä on vielä BETA-leimalla.

Koodia voit kopioida ja muuttamalla anturien name+unique_id-kenttiä voit luoda tarvittaessa useita tuollaisia "Price or Rank acceptable" -tyyppisiä apuantureita. Tee kuitenkin nämä tuonne configuration.yamlin puolella (tai käyttöliittymän kautta saa aikaan noita numerovalintoja myös), jotta jatkossa sitten voit tiputtaa mahdollisen uuden version spot-price.yamlista edellisen päälle ja itse tekemäsi koodi/konfiguraatio toimii edelleen.

Ja loppuun vielä Disclaimer, että tämä on nyt harrastuksena tehty koodinpätkä, joten käytä omalla vastuullasi :)

(Huhhuh, tulipas pitkä viesti :) )
 

Liitteet

  • spot-price.yaml.v0.1.1.txt
    6,4 KB · Katsottu: 299
Viimeksi muokattu:

-Teme-

Aktiivinen jäsen
Näyttää hyvältä, pitää illalla alkaa ottamaan käyttöön.
Se mikä tuli mieleen, että kun on aiempia yaml sensoreita ja Mikin rest api konffiksia tehtynä, niin on syytä tarkastaa ettei ole käyttänyt samaa nimeä tuon paketin sensorien kanssa
 

Mikki

Hyperaktiivi
On kyllä todella siisti paketti. Ja kompakti kooltaan kun huomioidaan, että sisältää pörssihintojen haun ja parsinnan ilman Nordpool pakettia. Onkos @-Teme- se tuo "unique_id" mikä ei saa mennä päällekkäin minkään aiemman kanssa?

@Temez: jos näin on, niin josko skriptissä unique_id:t vaikka nimeää tyyliin"spothintafi_electricity_price". :)
 

jusba31

Jäsen
Mites kun ainakaan omassa configuration.yaml ei ole tuollaista homeassistant: kohtaa?
Lisäsin tuon koodin default_config: alle, mutta ainakaan niin ei mitään tuollaisia entityjä löydy.
Jotain tässä nyt varmaan itse teen väärin, mutta mitähän?
 
Mites kun ainakaan omassa configuration.yaml ei ole tuollaista homeassistant: kohtaa?
Lisäsin tuon koodin default_config: alle, mutta ainakaan niin ei mitään tuollaisia entityjä löydy.
Jotain tässä nyt varmaan itse teen väärin, mutta mitähän?
Ihmettelin samaa. (Mulla käytössä HA Synologyn NAS -purkin dockerissa, josko olis ns karvahattukonfiguraatio.) Pistin configuraation lisärivit näin ja laakista alkoi pelaamaan.
1669629042080.png
 

Temez

Aktiivinen jäsen
  • Keskustelun aloittaja
  • #7
Hyvä havainto, lisätäänpä näin ruokatunnin ratoksi se tuohon ohjeeseen! Oma HA-instanssi on jos vuosia vanha, joten siellä on varmasti monenlaista, mitä peruskonfiguraatiossa ei enää ole.
 

Temez

Aktiivinen jäsen
  • Keskustelun aloittaja
  • #9
Pistin configuraation lisärivit näin ja laakista alkoi pelaamaan.
Ja hyvä tietää, että pelaa ainakin jollain tasolla. Testailu tapahtui vasten omaa HomeAssistantiani ja en kokeillut ns. puhdasta asennusta vasten. Voi löytyä jotain bugia senkin kautta vaikka tarkka koetin olla.
 

aol

Jäsen
Mahtava paketti, kiitoksia kovasti! Duunasin nätimmän graafin väreillä ja korjasin eurot senteiksi:

Screenshot 2022-11-28 at 12.13.07.png


Vielä kun saisi nuo price acceptable ja rank acceptable ohjaukset jotenkin näkyviin tähän... Koskin eilen illalla ensimmäistä kertaa koko home-assistant:iin, niin omat taidot eivät vielä ihan riitä. Edit: jostain syystä "extremas" ja otsikkohinta ovat oransseja, vaikka piti mennä tuon graafin värien mukaan.

YAML:
type: custom:apexcharts-card
graph_span: 48h
experimental:
  color_threshold: true
header:
  title: Electricity price (c/kWh)
  show: true
  show_states: true
  colorize_states: true
span:
  start: day
yaxis:
  - min: 0
    decimals: 2
    apex_config:
      forceNiceScale: true
now:
  show: true
  label: Now
series:
  - entity: sensor.electricity_price
    show:
      extremas: true
      header_color_threshold: true
    type: column
    float_precision: 3
    data_generator: |
      return entity.attributes.data.map((d, index) => {
        return [new Date(d["DateTime"]).getTime(), entity.attributes.data[index]["PriceWithTax"]*100];
      });
    color_threshold:
      - value: 0
        color: 368f39
      - value: 10
        color: a3b34d
      - value: 20
        color: ffd57e
      - value: 30
        color: f18c56
      - value: 40
        color: de425b
 

jusba31

Jäsen
Mahtava paketti, kiitoksia kovasti! Duunasin nätimmän graafin väreillä ja korjasin eurot senteiksi:

katso liitettä 82167

Vielä kun saisi nuo price acceptable ja rank acceptable ohjaukset jotenkin näkyviin tähän... Koskin eilen illalla ensimmäistä kertaa koko home-assistant:iin, niin omat taidot eivät vielä ihan riitä. Edit: jostain syystä "extremas" ja otsikkohinta ovat oransseja, vaikka piti mennä tuon graafin värien mukaan.

YAML:
type: custom:apexcharts-card
graph_span: 48h
experimental:
  color_threshold: true
header:
  title: Electricity price (c/kWh)
  show: true
  show_states: true
  colorize_states: true
span:
  start: day
yaxis:
  - min: 0
    decimals: 2
    apex_config:
      forceNiceScale: true
now:
  show: true
  label: Now
series:
  - entity: sensor.electricity_price
    show:
      extremas: true
      header_color_threshold: true
    type: column
    float_precision: 3
    data_generator: |
      return entity.attributes.data.map((d, index) => {
        return [new Date(d["DateTime"]).getTime(), entity.attributes.data[index]["PriceWithTax"]*100];
      });
    color_threshold:
      - value: 0
        color: 368f39
      - value: 10
        color: a3b34d
      - value: 20
        color: ffd57e
      - value: 30
        color: f18c56
      - value: 40
        color: de425b
Koitappas lisätä tonne show alle tällänen
in_header: raw
 

jusba31

Jäsen
Sen copy/pastetinkin jo aiemmin toisaalta, ja jostain syystä alkaa näyttämään NaN tuossa tämän hetkisessä arvossa.
Mulla on tällänen taulukko ja sen koodi tossa alla. Saisitko siitä apuja?
Hinta nyt siis muuttuu aina tuon palkin värin mukaan.

Screenshot 2022-11-28 at 13.08.17.png

YAML:
- type: custom:apexcharts-card
    apex_config:
      legend:
        show: false
    experimental:
      color_threshold: true
    header:
      show: true
      title: Hinta tänään
      colorize_states: true
      show_states: true
    graph_span: 24h
    span:
      start: day
    now:
      show: true
      label: Nyt
    series:
      - entity: sensor.nordpool_kwh_fi_eur_3_10_024
        name: Hinta nyt
        unit: c/kWh
        offset: '-1sec'
        data_generator: |
          return entity.attributes.raw_today.map((entry) => {
            return [new Date(entry.start), entry.value];
          });
        color_threshold:
          - value: 0
            color: green
          - value: 10
            color: orange
          - value: 30
            color: red
          - value: 50
            color: darkred
        type: column
        stroke_width: -14
        show:
          legend_value: false
          in_header: raw
          header_color_threshold: true
          extremas: true
        extend_to: false
      - entity: sensor.nordpool_kwh_fi_eur_3_10_024
        attribute: min
        type: line
        group_by:
          func: last
          duration: 1m
        name: Päivän alin
        stroke_width: 2
        color: green
        show:
          legend_value: false
          in_header: true
          header_color_threshold: false
          extremas: false
      - entity: sensor.nordpool_kwh_fi_eur_3_10_024
        attribute: average
        type: line
        name: Päivän keskiarvo
        color: yellow
        group_by:
          func: last
          duration: 1m
        stroke_width: 1
        show:
          legend_value: false
          in_header: true
          header_color_threshold: false
          extremas: false
          datalabels: false
      - entity: sensor.nordpool_kwh_fi_eur_3_10_024
        attribute: max
        type: line
        group_by:
          func: last
          duration: 1m
        stroke_width: 1
        color: red
        name: Päivän ylin
        show:
          legend_value: false
          in_header: true
          header_color_threshold: false
          extremas: false
          datalabels: false
 
Viimeksi muokattu:

jusba31

Jäsen
Olisiko tuohan vielä saatavilla peak rank erikseen 2.0 versioon? Nyt kun nuo vrk rankin halvimmat tuppaa mennä aina yöhön niin olisi käytön optimoinnin kannalta kiva saada myös päivän 8-20 rank erikseen.
 

-Teme-

Aktiivinen jäsen
On kyllä todella siisti paketti. Ja kompakti kooltaan kun huomioidaan, että sisältää pörssihintojen haun ja parsinnan ilman Nordpool pakettia. Onkos @-Teme- se tuo "unique_id" mikä ei saa mennä päällekkäin minkään aiemman kanssa?

@Temez: jos näin on, niin josko skriptissä unique_id:t vaikka nimeää tyyliin"spothintafi_electricity_price". :)
Tarkoitin kun täältä on jo tullut poimittua konffiksia omaan HA instanssiin, niin sieltä löytyy jo mm. seuraavia jotka tulee tuossa paketissa:
Koodi:
sensor:
  - platform: rest
    resource: https://api.spot-hinta.fi/TodayAndDayForward?HomeAssistant=true
    name: Electricity price
    unique_id: electricity_price
#jatkuu lisäää

#Templaten alta mm.
template:
  - sensor:
    - name: Rank now
      unique_id: electricity_rank_now

ja

  - sensor:
    - name: Electricity price now
      unique_id: electricity_price_now

kun asentaa paketin voi tulla päällekäisyyksiä sensorien nimissä
 

aol

Jäsen
Mulla on tällänen taulukko ja sen koodi tossa alla. Saisitko siitä apuja?
Hinta nyt siis muuttuu aina tuon palkin värin mukaan.

Hieno graafi, on varmasti apua, kiitos. Jos saan ehdottaa, niin editoisitko sen verran, että laitat "code" tagien väliin tuon koodin? Tuolta kolmen pisteen takaa "code" tagit.
 

aol

Jäsen
Parannusehdotus: Koodi githubiin, graafit yms. omina tiedostoina, sekä asennusohjeet README.md tiedostoon.

Lupaan laittaa pull requestia tekemistäni parannuksista. Hommahan toimii nyt jo tosi hyvin, saan yksinkertaisella automaatiolla ohjattua maalämpöpumppua, lämmönalennustoimintoon kytketyn Shelly 3EM kautta. Näyttää toimivan juuri kuten pitääkin. Ohessa oma työpöytäni, jossa käyntitiedon viimeinen piikki on onnistunut automatisointi keskelle päivää sattuneen halvemman tunnin seurauksena.

Screenshot 2022-11-28 at 16.06.06.png
 

Temez

Aktiivinen jäsen
On kyllä todella siisti paketti. Ja kompakti kooltaan kun huomioidaan, että sisältää pörssihintojen haun ja parsinnan ilman Nordpool pakettia. Onkos @-Teme- se tuo "unique_id" mikä ei saa mennä päällekkäin minkään aiemman kanssa?

@Temez: jos näin on, niin josko skriptissä unique_id:t vaikka nimeää tyyliin"spothintafi_electricity_price". :)
Nyt kun vähän tarkemmin pohdin asiaa, niin ei taida tämä olla ihan "läpihuutojuttu" sittenkään. Nimittäin sensor.eletricity_price on "entity_id" (tai yhdistelmä sensor domainia ja sitten se loppuosa on entity_id:tä). Unique_id on eri juttu, se mahdollistaa kyseisen sensorin kustomoinnin UI:n kautta (jossa voi vaihtaa entity_id:tä, nimeä jne.).

Nimestä tuo entity_id taitaa muodostua. Jokaiseen anturiin/elementtiin jne. voisi kai lisätä nimen alkuun tuon "SpotHintaFI", mutta aika sotkuisaa siitä tulisi?

Joskus taannoin entity_id:n sai asetettua yamlissa erikseen, mutta virhettä nyt löi vasten kasvoja eikä dokumentaatiokaan tunne sitä enää.
 

Temez

Aktiivinen jäsen
Parannusehdotus: Koodi githubiin, graafit yms. omina tiedostoina, sekä asennusohjeet README.md tiedostoon.
Tämähän se olisi varmaan seuraava järkevä steppi. Pysyisi koodit siististi kasassa ja kontribuointi helppoa. Katsotaan, kun seuraava inspiraatiopiikki osuu kohdalle, mutta tänään ja mahdollisesti huomenna päivä on pyhitetty arkitöihin.

EDIT: Tai siis niinhän mä sanon, kunnes huomaan tämän olevan kivempaa kuin pyykkääminen/vastaava kotityö.
 

Mikki

Hyperaktiivi
Nimestä tuo entity_id taitaa muodostua. Jokaiseen anturiin/elementtiin jne. voisi kai lisätä nimen alkuun tuon "SpotHintaFI", mutta aika sotkuisaa siitä tulisi?
Vähän on turhaa toistoa toki, mutta ehkä joku tunniste olisi hyvä kuitenkin mikä minimoisi riskit päällekkäisistä nimistä.


@aol: joku bugi muuten graafissa... onkohan YAMLista johtuvaa vai graafikoodista? Ei luvut täsmää. Minusta näyttäisi että voisi olla vaikka aivan viimeisen palkin arvo tuossa hinnassa "nyt".

1669645331526.png
 

Temez

Aktiivinen jäsen
Päätin kokeilla sellaista, että lisään jokaiseen anturiin/ui-elementtiin suht lyhyen "SHF"-etuliitteen (Spot-Hinta.Fi) päällekkäisyyksien estämiseksi. Työnnän tästä version githubiin lähiaikoina, kunhan saan kokeiltua sen toimivuuden.
 

aol

Jäsen
@aol: joku bugi muuten graafissa... onkohan YAMLista johtuvaa vai graafikoodista? Ei luvut täsmää. Minusta näyttäisi että voisi olla vaikka aivan viimeisen palkin arvo tuossa hinnassa "nyt".

Olet ihan oikeassa, se on viimeisen palkin arvo. Tulee vähän erilailla tuo data, kuin tuossa toisessa plugarissa mistä otin pohjan. Koitan fiksata.
 

Temez

Aktiivinen jäsen
Parannusehdotus: Koodi githubiin, graafit yms. omina tiedostoina, sekä asennusohjeet README.md tiedostoon.
Laitoin tuon "perussetin" https://github.com/T3m3z/spotprices2ha -repoon. Tuo kuvaajakoodisi on sen verran hyvän oloinen, etten laittanut sinne sille edes tuota "alkuperäistä" pohjaa. Jos/kun saat viilattua tuota kuvaajaa, niin pistä siitä pull requestia.
 

heebo1974

Jäsen
Muutamasta lisäsensorista voisi olla iloa graafeihin.
Eli kuluvan päivän min ja max hinnat. Seuraavan päivän min, max ja average hinnat.

Nämä olisi myös kivoja, mutten tiedä kuuluuko ne enää tähän addoniin. Jos ei, niin varmaan joku on osannut sellaiset taikoa ja voisi jakaa iloa muillekkin. :)
Eli sensori tmjs joka laskisi kulutuksen mukaan euroja. Näin voisi lisätä graafeihin esim: tänään kulutimme xx €.
Tai miksei vaikka tuntikohtaisesti (ehkä vähän liioittelua) :)
Tiedän, että HA:n energy desktop laskee näitä, mutten tiedä miten ne saisi sieltä ulos omiin graafeihin.
 

Temez

Aktiivinen jäsen
Muutamasta lisäsensorista voisi olla iloa graafeihin.
Eli kuluvan päivän min ja max hinnat. Seuraavan päivän min, max ja average hinnat.

Nämä olisi myös kivoja, mutten tiedä kuuluuko ne enää tähän addoniin. Jos ei, niin varmaan joku on osannut sellaiset taikoa ja voisi jakaa iloa muillekkin. :)
Eli sensori tmjs joka laskisi kulutuksen mukaan euroja. Näin voisi lisätä graafeihin esim: tänään kulutimme xx €.
Tai miksei vaikka tuntikohtaisesti (ehkä vähän liioittelua) :)
Tiedän, että HA:n energy desktop laskee näitä, mutten tiedä miten ne saisi sieltä ulos omiin graafeihin.
Nuo min/max/average voisi olla kyllä hyviä lisätä, jos siitä graafeiluun on apua. Pitää laittaa pohdintalistalle.

Energia*hinta-laskelmat menevät sitten varmaan manuaalilaskennan puolelle, kun en voi tietää lähdeanturin nimeä kulutuksille. Dokumentaatio sanoo, että olisi mahdollista ottaa mille tahansa dashboardille noita Energy-dashboardin elementtejä (lähde: https://www.home-assistant.io/dashboards/energy/) eli voisiko tuo ratkaista ongelmasi? Tosin sieltä ei taida löytyä hyvää näkymää kulutusgraafiksi, joka näyttäisi euroja.
 

Mikki

Hyperaktiivi
Mitäs mieltä olette... pitäisikö nuo laittaa serveriltä jo tulemaan laskettuna? Tuleehan tuohon vastaukseen lisää sisältöä, mutta toisaalta turha kai noita olisi YAML:lissa laskea, kun voisi tehdä keskitetyn toteutuksen? Tuossa YAMLssa nuo "päätason" propertyt saa kai suoraan luettua aika helposti.

Ne tulisi siis vain tähän vasteeseen, ei ilman tuota HomeAssistant parametria:
Mikäköhän on muuten järkevä "null" arvo jos huomisia hintoja ei vielä ole? Enpäs ole ajatellut HA:n näkökulmasta asiaa. C#:ssa on kyllä "nullable" decimal, mutta tykkääkö HA siitä kyttyrää?

1669658483422.png
 
Viimeksi muokattu:

Temez

Aktiivinen jäsen
Nykyistä päivityslogiikan toteutusta ainakin pitäisi viilata, sillä koodi lataa nyt nuo tiedot vain kello 14 jälkeen. Se "sensor.electricity_price" on nyt vain datalaturi ja -säilytin. Että pitäisi rakentaa jokin lataus kello 00:01 (kokeilin tätä alunperin, ei toiminut syystä xyz, en jaksanut debugata) vanhan datan siivoukseen.
 

Mikki

Hyperaktiivi
Nykyistä päivityslogiikan toteutusta ainakin pitäisi viilata, sillä koodi lataa nyt nuo tiedot vain kello 14 jälkeen. Se "sensor.electricity_price" on nyt vain datalaturi ja -säilytin. Että pitäisi rakentaa jokin lataus kello 00:01 (kokeilin tätä alunperin, ei toiminut syystä xyz, en jaksanut debugata) vanhan datan siivoukseen.
Ei rajapinnan kannalta ole paha, jos vaikka päivittää tuon tunneittain ja heittää random 0...180 sekunnin viiveen eteen niin ei ihan samalla sekunnilla haut tapahdu. Jos se yksinkertaistaisi toteutusta siis.

Ei ihan "green coding" mukaista tietenkään, mutta toisaalta skriptien yksinkertaisuudellakin on arvonsa.
 

Temez

Aktiivinen jäsen
@aol in kuvaajakoodi löytyy nyt mergettynä osoitteesta https://github.com/T3m3z/spotprices2ha/ asennusohjeineen. Kiitos! Paljon parempi kuin mitä esim. aiemmin annoin tänne.

Huomio kaikille, jotka asensitte paketin ennen kello 18: rikkova muutos koodissa on nuo sensorien muuttuneet nimet. Jos paketti täyttää tarpeesi, niin voit jatkaa jo asentamallasi. Mutta jos tämä nyt sattuu jatkokehittymään ja tulee uusia ominaisuuksia, niin uuden käyttöönotto voi olla työläämpää, ellet tee sitä nyt.

Koetan pitää rikkovat muutokset minimissä, mutta tuo sensorien nimeäminen riittävän uniikisti jo lähtötilanteessa ei tullut alunperin mieleen.
 

Sukke

Aktiivinen jäsen
Mielenkiintoinen ketju ja hienoja ratkaisuja! Minulle ei ole tuo yaml-oikein auennut tai en ole oikeastaan kunnolla edes yrittänyt, kun se näyttää jotenkin hankalalta. Lähdin tekemään omia ratkaisuja HA:n, Node Redin ja MQTT:n kanssa. Eli käytännössä sensorit on minulla tyyppiä MQTT. Node Red tuuppaa näihin sensoreihin sitten dataa HA:ssa näytettäväksi, datan käsittely valmiilla Nodeilla tai JavaScriptillä. HA on näillä näkymin jäämässä tiettyjen asetusten tekemiseen, Node Redissä tulee olemaan logiikka ja laitteiden ohjaus ja MQTT:llä välitän viestejä. Luultavasti olen tehnyt ratkaisuja aika takaperoisesti, kun kokemusta ei ole juurikaan ollut.

Seuraavassa vaiheesa tulen varmasti napsimaan mallia tästä ketjusta.

Spoilerissa tämän hetkinen näkymä HA:ssa. Lämmitykseen liittyviä valintoja ja logiikka ei ole vielä tehty, mutta tuo tulevien vuorokausien keskilämpötila on varmaankin perusta lämmitystarpeen arvioinnille.

Jostain syystä tuulen nopeusennuste ei kuvaudu oikein oikean puoleiselle y-akselille, mutta toisessa kuvaajassa sademääräennuste kuvautuu. Asetukset näissä käytännössä identtiset. Tuntihintojen haku on Node Redissä kolmen kauppa: entso-e, api.spot-hinta.fi ja manuaalisesti syötetyt hinnat - näistä pisimmälle tulevaisuuteen sisältävä hinta määrää käytettävän lähteen. Jotain pientä viilausta ehkä vielä manuaalisten hintojen koodissa on, mutta melkein toimi...



HA_dashboard3 – kopio.jpg

Tuonne toiseen ketjuun kirjoittelinkin omia tavoitteita automaatiolle. Laitteet tällä hetkellä vielä puuttuu niin ehtii ajankuluksi viritellä HA:ta tai kun vain ehtisi.

Sattuipa sopiva ketju. Tarkoitus olisi alkaa tehdä ensimmäistä "säädintä" nimenomaan HA:n ja Node Redin päälle.

Tällä hetkellä HA:ssa on jo lämpötila-, sade- ja tuuliennusteet (yr.no-api) sekä sähkön tuntihinnat (entsoe-api). Tarkoitus olisi optimoida lämmitystä ja käyttövedenkäyttöä halvoille tunneille. Ohjauksen olisi alkuvaiheessa tarkoitus olla yksinkertainen eli määritetään halutulle ajanjaksolle (esim. vuorokausi) lämmitystarve ja valitaan lämmitystarvetta vastaava sallittujen tuntien määrä sähkön hinnan perusteella. Tuohon sitten lisätään tunti tai kaksi, jolloin esim. vain käyttövedenteko olisi sallittua, jos käyttövesi uhkaa loppua.

En vielä tiedä, minkälaisen ajanjakson ottaisin tarkasteluun ja teenkö tarkastelun liukuvana esim. nykyhetki +/- 12 h vai aina vain seuraava vuorokausi kerrallaan. Jälkimmäinen olisi sikäli helpompi, ettei sallittujen tuntien määrää / vuorokausi ja muita muuttujia olisi tarvetta seurata jatkuvasti päivittyvänä, mutta edellisen etu olisi seuraavan vuorokauden puolelle tulevien kalliiden tai halpojen tuntien huomioiminen. Voisihan tuo aika olla vaikka nykyhetki - 12 ja tulevaisuuteen niin pitkälle kuin tuntihintoja riittää eli +10-34 h?

Sääennusteesta on tällä hetkellä laskettu kuluvan vuorokauden keskilämpötila mitatusta ja ennustetusta tiedosta sekä seuraavan ja sitä seuraavan vuorokauden keskilämpötila ennusteesta. Tuossa liukuvassa vaihtoehdossa säätietojenkin käsittely menee vuorokausikohtaista tarkastelua hieman monimutkaisemmaksi. Tuulta en ajatellut alkuvaiheessa ottaa huomioon sehän saattaa kompensoitua helposti halvoilla tuntihinnoilla, jos asettaa sallituille tunneille raja-arvon myös hinnan perusteella?

Lisämuuttujia saisi ilmanvaihdon ohjauksesta (tuloilman lämpötila, vaihtuvan ilman määrä) sekä huonelämpötilan joustosta. Huonelämpötilan joustoon ajattelin kolmea tasoa: normaali, kova pakkanen tai kallis sähkö, kova pakkanen ja kallis sähkö (tämän suhteen ehdotuksia säätötavasta?). Joustoon liittyen ajattelin laittaa HA:n puolelle myös jonkinlaisen säätimen tai valintamahdollisuuden, jos esim. huonelämpötila uhkaa karata liian alhaiseksi (tai korkeaksi).

Sikäli olen tässä ajoissa, että ohjattavaa ei vielä ole ja toisaalta sähkösopimuskin on kiinteähintainen vielä vuoden päivät. Maalämpösaneeraus on vasta tulossa ja samassa yhteydessä on IV-kone vaihtumassa modbusin kautta ohjattavaan malliin. Kysymysmerkkinä on vielä laitteiden tarkka ohjaus, mutta pitäisi tavalla tai toisella onnistua.

Voihan tässä käydä niinkin, että kun laitteet ja ohjaus on valmis, ei sille olekaan käyttöä, jos sähkö on yleisesti taas kohtuullisen hintaista. Sähköauton lataurin kuormanhallinta on HA:ssa jo myös, sähköauto tosin on sekin vielä vasta tilauksessa.

Aikailla nollista on lähdetty liikkeelle HA:n, Node Redin, ohjelmoinnin ja vähän kaiken suhteen. Rimakaan ei ihan matalalla eli katsotaan miten tässä käy. Alla yksi HA:n dashboard.

 

aol

Jäsen
Koetan pitää rikkovat muutokset minimissä, mutta tuo sensorien nimeäminen riittävän uniikisti jo lähtötilanteessa ei tullut alunperin mieleen.
Hyvä tämä muutos tehdä tässä vaiheessa, kun kovin moni ei ole vielä ehtinyt asentaa. Ei tuo iso homma ollut tehdä automaatiot ja kortit uudelleen. PS. Graafiin piti tehdä jälleen korjaus, on se hyvä juttu että meillä on GitHub, hävettäisi pasteta tänne kerran päivässä uusi :D
 

korsteeni

Vakionaama
^
^
^
kiitos ja kumarrus
on niin valmista sapluunaa että vanha pappakin ilahtuu, tästä tykkään niin että.......
pari pientä mutkaa oli kun käytössä ei ole tuo hassos vaan ihan peruskarsittu yleismalli
 
Viimeksi muokattu:

heebo1974

Jäsen
Dokumentaatio sanoo, että olisi mahdollista ottaa mille tahansa dashboardille noita Energy-dashboardin elementtejä (lähde: https://www.home-assistant.io/dashboards/energy/) eli voisiko tuo ratkaista ongelmasi? Tosin sieltä ei taida löytyä hyvää näkymää kulutusgraafiksi, joka näyttäisi euroja.
Jep, tuon käppyrän saa omalle dashboardille samanlaisena kuin se on siellä Energy Dashboardilla, mutta en ymmärrä miksei niitä sensoritietoja ole avattu käyttöön ? Eli että voisi tehdä omia esim. apexchartteja. Eli HA jo osaa laskea sähkön hinnan pörssisähkön ja kulutuksen mukaan, mutta tuota tietoa ei vaa saa omille charteilleen tekemättä omia sensoreita.
 

aol

Jäsen
Jep, tuon käppyrän saa omalle dashboardille samanlaisena kuin se on siellä Energy Dashboardilla, mutta en ymmärrä miksei niitä sensoritietoja ole avattu käyttöön ? Eli että voisi tehdä omia esim. apexchartteja. Eli HA jo osaa laskea sähkön hinnan pörssisähkön ja kulutuksen mukaan, mutta tuota tietoa ei vaa saa omille charteilleen tekemättä omia sensoreita.
Miten tämä omien sensoreiden teko siis tapahtuu? Onko antaa esimerkkiä?
 

heebo1974

Jäsen
Miten tämä omien sensoreiden teko siis tapahtuu? Onko antaa esimerkkiä?
Vaikea antaa, kun itse yrittää etsiä sitä samaa tietoa. Tai siis itse sensoreiden tekeminenhän on helppoa, sen kun lisää niitä configuration.yaml:iin, mutta se miten se sensorin koodi keksitään onkin sitten jo vaikeata kun ei osaa "koodata".
 

aol

Jäsen
Vaikea antaa, kun itse yrittää etsiä sitä samaa tietoa. Tai siis itse sensoreiden tekeminenhän on helppoa, sen kun lisää niitä configuration.yaml:iin, mutta se miten se sensorin koodi keksitään onkin sitten jo vaikeata kun ei osaa "koodata".
OK. Mulla on ongelma toisin päin, osaan koodata mutta HA ei ole vielä riittävän tuttu, että tietäisin mitä pitää koodata.
 
En saanut ihan toimimaan githubin readme:llä ympäristössä Linux Home Assistant VMwarella.
configuration.yaml näyttää nyt tältä (mulla on tuolla packages kansiossa myös heishamon.yaml):
homeassistant:
__ packages:
____!include_dir_named packages
Mutta tällepä ei kelvannutkaan spot-price.yaml, jonka kopioin packages kansioon, vaan se oli nimettävä muotoon: spot_price.yaml
( _ viivat kuvaa sisennyksiä)
 

aol

Jäsen
En saanut ihan toimimaan githubin readme:llä ympäristössä Linux Home Assistant VMwarella.
configuration.yaml näyttää nyt tältä (mulla on tuolla packages kansiossa myös heishamon.yaml):
homeassistant:
__ packages:
____!include_dir_named packages
Mutta tällepä ei kelvannutkaan spot-price.yaml, jonka kopioin packages kansioon, vaan se oli nimettävä muotoon: spot_price.yaml
( _ viivat kuvaa sisennyksiä)
Laitoin myös packages hakemistoon ja samoin piti renameta spot_price.yaml:ksi. Ilmeisesti tuo !include_dir_named ottaa tiedostonimestä jonkun tokenin jossa ei saa olla miinusmerkkiä.
 

heebo1974

Jäsen
Hmm.. Nordpool integraation hinnat ovat jo aikaa sitten päivittyneet, mutta tämä ei tällähetkellä vieläkään näytä huomisia hintoja.

Ajoin vielä updaterin väkisellä, eikä siltikään tullut..

1669898923219.png


Edit: En tiedä mihin ihme viiveeseen tämä meni ?

1669899110849.png



EDIT2: Heh no nyt ne sitten tulivat tässä samalla kun ihmettelin asiaa.. :D
1669899284121.png


EDIT3:
Eli onko tämä joku serverikuormitusta vähentävä hommeli ? Sinänsä harmi, jos kestää ns. tunteja, kun itse ainakin normaalisti kahden maissa näitä huomisen hintoja alan tarkkailemaan.
 
Viimeksi muokattu:
Back
Ylös Bottom