Shelly-laitteisiin selaimella ohjattava ilmainen avoimen lähdekoodin pörssisähkösovellus. Skripti pyörittää käyttöliittymää omalla web-serverillä ja tallentaa asetukset Shellyn muistiin.
Skripti käyttää suoraan Viron kantaverkkoyhtiö Eleringin rajapintaa, eli välissä ei ole muita palveluita. Näin ollen rekisteröitymistä ei tarvita, vaan kaikki toimii "suoraan paketista".
Jos haluat ohjata Shelly Plug Plus -laitteen valon väriä sähkön hinnan mukaan, tsekkaa shelly-plug-nordpool-light.
IN ENGLISH
There is an English version of the script available at https://github.com/jisotalo/shelly-porssisahko-en.
It can be used to control Shelly devices by Nordpool electricity spot prices in Finland, Estonia, Latvia and Lithuania.
- Ilmainen + avoin lähdekoodi
- Oma web-serveri Shellyn sisällä ja siinä pyörivä käyttöliittymä
- Ei rekisteröitymistä
- Valvonta ja konfigurointi nettiselaimen avulla kotiverkossa (PC, puhelin, tabletti)
- Mahdollista luoda jopa kolme mahdollista yhtäaikaista ohjausta eri säännöillä
- Nykyisen ja seuraavan päivän hinnat sekä toteutuva ohjaus näkyvillä
- Kolme erilaista ohjaustapaa
- Mahdollisuus ohjata osatunteja
- Pakko-ohjaus väliaikaisesti tai aina tietyille tunneille (ohjaus päälle tai pois)
- Vikasietoinen
- Varmuustunnit (jos ei hintoja mutta tiedetään kellonaika)
- Hätätilaohjaus (jos ei internet-yhteyttä eikä tiedetä kellonaikaa)
- Konfiguroitavuus ja hienosäätö mahdollista omilla skripteillä
- shelly-porssisahko - Pörssisähköohjaus Shelly-releisiin
- Ominaisuudet
- Sisällysluettelo
- Muutoshistoria
- Tukeminen
- Asennus
- Skriptin päivitys
- Laitteisto ja sähköinen kytkentä
- Asetukset
- Lisätoiminnot ja käyttäjäskriptit
- Kysymyksiä ja vastauksia
- Onko skripti kuinka toimintavarma?
- Miksi välillä tulee HTTP error 503?
- Miten ohjaan ainoastaan yön halvimmilla tunneilla?
- Miten saan lähdön päälle aina jos sähkön hinta on keskiarvon alapuolella?
- Miksi laitteen nimen kohdalla lukee "Ei asetettu"?
- Kuinka saa skriptin toimimaan Switch Add-Onin kanssa?
- Milloin seuraavan päivän hinnat haetaan? Miksi hintoja ei näy vaikka kello on 14?
- Mihin asetukset tallentuvat?
- Miksi hintatietoja ei saada?
- Miksi historia on niin lyhyt?
- Teknistä tietoa
- License
Katso päivitysten sisältö CHANGELOG.md-tiedostosta.
Tarvittaessa vanhat skriptiversiot löytyvät Releases-sivulta. Lataa halutun version zip-tiedosto, ja kopioi dist/shelly-porssisahko.js
-tiedoston sisältö.
Jos haluat käyttää edellistä (edelleen pomminvarmaa) v.2-versiota, se löytyy alta:
- v.2.13.0 release
- v.2.13.0 GitHubissa
- https://github.com/jisotalo/shelly-porssisahko/tree/4566fc40cfb819cf582881f81acf823e7c104bd9
- README:ssa oleva library-linkki ei enää toimi
- Toimiva library-linkki v.2.13.0:
https://raw.githubusercontent.com/jisotalo/shelly-porssisahko/4566fc40cfb819cf582881f81acf823e7c104bd9/shelly-library.json
- v.2.13.0 Archivessa
Jos skriptistä on hyötyä, voit vaikka tarjota kahvit vastineena! Tämä on puhtaasti harrastuspohjalta tehty.
-
Ota Shelly käyttöön, yhdistä se wifi-verkkoon ja päivitä sen firmware. Vanhempia firmware-versioita ei tueta.
-
Avaa Shellyn hallinta nettiselaimella.
-
Avaa Scripts-sivu Shellyn hallinnasta.
-
Paina Library-painiketta
-
Aukeavassa ikkunassa paina Configure URL.
-
Syötä osoitteeksi
https://raw.githubusercontent.com/jisotalo/shelly-porssisahko/master/shelly-library.json
ja paina Save. -
Nyt kirjastoon ilmestyy pörssisähköohjaus-skriptit. Asenna pääskripti (ylin) painamalla Import code.
-
Kun koodi ilmestyy, paina Save.
-
Tallentamisen jälkeen laita skriptin alla konsolissa websocket debug päälle painamalla Enable. Tämä on tärkeää, jotta näet osoitteen ja tilatiedot käynnistyksen jälkeen. Tämä täytyy tehdä vain kerran.
-
Paina Start, jolloin skripti käynnistyy
-
Nyt näet skriptin alla konsolissa hallinnan osoitteen. Kopioi tämä osoite talteen ja avaa se selaimessa uudessa välilehdessä. Osoite on muotoa
http://ip-osoite/script/1
. -
Siirry vielä takaisin Scripts-sivulle ja laita Run on startup -täppä päälle, jotta skripti käynnistyy aina Shellyn käynnistyessä.
-
Valmis! Avaa käyttöliittymä selaimessa (osoite kohdassa 11) ja säädä asetukset kohdilleen Asetukset-kappaleen ohjeilla.
Jos haluat asentaa skriptin käsin, Shelly Smart Control -sovelluksella tai control.shelly.cloud -pilvipalvelun kautta, löydät skriptin osoitteesta:
https://raw.githubusercontent.com/jisotalo/shelly-porssisahko/master/dist/shelly-porssisahko.js.
Seuraa ylläolevia ohjeita pääpirteittäin, mutta kopioi skriptin sisältö Shellyyn sellaisenaan, Library-toiminnon sijaan.
Jos haluat päivittää skriptin uusimpaan versioon, poista nykyinen skripti ja tee asenna uusi Library-painikkeen kautta. Voit myös päivittää sen käsin asentamalla uusiksi.
Kaikki asetukset säilyvät päivittäessä, paitsi jos päivität v.2 -> v.3.
Tarkista asennuksen jälkeen, että Run on startup on yhä valittu.
Itse olen ostanut laitteita Nurkan Takaa -kaupasta, jonka olen todennut luotettavaksi ja järkihintaiseksi.
Jos ohjaat kontaktoria, on suositeltavaa käyttää Shellyn sinisiä laitteita tai Pro-malleja. Nämä kestävät kontaktorin aiheuttamia kytkentäpiikkejä. Esimerkkejä:
Hyvää tietoa laitteista löytyy Shelly tuki (suomeksi) -ryhmästä.
Skripti toimii tunnetusti ainakin seuraavilla:
- Shelly Plus 1PM
- Shelly Plus 2PM
- Shelly Plus 1
- Shelly Pro 1
- Shelly Pro 2
- Shelly Pro 3
- Shelly Pro 4PM
- Shelly Pro3EM + Switch Add-on
- Shelly Plus UNI
- Shelly Plus 1 Mini
- Shelly Plus Plug S
- Plugin valon värin ohjaus sähkön hinnan mukaan onnistuu skriptillä shelly-plug-nordpool-light
Versiosta 3.0.0 lähtien skriptissä on mahdollista konfiguroida useita eri ohjauksia rinnakkain (max 3 kpl). Tämä mahdollistaa esimerkiksi usean lähdön ohjauksen eri säännöillä käyttäen monikanavaisia Shelly Pro -malleja.
Käsiteltävä ohjaus valitaan alasvetovalikosta sivun ylälaidasta. Hallinta näyttää aina valitus ohjauksen tilan, historian ja asetukset.
Nämä asetukset ovat samat kaikille ohjauksille.
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Maa | Maa, jonka sähkön hinnat haetaan (Suomi, Viro, Latvia, Liettua). | Suomi |
Sähkön ALV | Käytettävä ALV-% sähkön hinnalle. [%] | 25.5 |
Siirtomaksut | Jos haluat että siirtomaksut otetaan huomioon, voit syöttää ne päivä- ja yöajalle. Nämä lisätään tuntihintoihin. [c/kWh] Esim. jos haluat ottaa erisuuruiset siirtomaksut huomioon tuntien valinnassa. |
päivä: 4 yö: 3 |
Nämä asetukset ovat ohjauskohtaisia.
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Käytössä | Onko valittu ohjaus käytössä. | ON |
Ohjaustapa | Millä ohjaustavalla lähtöä ohjataan. Selitykset taulukon alapuolella. |
jakson halvimmat tunnit |
Ohjattavat lähdöt | Shellyn ohjattavien lähtöjen ID-numerot. Jos useampi lähtö, erota pilkulla (max. 4 kpl). - Yksi lähtö (mm. Shelly Plus 1) --> 0 .- Useampi (esim 0, 1 ja 100) --> 0,1,100 |
0 |
Lähdön ohjaus | Ohjataanko relelähtö aina haluttuun tilaan vai ainoastaan jos tila muuttuu. - Aina tarkistaessa: Lähtö ohjataan joka tarkistuksen jälkeen (eli yleensä kerran tunnissa) haluttuun tilaan ja Shellyn sovelluksen tai hallintapaneelin kautta tehty muutos ylikirjoitetaan. - Vain muuttuessa: Lähtö ohjataan ensimmäisellä kerralla haluttuun tilaan ja sen jälkeen ainoastaan sen muuttuessa. |
aina tarkistaessa |
Ohjausminuutit | Määrittää kuinka monta minuuttia tunnista ohjaus on päällä. Jos tunti on turhan pitkä aika pitää lähtöä päällä, voidaan aika muuttaa lyhyemmäksi. Asetus vaikuttaa kaikkiin ohjauksiin, pois lukien pakko-ohjaus käsin. [min] Esim. 30 minuuttia riittää aina varaajan lämmittämiseen, joten pidetään vain tunnin ensimmäiset 30 minuuttia ohjausta päällä. |
60 |
Käänteinen ohjaus | Jos ruksittu, ohjaus toimii käänteisesti normaaliin nähden. Tällöin lähtökohta on, että lähtö on päällä. - Varmuustunnit: Lähtö ohjataan varmuustunneilla pois päältä - Hätätilaohjaus: Lähtö on päinvastainen asetukseen nähden - Pakko-ohjaukset: Lähtö voidaan pakko-ohjata pois päältä - Käsiohjaus: Lähtö on päinvastainen asetukseen nähden - Hintaraja: Jos hinta on alle rajan, lähtö asetetaan pois päältä - Jakson halvimmat tunnit: Jos nykyinen tunti on halvimpia tunteja, lähtö asetetaan pois päältä |
ei |
Varmuustunnit | Jos sähkön hintaa ei jostain syystä tiedetä, ohjataan lähtö näillä tunneilla päälle. Esim. ongelma hintojen haussa tai nettiyhteys katkeaa. |
01:00-07:00 |
Hätätilaohjaus | Jos Shelly ei jostain syystä tiedä kellonaikaa, ohjataan lähtö tähän tilaan varmuuden vuoksi. Esim. jos sähkökatkon jälkeen nettiyhteys ei palaudu (ei hintoja eikä kellonaikaa). |
ON |
Pakko-ohjaukset | Voidaan määrittää tunnit, jolloin ohjaus asetetaan joko päälle tai pois riippumatta sähkön hinnasta ja muista ohjauksista (pl. pakko-ohjaus käsin). Esim. jos haluat lämmittää varajaa joka aamu tai estää ohjauksen tiettynä osana vuorokaudesta. |
05:00-07:00 ja 19:00-21:00 päällä01:00-02:00 pois |
Voimassa, jos valittu ohjaustapa on käsiohjaus.
Käsiohjauksella lähtö ohjataan käyttöliittymältä asetettuun tilaan.
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Ohjaus | Asetetaanko lähtö päälle vai pois | ON |
Voimassa, jos valittu ohjaustapa on hintaraja.
Hintarajaohjauksella lähtö asetetaan päälle jos sähkön hinta on alle määritellyn rajan (tai juuri sen verran).
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Hintaraja | Hinta, jossa ja jonka alla lähtö asetetaan päälle. [c/kWh] Voit syöttää tähän myös arvon avg , jolloin käytetään päivän hinnan keskiarvoa. |
4.25 |
Voimassa, jos valittu ohjaustapa on jakson halvimmat tunnit.
Jakson halvimmat tunnit -ohjauksella vuorokausi jaetaan osiin. Lähtö ohjataan päälle jokaisen osan halvimmmilla tunneilla. Lisäksi voidaan määrittää raja jonka alla ohjaus on aina päällä.
Vuorokausi voidaan jakaa tasaisiin osiin (esim. 8h välein) tai syöttää omat käytettävät aikavälit (esim. aamu ja ilta).
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Ajanjakso | Minkä mittaisiin jaksoihin vuorokausi jaetaan. Jokaiselta jaksolta haetaan sitten halvimmat tunnit. [h] Vaihtoehtona on myös oma valinta . Tällöin kellonajat voidaan syöttää itse. Katso lisätietoa kappaleesta Jakson halvimmat tunnit - omavalintaiset jaksot |
6 |
Tuntimäärä | Kuinka monta halvinta tuntia lähtö ohjataan päälle ajanjakson aikana. Eli jos ajanjakso on 6h ja tuntimäärä 2, kello 00:00-06:00 lähtö ohjataan päälle kahtena halvimpana tuntina. Kuten myös kello 06:00-12:00 ja niin edelleen. |
2 |
Peräkkäiset | Jos käytössä, valitaan jakson tunnit siten että ne ovat peräkkäin. Näin yksittäisiä halvimpia tunteja ei välttämättä hyödynnetä, mutta halvin mahdollinen yhtenäinen jakso otetaan käyttöön. Katso esimerkki alta. |
ei |
Aina päällä -raja | Jos sähkö on tätä halvempaa (tai juuri tämän hintaista) niin lähtö on aina päällä. [c/kWh] Voit syöttää tähän myös arvon avg , jolloin käytetään päivän hinnan keskiarvoa. |
-0.5 |
Maksimihinta | Jos sähkön hinta on tätä korkeampi, lähtöä ei aseteta päälle vaikka tunti olisikin halvimpia tunteja. [c/kWh] Voit syöttää tähän myös arvon avg , jolloin käytetään päivän hinnan keskiarvoa.Tämän kanssa pitää olla tarkkana, jos tulee kalliita päiviä. |
30 |
Alla esimerkki miten ohjaukset toteutuivat 12.10.2023 hinnoilla ja yllä olevilla asetuksilla (6h, 2 halvinta tuntia, aina päällä -raja -0.5 c/kWh). Huomaa jaksojen korostus taustavärillä.
Alla on havainnollistettu peräkkäiset-asetuksen vaikutusta. Esimerkkikuvissa asetuksena on 4h ajanjakso ja tuntimäärä 3.
Ei käytössä (oletusarvo):
Valitaan kolme halvinta tuntia.
Käytössä:
Valitaan kolme perättäistä tuntia. Valitaan kello 17-19 koska niiden hinnan keskiarvo on pienempi kuin kello 16-18.
Asetuksiin voidaan syöttää vaihtoehtoisesti yksi tai kaksi omavalintaista jaksoa tuntimäärineen. Tämän avulla saadaan helposti tehtyä esimerkiksi "kolme halvinta tuntia yöllä kello 00-06 väliltä ja yksi halvin tunti illalla kello 18-21 väliltä" -tyylinen ohjaus.
Valittaessa ajanjaksoksi oma valinta
, voidaan syöttää halutut kellonajat ja tuntimäärät alla olevan kuvan mukaisesti.
Tällöin ohjaus voisi mennä esimerkiksi seuraavasti:
- Pakko-ohjaus
- Painamalla tätä voit asettaa kyseisen ohjauksen lähdöt päälle tai pois määritellyksi ajaksi
- Syötä kysyttäessä kuinka monta tuntia pakko-ohjaus on käytössä sekä haluttu lähdön tila (voit syöttää myös osatunteja, esim.
0.5
on puoli tuntia)
- Shellyn hallinta
- Avaa uudessa välilehdessä Shellyn oman hallintasivun
Skriptiä voi jatkojalostaa omalla koodilla. Alla olevat esimerkit löytyvät valmiina.
Skripti | Selitys |
---|---|
shelly-porssisahko-open-meteo-api.js |
Hakee vuorokauden kylmimmän lämpötilan ja muuttaa sen perusteella halvimpien tuntien lukumäärää. |
shelly-porssisahko-addon-temp-hours.js |
Muuttaa halvimpien tuntien lukumäärää Shelly Plus Addonin mittaaman lämpötilan perusteella |
shelly-porssisahko-addon-temp.js |
Ylikirjoittaa ohjauksen tarvittaessa Shelly Plus Addonin mittaaman lämpötilan perusteella |
shelly-porssisahko-ht-sensor-temp.js |
Muuttaa halvimpien tuntien lukumäärää Shelly H&T:n mittaaman lämpötilan perusteella |
shelly-porssisahko-config.js |
Rinnalle asennettava skripti, jonka avulla voi muuttaa pörssisähköohjauksen asetuksia ilman web-käyttöliittymää (esim. etänä puhelimella). Tsekkaa Asetusten muokkaaminen skriptin kautta (etänä) |
Skripti kutsuu seuraavia funktiota eri tilanteissa, mikäli ne ovat määritelty. Katso esimerkkejä niiden käytöstä yllä olevista skripteistä.
Funktio | Määrittely | Parametrit | Selitys |
---|---|---|---|
USER_CONFIG |
USER_CONFIG(inst: number, initialized: boolean) => void |
inst = ohjauksen numero (0, 1, 2 )initialized = asetukset ovat muuttuneet |
Kutsutaan kun asetukset ovat muuttuneet tai juuri ennen logiikan suoritusta. Funktion sisällä voidaan ylikirjoittaa asetuksia. |
USER_OVERRIDE |
USER_OVERRIDE(inst: number, cmd: boolean, callback: function(boolean)) => void |
inst = ohjauksen numero (0, 1, 2 )cmd = logiikan määrittämä komentocallback = takaisinkutsu |
Kutsutaan kun ohjauslogiikka on suoritettu. Tässä voi vielä ylikirjoittaa skriptin ohjauksen. callback() -funktiota pitää kutsua halutulla komennon arvolla. |
USER_LOOP |
USER_LOOP() => void |
Kutsutaan ohjelman ajastinsilmukassa mikäli ei ole muuta tehtävää (10s välein). Funktion pitää kirjoittaa loopRunning = false kun valmis. |
Tämä voi olla kätevä, jos skriptin asetuksia täytyy muuttaa ilman pääsyä skriptin omaan hallintaan. Esimerkiksi Shellyn sovelluksen kautta etänä.
- Asenna käsin tai library-painikkeen avulla
shelly-porssisahko-config.js
pääskriptin rinnalle (pidä pääskripti päällä kuten ennenkin) - Ota kommentit (
//
) pois koodista niiden asetusten kohdalta, joita haluat muokata. Muut pysyvät ennallaan. - Paina save ja käynnistä skripti. Se sammuu automaattisesti.
Esim. alla muutetaan etänä halpojen tuntien lukumäärä arvoon 8h
yhdestä ohjauksesta.
Tavoite on, että skripti on mahdollisimman toimintavarma ja sen voi unohtaa ajoon. Versio 2 on pyörinyt itsellä yhtäjaksoisesti yli 100 päivää ilman ongelmia.
Kun skripti hakee hintoja tai suorittaa ohjauslogiikkaa, vastataan kaikkiin HTTP-pyyntöihin 503 (Service Unavailable) muistin säästämiseksi. Käyttöliittymä osaa hallita tämän.
Tämä virhe voi joskus tulla ja se on ominaisuus. Kokeile avata sivu uudelleen.
Valitse ajanjaksoksi oma valinta (1 jakso)
ja aseta asetukset. Katso Jakson halvimmat tunnit - omavalintaiset jaksot.
Valitse ohjaustavaksi hintaraja
ja aseta hintarajaksi arvon avg
.
Et ole asettanut laitteelle nimeä Shellyn hallinnasta. Nimen voit asettaa Settings
-> Device name
alta.
Huomaa, että tehdasasetuksena nimen kohdalla lukee lukee laitteen malli. Tämä näkyy silti pörssisähköskriptille tyhjänä.
Testattu Shelly Pro3EM + Switch Add-on.
Kun olet asentanut add-onin, näet lähdön numeron Shellyn hallinnassa. Alla olevassa esimerkissä lähdön numero on 100
.
Muuta skriptin asetuksista ohjattavat lähdöt
kyseiseen arvoon, jolloin ohjaus toimii.
Seuraavan päivän hinnat haetaan kello 15. Elering tarjoaa uudet hinnat n. 14:30 alkaen.
Asetukset tallentuvat Shellyn KVS-muistiin (Advanced -> KVS). Asetukset ovat JSON-muodossa ja voit muokata niitä vapaasti myös Shellyn hallinnan kautta. Skripti täytyy käynnistää uudestaan, jotta asetukset tulevat voimaan.
Joskus Eleringillä voi olla ongelmia. Tämän takia on tärkeää asettaa varmuustunnit.
Tarkista Shellyn Diagnostics-loki virheilmoitusten varalta. Voit koittaa avata lokissa näkyvän Elering-osoitteen omassa selaimessa ja katsoa, toimiiko se.
Kokonaishistoriaa tallennetaan ainoastaan 24 ohjauksen verran muistin säästämiseksi.
- Jos vain yksi ohjaus on käytössä, sen historiassa näkyy 24 viime ohjausta.
- Jos kaksi ohjausta on käytössä, niiden historiassa näkyy 12 viime ohjausta.
- Jos kolme ohjausta on käytössä, niiden historiassa näkyy 8 viime ohjausta.
- Shellyn vähäisen muistin takia monia asioita on tehty aika rumasti
- Outoja temppuja on myös tehty minimointia helpottamaan
- Jotain muuttujia on ollut pakko laittaa globaaliksi, koska Shellyn js-moottorin pino tulee nopeasti täyteen
- esim. silmukan
i
saattaa saada ihan yhtäkkiä oudon arvon
- esim. silmukan
- Lopullinen asennettava skripti on "kääntöprosessin" tulos
- Staattiset serverin tiedostot pakataan ja base64-enkoodataan
- Pääskripti minimoidaan
- Käyttää Eleringin CSV-apia muistin säästämiseksi (JSON vie liikaa)
- Muistin käyttö 3.0.0 versiolla huipussaan noin 18kt (Shellyn maksimi 25kt)
- Muille skripteille jää vielä hyvin tilaa
script:1: {
id: 1,
running: true,
mem_used: 11900,
mem_peak: 18116,
mem_free: 13286
},
- Asenna Node.js
- Kloonaa repository ja avaa terminaali
shelly-porssisahko
-kansiossa - Aja komento
npm i
asentaaksesi kirjastot - Aja komento
npm run build
kääntääksesi projektin - Valmiit skriptit löytyvät
dist/
-kansiosta
GNU Affero General Public License v3.0 - LICENSE.txt
Huomaathan, että projekti on täysin harrasteena tehty, eikä siinä ole lisenssin mukaisesti mitään takuuta. Näin ollen tekijä ei ole vastuussa jos sen käytön kanssa on ongelmia.
Käytetty välilehtiratkaisu pohjautuu esimerkkiin täältä.