Spot-hinta.fi - Yksinkertainen pörssiohjaus API ja sitä käyttävät automaatioskriptit

markok

Aktiivinen jäsen
Halvimmat tunnit katsotaan vuorokauden mukaisesti. Tämä on valittu kun simuloin joskus että jos heti klo 14 lasketaan uudet halvimmat tunnit niin joskus ne osuu kaikki tälle päivälle ja huomiseen ei yhtään. Tässä on vähän valittava jommin kummin.

Voi käyttää negatiivista maxPrice arvoa, mutta luulisin kyllä että se on aika jyrkkä rajaus tunneille.

Ja kyllä vain voit listata kuukaudet kun sääntö on voimassa. Se on se AllowedMonths parametri. Voit samaan releeseenkin tehdä eri säännöt kesälle ja talvelle.

Spot-hinta skripti kyllä pysähtyy jos sen stoppaat. Luulen että olet käyttänyt sitä "elspot" skriptiä joka käyttää ajastinta. Se ajastin jää elämään jos skriptin pysäyttää. Nämä spot-hinta skriptit ei käytä scheduleria.

Kommentoin myöhemmin noita muita juttuja...
Kiitos näistä kommenteista. Tuo selvitti paljon tämän scriptin toiminnasta. Ei tullut mieleen ohjata yhdellä scriptillä samaa relettä eri ehdoilla, mutta tuohan on kyllä tietyissä tilanteissa kätevää.

Tuo elspot scripti se edellinen muistaakseni oli ja se tosiaan käytti tuota schedulea. Hyvä puoli siinä ajastimessa oli se, että sitä pystyi tarvittaessa helposti hienosäätämään ja näki milloin lämmitys tapahtuu, mutta muuten se ei ehkä ole paras tapa asian toteuttamiseen. Näkeekö tässä spot hinta scriptissä mistään milloin seuraava lämmitysjakso käynnistyy?
 

markok

Aktiivinen jäsen
Nyt olisi ensimmäisen yön tulos selvillä ja ihan tuo ei toiminut niin kuin pitää. Mikähän on mennyt pieleen? Koodi näyttää tältä:

Screenshot_2023-09-23-07-28-57-350_com.android.chrome.jpg

Ja tulos tältä:

Screenshot_2023-09-23-07-29-36-972_com.danielstone.energyhive.jpg


Eli lämmitys käynnistyi ihan oikein klo 00:00 kun sähkö oli halvinta. Olin mielestäni asettanut yhden tunnin lämmityksen, mutta jo tuo ensimmäinen pätkä on yli tunnin. Tämän lisäksi lämmitystä on yritetty käynnistää monta kertaa myöhemmin. Jälkimmäisten jaksojen lyhyys johtuu todennäköisesti siitä, että termostaatti on katkaissut lämmityksen.
 

Mikki

Hyperaktiivi
No se on tuo PriceAlwaysAllowed... Eli aina sallittu hinta. Jos se on 999 niin lämmitys sallitaann joka tuntiä. Laita -999 jos et halua sallia mitään tiettyä hintaa aina.

Ja jos haluat yhden halvimman tunnin päälle, niin sitten RanksAllowed pitää olla "1". Jos kaksi halvinta niin "1,2".

Tuo maxPrice arvo on aika kireälle asetettu. Sallii siis lämmityksen vain kun hinta on nolla tai alle sen.
 
Viimeksi muokattu:

markok

Aktiivinen jäsen
No se on tuo PriceAlwaysAllowed... Eli aina sallittu hinta. Jos se on 999 niin lämmitys sallitaann joka tuntiä. Laita -999 jos et halua sallia mitään tiettyä hintaa aina.

Ja jos haluat yhden halvimman tunnin päälle, niin sitten RanksAllowed pitää olla "1". Jos kaksi halvinta niin "1,2".

