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

Mikki

Hyperaktiivi
Ei ole ollut mikään skripti 15:00 vuorokautta aloittava. Ollut aina 00:00 alkaen. Mutta on tässä vähän ensin laskettava, onko tuolle esim. klo 15 alkavalle "vuorokaudelle" varsinaisesti perusteita, ettei ole vain tunne? (Hinnat toki ei aina ole edes saatavilla klo 15, jos on jotain ongelmaa)

Vai ollaanko jälleen (mihin itsekkin helposti sorrun) insinöörien rakastamissa kuudennen desimaalin rajahyötytapauksissa, jotka sitten kusahtaa vuosiksi, kun tulee ensimmäinen "laskevien hintojen" päivä ja vrk. "halvimmat" tunnit on 12:00-15:00, eli sikakalliit vs. 19-22 hinnat. :)
 

Arisoft

Hyperaktiivi
Ihan knoppitietona, että jos haetaan 96 vartista esimerkiksi 9 kappaletta halvimpia 45 minuutin jaksoja, siten että kokonaishinta on ehdottomasti halvin, niin brute-force menetelmällä pitäisi tarkistaa 182,8 miljardia (!) yhdistelmää. Ihan helppo tuo algoritmi ei ole, kun mukaan ympätään vielä että homman pitää toimia erimittaisilla jaksoilla ja halutaan ehkä rajoituksia saako olla 15min jaksojen välissä tai ei.

Itselläni on käytössä algoritmi joka ei ota huomioon pelkästään hintoja vaan myös varaajan lämpötilan vähenemisen. Se osaa lämmittää sitä juuri sen verran, että se pysyy kalliin jakson yli riittävän kuumana. Varjaana lämmittäminen liikaa kun lisää häviöitä. Ehkä tuo ei ole niin merkityksellistä sellaisella varaajalla, jossa ei ole häviöitä.

Mutta ihan käytännösn esimerkkinä. Kun yöllä on melko kallista ja päivällä hinta heittelee, niin edullisin ratkaisu voi olla lämmittää aamuyöllä vain sopivasti ja päivällä lisätä lämpöä edullisimmalla joskin yötä kalliimmalla vartilla. HInnan ollessa tasainen, algoritmi lämmittää varaajaa tasaisesti, eliminoidakseen kuumemman varaajan häviöt.

Rakennuksen lämmitykseen tämä algoritmi toki soveltuisi vielä paremmin, kun häviöt on jo merkittävä tekijä. Algoritmia käytän dynaamisesti niin että uusi ratkaisu lasketaan aina vartin välein toteutuneen tilanteen mukaan.

Niin.. eikä tuon laskemiseen onneksi tarvita laskea 182 miljardia vaihtoehtoa. Hetkessä se siitä selviytyy johtuen ongelman luonteesta, joka on ratkaistavissa iteraatioperiaatteella. Shellyllä en silti alkaisi yrittämään laskemista.
 

PolyEsko

Vakionaama
Ei ole ollut mikään skripti 15:00 vuorokautta aloittava. Ollut aina 00:00 alkaen. Mutta on tässä vähän ensin laskettava, onko tuolle esim. klo 15 alkavalle "vuorokaudelle" varsinaisesti perusteita, ettei ole vain tunne? (Hinnat toki ei aina ole edes saatavilla klo 15, jos on jotain ongelmaa)

Vai ollaanko jälleen (mihin itsekkin helposti sorrun) insinöörien rakastamissa kuudennen desimaalin rajahyötytapauksissa, jotka sitten kusahtaa vuosiksi, kun tulee ensimmäinen "laskevien hintojen" päivä ja vrk. "halvimmat" tunnit on 12:00-15:00, eli sikakalliit vs. 19-22 hinnat. :)
no sitä mutu tunnettahan tuo pitkälti ja silloin nuo huomaa ja jää muistiin, kun olisi parempi noin kun esitin.
Siksi laskeskelinkin nuo ja aika pienet erot tuli eri kellonaikojen välillä keskimäärin. Ja oli alkuaika mikä tahansa, niin aina on päiviä, jolloin joku muu alkuaika olisi edullisempi.
 

Husky

Hyperaktiivi
Ei tämä varttihinnoittelu sattuisi tuoda apuja tuohon minun ongelmaan, että pitäisi smartheatiin saada maksimi-peräkkäisten-off-tuntien määrä ja niiden ulkopuolelta valita halvimmat (ulkolämpötilan funktiona kuten tuo jo onkin mukana)?

Nyt tosiaan tietyssä lämmössä, mikä se nyt oli joku -5, on täynyt laittaa niin että vain kallein tunti raakataan, kun ei voi olla enää kahta tuntia peräkanaa off sitä kylmemmässä. Sitä jaksotusta koitin sorvata avuksi, mutten saanut sitä toimimaan tai olisi hyöty mennyt isoksi osaksi hukkaan
 