Tuo maxPrice arvo on aika kireälle asetettu. Sallii siis lämmityksen vain kun hinta on nolla tai alle sen.
Kiitos. Olipa taas tyhmiä virheitä. Olihan nuo ohjeessa kerrottu, mutta tuo - merkki 999 edessä on jäänyt ihan huomaamatta ja hintarajaa kun muutin illalla nollaksi niin senkin sitten onnistuin laittamaan väärään kenttään. Kokeillaanpa nyt toimiiko paremmin. Hintaraja on toistaiseksi tarkoituksella kireä kun aurinkoenergiaa vielä tulee, mutta muutan sen myöhemmin talvikaudeksi sopivaksi.
 

Sukke

Aktiivinen jäsen
Onkohan vain minulla ongelmaa vai puuttuuko entsoe-e-palvelusta tosiaan vielä edelleen tämän päivän tuntihinnat?

Havahduin vasta tänään aamulla siihen, että spot-hinta.fi-palvelun hintatiedot on käytössä ja mahdollisti siten myös yön ohjaukset. Muutoin tämä ei näkyisi mitenkään, mutta Home Assistant näyttää minulla käytössä olevan tuntihintojen lähteen ja käytettävä lähde valitaan sen perusteella, mikä tarjoaa tuntihintoja pisimmälle tulevaisuuteen.
 

janti

Moderaattori
Ylläpidon jäsen
@Mikki Eikös tässä pitänyt olla jokin varalähde näille hintatiedoille tällaista tapausta varten?

Taisikin olla tuossa Pörssärissä tämä

 

tk-

Aktiivinen jäsen
@Mikki Eikös tässä pitänyt olla jokin varalähde näille hintatiedoille tällaista tapausta varten?

Taisikin olla tuossa Pörssärissä tämä
Kyllä Spot-Hinta hakee nettisivujen ja täällä luetun mukaan myös hinnat Eleringistä jos Entso ei anna tietoa, eli eiköhän ohjaukset ole toimineet sen kautta oikein. Entsolla on ollut joku katko tosiaan eilen. Pörssärin HA-integraation kautta ei tule tuotantorajapinnasta hintatietoa, koska NordPoolin lisenssipolitiikka estää hintatietojen koneluettavaksi saattamisen ja uudelleenjakelun.

Meillä on automatiikka Pörssärin serverillä joka ilmoittaa Telegramiin joka iltapäivä jos joudutaan käyttämään varalähdettä, niin sieltä tuli klo 15 tieto onnistuneesta hintahausta varajärjestelmän kautta, eli Eleringissä nuo hinnat on eilen olleet ajoissa saatavilla.
 

Mikki

Hyperaktiivi
Onkohan palvelussa jotain vikaa kun tämä perus komento antaa 400 vastauksen:

curl -X GET "https://api.spot-hinta.fi/JustNowRanksAndPrice?region=FI&ranksAllowed=1,2,3,4,5&priceAlwaysAllowed=0" -H "accept: text/plain"

Kyllä tuo vasstaus on ihan oikein, kun on nyt Rank 24 tunti ja hinta on yli nollan tukevasti.

Yleisesti ottaen kyllä varahaku on Eleringistä toiminut ja Spot-hinta.fi pelaa.... Suomelle ainakin. Mutta Entso-E:stä ei datat kyllä tule ollenkaan Suomelle, Ruotsille, Norjalle, eikä Tanskalle. Virolle, Latvialle, Liettualle mm. tulee sekä Entso-E:stä että Eleringistä.
 

janik

Tulokas
Okey, oletin vaan että 400 viittaa bad requestiin. Hivenen hämäävä vastaus tuolle. Mutta olitkin kirjoittanut swaggeriin tiedot. Pahoittelut etten osannut lukea samantien sieltä :)
 

Mikki

Hyperaktiivi
Okey, oletin vaan että 400 viittaa bad requestiin. Hivenen hämäävä vastaus tuolle.
Niin ne 200/400 rajapinnat toimii, että jos hintaraja on sallittu, palautetaan 200 ja jos ei sallittu niin 400. Ihan koodaukseen tarkoitettu rajapinta, että ei tarvitse parsia vastauksen sisältöä ollenkaan.
 

Mikki