Mikki

Hyperaktiivi
Ei tämä varttihinnoittelu sattuisi tuoda apuja tuohon minun ongelmaan, että pitäisi smartheatiin saada maksimi-peräkkäisten-off-tuntien määrä ja niiden ulkopuolelta valita halvimmat (ulkolämpötilan funktiona kuten tuo jo onkin mukana)?
tai olisi hyöty mennyt isoksi osaksi hukkaan

Uudessa versiossa on mahdollisuus jakaa vuorokausi haluttuun määrään jaksoja joiden sisälle lämmitys jaetaan. Tämä juuri estämään liian pitkiä taukoja.

Lisäksi on myös uutta että lämmitystä voi vähentää halutun prosentin jos jakson keskihinta ylittää vuorokauden keskihinnan.

Ja iso uusi ominaisuus on Web-sivu mistä näkee lämmityssuunnitelman ja auttaa skriptin parametrien vaikutuksen testaamisessa.
 

Husky

Hyperaktiivi
Ok, kiitos, täytyy pähkiä vielä tuo jaksotus, mutta vuosi sitten tulin tulokseen ettei se sopinut tarpeeseeni. Olisiko ollut, että huomattavasti laajemmin voisi valita halpoja tunteja vuorokauden sisältä, kuin jos jokatoisesta tunnista valitsee halvemman tai kolmesta kaksi halvinta jne.

Tuolla jaksotuksella taas häviää selvästi esim plussan puolella, jolloin voi olla enemmän peräkkäisiä off-tunteja, eli vuorokaudesta voi valita pois useita kalliimpia tunteja, jotka usein on peräkkäisiä.
 
Viimeksi muokattu:

root