Hyperaktiivi
Entso-E:stä puuttuu hinnat laajemminkin... Nordpool lienee sössinyt jotain. Tosin ihmettelen että on baltian hinnat kuitenkin löytyy, ehkä ne tuupataan Entso-E:en jotenkin toisin.

1695886231126.png
 

Sukke

Aktiivinen jäsen
Entso-E:stä puuttuu hinnat laajemminkin... Nordpool lienee sössinyt jotain. Tosin ihmettelen että on baltian hinnat kuitenkin löytyy, ehkä ne tuupataan Entso-E:en jotenkin toisin.

katso liitettä 88720

On kyllä käsittämätöntä, että käyttäjiä kannustetaan vähentämään käyttöä sekä kohdistamaan kulutusta vähemmän kuormituksen tunneille, mutta kuitenkaan kuluttajille ei kyetä kuitenkaan tarjoamaan luotettavasti tähän tarvittavaa perusdataa. Samalla vielä maalataan uhkakuvia kiertävistä katkoista ja sähkön loppumisesta.

Spot-hinta.fi on ollut kyllä esimerkillinen toimintavarmuudessa ja ohjausten mahdollistavan. Todella iso peukku edelleen @Mikki suuntaan!
 

Mikki

Hyperaktiivi
Winter is Coming!

Viimeinkin hyviä uutisia ulkolämpötilaohjatun rajapinnan ja Shelly-skriptin kehityksestä. Laitoin nyt katseltavaksi ja testattavaksi ensimmäisen "beta"-version aiheesta. Skripti on muuttunut melkoisesti siitä aiemmasta "outdoor" skriptistä ja se on mielestäni aika paljon fiksumpi, joten nimisen sen Spot-hinta.fi SmartHeating-rajapinnaksi ja skriptiksi.

Mitä ominaisuuksia siinä on:
- Voit ohjata 1...4 relettä samalla säännöllä
- Inverted toiminto löytyy
- Postinumero- tai koordinaatit lämpötilatiedon hakuun
- Lämmityskäyrä seitsemällä lämpötilapisteellä. Kullekkin pisteelle voi antaa oman tuntimäärän. Ei prosenttilaskuja!
- Maksimilämpötila mihin lämmitys pysäytetään
- Tuntialue, jolle voi pakottaa tietyn määrän tunteja (esim. kalliimmille päivätunneille). Kytketään lämpötilarajalla päälle!
- Sallitut kuukaudet ja päivät, jos haluat ajaa sääntöä vain tiettyinä kuukausina tai viikonpäivinä
- Maksimihinta, jos haluat vaikka vaihtaa muuhun lämmitysmuotoon
- Hintamuokkaus esim. kausisähköä tai yö-päivä sähköä varten ennen "rank" laskentaa.
- Skripti printtaa "debug"-tietoa Shellyn lokille jokaisen palvelinkutsun jälkeen. Auttaa tutkimaan miksi rajapinta tekee mitä tekee.

Shelly skriptin pituus on kaikesta tästä huolimatta yli puolittunut ja on vain 117 riviä pitkä nykyisellään! Skripti löytyy täältä ja on siis BETA tasolla, saa siis ottaa testiin jos haluaa, mutta mahdollisesti vielä jotain bugeja on tms.... onneksi on leuto aika testata vielä:


Ja Spot-hinta.fi tyyliin tätä rajapintaa voi kutsua myös muualta kuin Shellyistä. Swaggerissa on JSON kuvaus "POST" kutsusta, millä voi tätä rajapintaa kutsua. Sen verran monimutkaisesta jutusta on kyse, että "query" parametreja ei tässä tueta.

Palautetta saa antaa :)Ja tottakai myös kehitetään lisää jos tulee ideoita
 
Viimeksi muokattu:

kayttajatunnus

Aktiivinen jäsen
Inverted on päällä ja loki kertoo "Turning relays OFF. Hour is too expensive."

Toimii sinänsä ihan oikein eli rele vetää (eli menee ON asentoon) mutta lokin teksti on väärin.
 

Mikki

Hyperaktiivi
Inverted on päällä ja loki kertoo "Turning relays OFF. Hour is too expensive."

Toimii sinänsä ihan oikein eli rele vetää (eli menee ON asentoon) mutta lokin teksti on väärin.

Tein parannuksen niihin viesteihin (pistin pushin jo). Kiitos havainnosta.

PriceAlwaysAllowed voisi olla kyllä tässä uudessakin. Ainakin itse olen sitä käyttänyt.

No tottahan toki. Tuo on unohdus. Kiitos tästäkin huomiosta, tulee kyllä skriptiin mukaan.
 

kayttajatunnus

Aktiivinen jäsen
Sitten oli vielä se tarkka astemäärä milloin tarvitaan lämmitystä 24h.

Eli jos meillä pitää -18 asteessa olla pumppu jatkuvasti käynnissä, miten se asetetaan skriptiin?
 

Mikki

Hyperaktiivi
PriceAlwaysAllowed voisi olla kyllä tässä uudessakin. Ainakin itse olen sitä käyttänyt.

Nyt siellä on se PriceAlwaysAllowed parametri:

Sitten oli vielä se tarkka astemäärä milloin tarvitaan lämmitystä 24h.

Eli jos meillä pitää -18 asteessa olla pumppu jatkuvasti käynnissä, miten se asetetaan skriptiin?

Ja tuoKIN on jälleen hyvä huomio. Tein tuohon jo sen parametrin mihin asteisiin lämmitys pysäytetään. Taidan tehdä vielä siihen kylmään päähän parametrin, jolloin lämmitys on "all in". Kiitoksia kommenteista jo nyt, meni heti tänä iltana hommat eteenpäin.
 

kayttajatunnus

Aktiivinen jäsen
Nyt siellä on se PriceAlwaysAllowed parametri:



Ja tuoKIN on jälleen hyvä huomio. Tein tuohon jo sen parametrin mihin asteisiin lämmitys pysäytetään. Taidan tehdä vielä siihen kylmään päähän parametrin, jolloin lämmitys on "all in". Kiitoksia kommenteista jo nyt, meni heti tänä iltana hommat eteenpäin.
Ei ole vuodet softatestaajana menneet hukkaan :D

Saakohan tuon parametrin siten, että lämmityskäyrä jatkuu lineaarisena edellisestä pisteestä siihen "all iniin"? Saattaa muuten tulla erikoisen muotoinen käyrä pisteiden väliin.
 

Mikki

Hyperaktiivi
Ei ole vuodet softatestaajana menneet hukkaan :D

Saakohan tuon parametrin siten, että lämmityskäyrä jatkuu lineaarisena edellisestä pisteestä siihen "all iniin"? Saattaa muuten tulla erikoisen muotoinen käyrä pisteiden väliin.

No ei ole mennyt hukkaan joo... kiitos.

Tein nyt yksinkertaisen toteutuksen HeatingHours_MinTemperature parametrilla ja sen alle lämpötilan tippuessa on 24h lämmitys. Löytyy skriptistä jo.

Se ei vielä ole ihan noin hieno, että laskisi käyrän uusiksi noiden pisteiden välille, mutta äkkiseltään ajateltuna ei todennäköisesti ole iso "pomppaus" siinä käyrässä jos se on realistisesti tehty.

Mutta hyvät pari ominaisuutta tuli illan mittaan. Nyt "jäädytän" hetkeksi, että saan kanssa ajeltua lisää testejä näillä toiminnallisuuksilla.
 
Viimeksi muokattu:

kayttajatunnus

Aktiivinen jäsen
Laitoin myös viimeisimmän version sisään.

Miten vaikea desimaaleja olisi lisätä hintoihin? Viime yönä tuli kolmen lämmitystunnin sijaan kuusi kun hinnat ovat niin lähellä toisiaan. Omassa setupissa ei haittaa mutta joillain saattaa tulla lämmin.
 

Mikki

Hyperaktiivi
Laitoin myös viimeisimmän version sisään.

Miten vaikea desimaaleja olisi lisätä hintoihin? Viime yönä tuli kolmen lämmitystunnin sijaan kuusi kun hinnat ovat niin lähellä toisiaan. Omassa setupissa ei haittaa mutta joillain saattaa tulla lämmin.