Aktiivinen jäsen
@Mikki ihan mielenkiinnosta, näetkö käyttötilastoista monta kertaa keskimäärin vuorokaudessa haetaan hintoja yhdestä IP-osoitteesta? Itse hain sen 96 kertaa (joka vartti), mutta tehostin omaa automaatiota ja nyt haen kerran vuorokauteen (https://api.spot-hinta.fi/Today). Tai kysytään niin päin, että monta prosenttia kaikista (uniikeista) käyttäjistä hakee hinnat vain kerran vuorokaudessa?
 

Mikki

Hyperaktiivi
@Mikki ihan mielenkiinnosta, näetkö käyttötilastoista monta kertaa keskimäärin vuorokaudessa haetaan hintoja yhdestä IP-osoitteesta? Itse hain sen 96 kertaa (joka vartti), mutta tehostin omaa automaatiota ja nyt haen kerran vuorokauteen (https://api.spot-hinta.fi/Today). Tai kysytään niin päin, että monta prosenttia kaikista (uniikeista) käyttäjistä hakee hinnat vain kerran vuorokaudessa?

Päivittäisiä eri IP osoitteita pyörii 7000 kappaleen nurkilla. Aika suuri osa on toki Shelly käyttäjien kutsuja.

Hintoja haetaan suurimmaksi osaksi HA käyttäjien toimesta ja niitä on vajaa 2000kpl. Ne hakee pääosin päivittäin.

Sitten on monenlaisia muita kyselijöitä ja kokonaismäärä kutsuja kuukaudessa on 40 miljoonan luokkaa.

Jonkun verran on huonoja koodaajia, jotka kyselee samaa tietoa tyyliin minuutin välein. Osa tuosta on itse aiheutettua, kun ihan ensimmäisiä versioita skripteistäni pyörii edelleen joillakin ja ne teki kutsuja aika tiheään. 😀
 

jannu93

Aktiivinen jäsen
Jokin tuossa kalleimpien varttien haussa tekee oikun. Kalleimman vartin kohdalla ohjaus ei olekaan päällä. Tekee tätä joka päivä kalleimman vartin kohdalla. Eilisen hinnat ja ohjaus alla ja siinä korkein piikki 18:45.
 

Liitteet

  • IMG_0668.png
    IMG_0668.png
    138,6 KB · Katsottu: 14
  • IMG_0667.png
    IMG_0667.png
    123,6 KB · Katsottu: 14
  • IMG_0671.png
    IMG_0671.png
    187,3 KB · Katsottu: 14

Mikki

Hyperaktiivi
Jokin tuossa kalleimpien varttien haussa tekee oikun. Kalleimman vartin kohdalla ohjaus ei olekaan päällä. Tekee tätä joka päivä kalleimman vartin kohdalla. Eilisen hinnat ja ohjaus alla ja siinä korkein piikki 18:45.

Hmm... Täytyypä debugata. Mutta se taitaa johtua itseasiassa käytössä olevasta greedy algoritmista, joka saattaa jättää joitain kalleimpia vartteja rankkaamatta.

Luulen että homma toimisi heti, jos laittaisit 15min hintajakson ja valitut jaksot 81-96 jos varttitason ohjaus kelpaa.
 
Viimeksi muokattu:

PolyEsko

Vakionaama
1764706722764.png
1764707316514.png

Jälkimmäisessä kuvassa pelkät spot-hinnat, ensimmäisessä siirtohinnat mukana.
Miksihän tänään LVV:n lämmitys meni päälle klo 20:00 ja edelleen päällä?
Ohjausehdoissa hintajakson pituus = 60 min ja 1-2 jaksoa päälle valittu. SallittuHinta = 0 ja Hintaero = -0,99
Vesivaraaja scripta siis kyseessä.
Joskus muilloinkin hieman sekoilee, normisti toimii ok.
 
Viimeksi muokattu:

Mikki

Hyperaktiivi
Kello 20-22 oli lämmitysvuorokauden halvimmat tunnit. Tässähän siis on 22:00-21:59 lämmitysvuorokausi.

Ja se miksi lämmitys jatkuu on tuosta SallittuHinta 0 ja hintaerosta johtuva. Eli kuten kommentissa on, sallitaan yötunneilta hintaeron halvempi hinta kuin mitä SallittuHinta on.

Tämä on siksi että SallittuHinta olisi yhteismitallinen yöllä päivähinnan kanssa.
 

PolyEsko

Vakionaama
Kello 20-22 oli lämmitysvuorokauden halvimmat tunnit. Tässähän siis on 22:00-21:59 lämmitysvuorokausi.

Ja se miksi lämmitys jatkuu on tuosta SallittuHinta 0 ja hintaerosta johtuva. Eli kuten kommentissa on, sallitaan yötunneilta hintaeron halvempi hinta kuin mitä SallittuHinta on.

Tämä on siksi että SallittuHinta olisi yhteismitallinen yöllä päivähinnan kanssa.
Pah. Muisti petti. Juuri joku päivä sitten kirjoitit, että klo 22 on vaihto, vaan harmaat aivosolut jumissa.
 

MetaX

Aktiivinen jäsen
Noniin, ihmettelin tätä samaa itsekin että miksi lämmitti juuri ennen kuin vaihtui yösähköhinnat ja muutenkin spotti putosi halvemmaksi. Mutta syy on siis tuo 22 vaihtuva lämmitysvuorokausi.

1764745609289.png
 

Mekaniker

Vakionaama
Ihan toinen huomio:
Kun scipti (MinimalHeating) on "käynnissä" ennen klo 22 se ei aloita uudestaan klo 22:n jälkeen jos klikkaa ShellyCloud pilven PäällePois-nappia vaikka halvimmat tunnit on tullut vaan manuaalinen käynnistys tarpeen, sen jälkeen kytkee pois kun hintaraja nousee yli sallitun
Om muistikuva että joku toinenkin vartti-ohjauksella tekee samoin? Voiko tässä olla ShellyCloud ohjaus joka on vahvempi ja estää scriptin toiminnan?

Toki on vanhakin mutta on toiminut moitteetta akkulaturin ohjauksessa
Minimal heating.png

Käyttövesivaarajalle on edelleen WaterBoiler
Tuetut Shelly ohjelmistot: 1.4.4 - 1.7.1. Skriptin versio: 2025-10-03
// Huomio: skripti toimii varttihinnoilla, eli hintajaksot voivat alkaa ja päättyä vartin tarkkuudella.
 

Mikki

Hyperaktiivi
En ole varma sainko kiinni mitä tarkoitat. Mutta jos releen tilan käsin kääntää päälle/pois, ei skriptin päässä tapahdu mitään. Mutta jos skriptin mielestä rele on jo päällä, ei se tee releen tilaan muutoksia, ennenkuin skriptin pitäisikin jotain tehdä. Tämän on tarkoitus juuri sallia käsinohjaukset haluttaessa.
 

Mekaniker

Vakionaama
En ole varma sainko kiinni mitä tarkoitat. Mutta jos releen tilan käsin kääntää päälle/pois, ei skriptin päässä tapahdu mitään. Mutta jos skriptin mielestä rele on jo päällä, ei se tee releen tilaan muutoksia, ennenkuin skriptin pitäisikin jotain tehdä. Tämän on tarkoitus juuri sallia käsinohjaukset haluttaessa.
Otin Timestamp:
Timestamp02-03-25.png
Kytki päälle itse (spot alle 1cnt) 19:00, Minä sammutin pilvestä 21:57 (akut 99%) ja kytkin päälle 03:40 ja sammutin 05:05 (akut 100%)
On pieni aavistus ettei ole sciptin toiminta vaan manuaalinen käsky joka on vahvempi, pitää kokeilla uudestaan seuraavan kerran kun spot alle 1cntr
 
Back
Ylös Bottom