Sinänsä rank-laskenta käyttää desimaaleja (ja ottaa silti vain halutun määrän tunteja vaikka olisi monta samaa hintaa). Luulen että "PriceAlwaysAllowed" nappasi ne lisätunnit?
 

kayttajatunnus

Aktiivinen jäsen
Ei ollut viime yönä always allowed vielä päällä. Täytyy seurata toimintaa vielä tarkemmin. Palaan tähän jos vielä toistuu.

Edit: Saattaa kuitenkin olla tuo always allowed tähän "syynä".
 
Viimeksi muokattu:

Mikki

Hyperaktiivi
Miten nyt kannattaa tarkastella kuinka monta tuntia tänään lämmitetään? Vai pitääkö sitä edes tarkastella kunhan kerran saa asetukset kohdilleen.

Tuo printtaa nyt lokille vastauksessa noita debug tietoja. Että periaatteessa jos pysäytät skriptin ja käynnistät, niin ensimmäisellä palvelinkutsulla (noin 30sec päästä) tulee tietoja mihin ohjaus perustuu.

Siis tämännäköistä nyt tällä hetkellä. Yritän vielä parannella tuota selkeämmäksi.

Koodi:
Response JSON:
{"httpStatusCode":200,"averageTemperature":14.09,"calculatedRank":3,"rankNow":18,"priceWithTaxNow":0.20,"
executionMonthAndDayAllowed":true,"maxPriceLimitExceeded":false,"priceNowLessThanPriceAlwaysAllowed":true,"maxTemperatureLimitExceeded": false}
 

Salzi

Jäsen
En taida olla ainoa, joka arvostaisi jos joku osaava väkertäisi tuosta vuorokauden keskilämpötilasta sensorin home assistantiin. Helpottaisi säätämistä kun näkee helposti minkä pohjalta scripti laskee lämmitystarvetta.
 

Salzi

Jäsen
En tiedä mistä spot-hinta katsoo lämpötilan, mutta pitäisi olla mielellään siihen pohjautuva sensori.

Tuli tuota monitori scriptiä ihmetellessä mieleen, että jos netti katkeaa kovemmalla pakkasella niin lämmityksen ohjaus vastusten osalta ei toimi. Mitä jos rebootin sijaan odotellaan x määrä tunteja, jonka jälkeen laitetaan lämmitys päälle, jos ulkolämpötila on riittävän matala? Mulla on tätä varten home assistantissa backuppina käynnistys jos varaajan lämpö laskee, mutta olisi hyvä saada tämmöinen suoraan shellyyn.
 
Home assistantissahan on jo loistava YR valmiina, joten kävisikös tällaiset sensorit. Oli mulla jo valmiina, lisäsin vain tuon ennusteen.
Muistaakseni Yr:ään piti erikseen käydä klikkaamassa tuo ennuste aktiiviseksi, se ei defaulttina tainnut olla päällä. Eli YR ja device info ja ottapi käyttöön sieltä.
EDIT: YR sisältää tuon weather.home_hourly sensorin, kun ottaa sen käyttöön. Defaulttina on pois käytöstä.

YAML:
# MET.no sensorit
- platform: template
  sensors:
    metno_forecast_temperature:
        unique_id: 'metno_ennuste'
        friendly_name: 'metno ennuste'
        value_template: "{{ state_attr('weather.home', 'forecast')[0].temperature }}"
        unit_of_measurement: '°C'
    metno_temperature:
      unique_id: 'metno_lammot'
      friendly_name: 'met.no lämmot'
      unit_of_measurement: "°C"
      value_template: "{{ state_attr('weather.home', 'temperature') }}"
    metno_humidity:
      unique_id: 'metno_kosteus'
      friendly_name: 'met.no kosteus'
      unit_of_measurement: "%"
      value_template: "{{ state_attr('weather.home', 'humidity') }}"
    metno_pressure:
      unique_id: 'metno_ilmanpaine'
      friendly_name: 'met.no ilmanpaine'
      unit_of_measurement: "mbar"
      value_template: "{{ state_attr('weather.home', 'pressure') }}"
    metno_wind_bearing:
      unique_id: 'metno_tuulensuunta'
      friendly_name: 'met.no tuulensuunta'
      unit_of_measurement: "°"
      value_template: "{{ state_attr('weather.home', 'wind_bearing') }}"
    metno_wind_speed_ms:
      unique_id: 'metno_tuulen_voima'
      friendly_name: 'met.no Tuulen voimakkuus'
      unit_of_measurement: "m/s"
      value_template: "{{ state_attr('weather.home', 'wind_speed') }}"
    metno_wind_dir_letter:
      value_template: >
        {% set direction = ['N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSW','SW','WSW','W','WNW','NW','NNW','N'] %}
        {% set degree = states('sensor.wind_bearing')|float %}
        {{ direction[((degree+11.25)/22.5)|int] }}
 
Viimeksi muokattu:

Nippis

Tulokas
Puuttuu "api." alusta. Eli 1.0.3 firmwaren oikea osoite on https://api.spot-hinta.fi/shelly/scripts
Moi
Minulla kyllä oli nuo apity alussa jäi jotenkin kopioinnissa pois viestistä
Nämä shellyt on mielestäni hyvin epävakaita laitteita! Automaatio insinöörinä en ottaisi näitä teollisuudessa käyttöön!!

Minulla on kolme eri shelly mallia joissa kaikissa on firmware 1.0.3 eli uusin:
Shelly pro 3
Shelly plus 2PM
Shelly plus 1 PM

Scripti kirjasto linkki: https://api.spot-hinta.fi/shelly/scripts toimii kuitenkin vain minun käytössä olevista malleissa uuden firmware version jälkeen vain Shelly plus 2PM. Kaksi muuta ei näytä scripti kirjastoa

Eihän tämmöinen voisi olla mahdollista. Ehkä nuo purkit pitää vaihteeksi bootata jos vaikka sitten toimisi linkit
 

tk-

Aktiivinen jäsen
Moi
Minulla kyllä oli nuo apity alussa jäi jotenkin kopioinnissa pois viestistä
Nämä shellyt on mielestäni hyvin epävakaita laitteita! Automaatio insinöörinä en ottaisi näitä teollisuudessa käyttöön!!

Minulla on kolme eri shelly mallia joissa kaikissa on firmware 1.0.3 eli uusin:
Shelly pro 3
Shelly plus 2PM
Shelly plus 1 PM

Scripti kirjasto linkki: https://api.spot-hinta.fi/shelly/scripts toimii kuitenkin vain minun käytössä olevista malleissa uuden firmware version jälkeen vain Shelly plus 2PM. Kaksi muuta ei näytä scripti kirjastoa

Eihän tämmöinen voisi olla mahdollista. Ehkä nuo purkit pitää vaihteeksi bootata jos vaikka sitten toimisi linkit
Tuossa on useampikin nyt viime päivinä valitellut tuon skriptikirjaston toimivuutta uudella firmiksellä. Mielestäni se nyt ei olennaisesti tee Shellystä epävakaata, mutta olet kyllä oikeassa siinä, että vanha skriptimoottori oli surkea, ja sille tehdyt skriptit saattoi tehdä laitteesta hyvinkin epävakaan.

Mielestäni suurin osa noista ongelmista on korjattu firmiksessä 1.0.3 ja sille tehdyt skriptit on myös paljon vakaampia.

Tuohon kirjasto-ongelmaan, lieneekö vielä jonkinlainen bugi olemassa tuohon 1.0.2 -versiossa esiteltyyn uuteen kirjastoformaattiin liittyen. Ongelma voi myös olla Shellyn nettiyhteydessä päivityksen jälkeen. Yhtä kaikki, kirjasto tuntuu löytyvän hetken odottelun jälkeen ja jos ei malta odottaa, niin siinä tapauksessa voi kopioida skriptin manuaalisesti Githubista.

Tämä ongelma ei liity spot-hintaan vaan koskee myös muita skriptikirjastoja.
 
Back
Ylös Bottom