Shelly-laitteisiin selaimella ohjattava ilmainen ja avoimen lähdekoodin pörssisähkösovellus. Skripti pyörittää käyttöliittymää omalla web-serverillä ja tallentaa asetukset Shellyn muistiin.
Tämän skriptin avulla voi ohjata Shellyn relekytkintä sähkön hinnan mukaan, ilman rekisteröitymistä mihinkään palveluun.
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".
HUOMIO - 02.11.2024:
Uuden v3 testiversio on julkaistu. Se mahdollistaa jopa kolmen yhtäaikaisen ohjauksen eri asetuksilla eri lähdöille. https://github.com/jisotalo/shelly-porssisahko/tree/dev-v3
- Ilmainen sekä 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)
- Nykyisen ja seuraavan päivän hinnat sekä toteutuva ohjaus näkyvillä
- Kolme ohjaustapaa:
- käsiohjaus - yksinkertaisesti ohjaus päälle/pois
- hintaraja - jos hinta on alle rajan, laitetaan ohjaus päälle
- jakson halvimmat tunnit - valitaan halutulta aikajaksolta x halvinta tuntia
- 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ä
- Todettu toimivaksi 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
- shelly-porssisahko - Pörssisähköohjaus Shelly-releisiin
- Ominaisuudet
- Sisällysluettelo
- Muutoshistoria
- Tukeminen
- Asennus
- Skriptin päivitys
- Laitteisto ja sähköinen kytkentä
- Asetukset
- Valmiita esimerkkiasetuksia
- Lisätoiminnot ja omat skriptit
- Esimerkki: Ohjauksen muutos keskiarvon avulla
- Esimerkki: Ohjaustuntien asetus lämpötilan perusteella (Shelly Plus Add-On ja DS18B20)
- Esimerkki: Ohjaustuntien asetus lämpötilan perusteella (erillinen Shelly H&T)
- Esimerkki: Ohjauksen rajoitus lämpötilan avulla (Shelly Plus Add-On ja DS18B20)
- Esimerkki: Ulkolämpötilan hakeminen Open-Meteo-sääpalvelusta ja sen hyödyntäminen
- Esimerkki: Asetusten määrittäminen skriptissä (ilman käyttöliittymää)
- Kysymyksiä ja vastauksia
- 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?
- Teknistä tietoa ja kehitysympäristö
- In English
- 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 skriptistä on hyötyä, voit vaikka tarjota kahvit vastineena!
HUOMIO: Skripti vaatii firmwaren 1.0.7 tai uudemman
-
Ota Shelly käyttöön, yhdistä se wifi-verkkoon ja päivitä sen firmware. Avaa Shellyn hallinta nettiselaimella.
-
Laita Websocket debug päälle (Settings -> Debug -> Enable websocket debug). Näin näet suoraan hallintapaneelin osoitteen skriptin alla.
-
Avaa Scripts-sivu Shellyn hallinnasta. Poista olemassaolevat skriptit, jos niitä on.
-
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. Asenna se painamalla Import code
-
Kun skripti ilmestyy, paina Save
-
Tallentamisen jälkeen paina Start, jolloin skripti käynnistyy
-
Jos websocket debug on päällä (kohta 2), näet hallinnan osoitteen suoraan skriptin alla konsolissa. Kopioi tämä osoite ja avaa se selaimella. Jos et näe sitä niin osoite on muotoa
http://ip-osoite/script/1
-
Varmista vielä että skripti käynnistyy aina automaattisesti. Eli Scripts-sivulla pitää shelly-porssisahko.js -skriptin kohdalla olla valinta päällä.
-
Valmis! Avaa käyttöliittymä selaimessa (kohta 10) ja säädä asetukset kohdilleen Asetukset ja Valmiita esimerkkiasetuksia -kappaleiden 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, kirjaston käytön sijaan.
Jos haluat päivittää skriptin uusimaan versioon, poista nykyinen skripti ja tee asenna uusi Library-painikkeen kautta. Kaikki asetukset säilyvät. Voit myös päivittää sen käsin (katso Asennus käsin).
HUOMIO: Tämän jälkeen skripti ei enää välttämättä käynnisty automaattisesti. Päivitä Scripts-sivu (esim. painamalla F5 selaimessa) ja laita skripti käynnistymään automaattisesti uudelleen (kuten asennusohjeiden kohdassa 11).
Uskallan suositella Shelly-tuotteiden ostoa Nurkan Takaa -kaupasta, sillä omien kokemuksien perusteella homma toimii erittäin luotettavasti ja hinnat ovat Suomen alhaisimmat.
Olen kehittänyt tämän skriptin alunperin Shelly Plus 1PM -relekytkimelle. Jos ohjaat kontaktoria, on suositeltavaa käyttää Shellyn sinisiä laitteita, jotka kestävät paremmin kelan aiheuttamia kytkentäpiikkejä. Näitä ovat esimerkiksi:
Jos kuitenkin käytät esim. Shelly Plus 1PM -laitetta kontaktorin kanssa, RC-suodatin voi auttaa. Jännitepiikit ovat tunnetusti aiheuttaneet laitteen yllättävää uudelleenkäynnistystä.
Lisää hyvää tietoa löytyy Shelly tuki (suomeksi) -ryhmästä.
Nämä asetukset ovat voimassa kaikilla ohjaustavoilla.
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
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 |
Sähkön ALV | Käytettävä ALV-% sähkön hinnalle. [%] | 24 |
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 |
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 |
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 |
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 |
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ä.
Asetus | Selite | Esim. (kuva yllä) |
---|---|---|
Ajanjakso | Minkä mittaisiin jaksoihin vuorokausi jaetaan. Jokaiselta jaksolta haetaan sitten halvimmat tunnit. [h] HUOMIO: Versiosta 2.12.0 lähtien 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.
Versiosta 2.12.0 lähtien voidaan vaihtoehtoisesti syöttää 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 lähdön 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)
- Shelly
- Avaa uudessa välilehdessä Shellyn oman hallintasivun
Koska asetuksia on nykyään niin paljon, ajattelin listata tähän esimerkkejä.
- Kolme halvinta tuntia väliltä 00:00-06:00
- Jos hinnat ei tiedossa, ohjaus päällä 01:00-04:00
- Jos yhteysvika, ohjaus päällä
- Kolme halvinta tuntia väliltä 00:00-06:00
- Yksi halvin tunti välillä 18:00-21:00
- Jos hinnat ei tiedossa, ohjaus päällä 01:00-04:00
- Jos yhteysvika, ohjaus päällä
- Viisi halvinta tuntia vuorokaudelta
- Jos hinta alle 2 c/kWh, ohjaus on aina päällä
- Jos hinnat ei tiedossa, ohjaus päällä 02:00-04:00 ja 14:00-16:00
- Jos yhteysvika, ohjaus päällä
- Neljä halvinta peräkkäistä tuntia kahdelta jaksolta (eli yhteensä 8 tuntia)
- 00:00 - 12:00 (4 tuntia)
- 12:00 - 24:00 (4 tuntia)
- Jos hinta alle 2 c/kWh, ohjaus on aina päällä
- Jos hinnat ei tiedossa, ohjaus päällä 00:00-05:00, 14:00-15:00 ja 20:00-22:00
- Jos yhteysvika, ohjaus päällä
- Ohjaus on päällä kun hinta on alle vuorokauden keskiarvon
- Jos halpa tunti, ohjaus on kuitenkin päällä vain tunnin ensimmäiset 45 minuuttia
- Eli jos on peräkkäisiä tunteja, niiden välissä on 15 min tauko
- Jos hinnat ei tiedossa, ohjaus päällä 00:00-06:00
- Jos yhteysvika, ohjaus päällä
- Ohjaus on päällä vuorokauden kalliimpana tuntina (huomaa käänteinen ohjaus)
- 23 muuta tuntia ohjaus on pois
- Jos hinnat ei tiedossa, ohjaus päällä 08:00-09:00
- Jos yhteysvika, ohjaus päällä
Versiosta 2.8.0 lähtien on mahdollista lisätä omaa toiminnallisuutta pörssisähköohjuksen rinnalle. Tämä tapahtuu lisäämällä omaa koodia skriptin perään. Idea on, että pörssisähköohjauksen asetuksia tai ohjausta voidaan hienosäätää tarpeen mukaan, esimerkiksi lämpötilan perusteella. Alla oleva esimerkit voi asentaa Library-painikkeen takaa.
Alla esimerkki, kuinka käyttöliittymä näyttää Shelly H&T:n lämpötilaa hyödyntävän ohjauksen tilan:
Globaalit muuttujat
Skriptissä on saatavilla globaali muuttuja _
, joka sisältää skriptin tilan. Sen kuvaus löytyy koodista: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78
Ohjauksen muutokset (USER_OVERRIDE)
Kun skripti on todennut ohjauksen tilan, kutsuu se funktiota USER_OVERRIDE
, mikäli se on määritelty. Tässä funktiossa voidaan vielä tehdä viime hetken muutoksia skriptin ohjaukseen.
Vaihtoehtoisesti voidaan myös käskeä skriptiä ajamaan logiikka uudelleen. Tämä voi olla hyödyllistä esimerkiksi jos asetuksia on muutettu ja halutaan suorittaa logiikka heti uusilla asetuksilla.
USER_OVERRIDE(cmd: boolean, state: object, callback: function(boolean|null)) => void
parametri | tyyppi | selite |
---|---|---|
cmd |
boolean |
Skriptin määrittämä lopullinen komento (ennen mahdollista käänteistä ohjausta) |
state |
object |
Skriptin tila, sama kuin globaali muuttuja _ .Selitykset koodissa: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78 (esim state.s.p.now ) |
callback |
function(boolean|null) |
Takaisinkutsufunktio, jota täytyy kutsua lopullisella komennolla, esim: callback(true) .Jos parametri on null , eli kutsu on callback(null) , ohjausta ei aseteta, vaan logiikka ajetaan hetken päästä uudelleen. |
paluuarvo |
void |
Ei paluuarvoa |
Asetusten muutokset (USER_CONFIG)
Kun skripti on hakenut asetukset muistista tai kun pörssisähköohjauksen logiikan suoritus alkaa, kutsuu se funktiota USER_CONFIG
, mikäli se on määritelty. Tässä funktiossa voidaan ylikirjoittaa yksittäisiä tai kaikki asetukset. Näin asetukset voidaan määrittää skriptissä ilman käyttöliittymää (esim. Shellyn pilvipalvelun kautta) tai niitä voidaan muuttaa lennossa esimerkiksi lämpötilaan perustuen.
USER_CONFIG(config: object, state: object, initialized: boolean) => object
parametri | tyyppi | selite |
---|---|---|
config |
object |
Skriptin tämänhetkiset asetukset |
state |
object |
Skriptin tila, sama kuin globaali muuttuja _ .Selitykset koodissa: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78 (esim state.s.p.now ) |
initialized |
boolean |
true jos funktiota kutsutaan asetusten muistista hakemisen jälkeen, false jos kyseessä on logiikan suoritus. Tämän avulla tietää, onko aktiiviset asetukset tallennetut (true ) vai mahdollisesti ylikirjoitetut. Näin esim. alkuperäiset käyttöliittymältä tallennetut asetukset voidaan ottaa talteen. |
paluuarvo |
object |
Lopulliset asetukset, joita halutaan käyttää |
Tämä esimerkki näyttää kuinka voi hyödyntää hintatietoja ohjauksen hienosäätöön.
Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjauksen muutos keskiarvon avulla Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
Skripti asettaa ohjauksen pois, mikäli tuntihinta on yli 80% päivän keskiarvosta. Muuten mennään pörssisähköohjauksen mukaan.
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-override-avg-price.js
Tämä esimerkki näyttää, kuinka voi hyödyntää mitattua ulkolämpötilaa ohjaustuntien hienosäädössä.
Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjaustuntien asetus lämpötilan perusteella (Shelly Plus Add-On ja DS18B20) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
Käyttää lämpötila-anturia, jonka id on 100.
Esimerkin toiminta
- Jos lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
- Jos lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
- Jos lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
- Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-addon-temp-hours.js
Tämä esimerkki näyttää, kuinka voi hyödyntää toisen Shelly H&T:n lämpötilamittausta ohjaustuntien hienosäädössä. Eli pörssisähköskripti pyörii relelähdön omaavassa Shellyssä ja erikseen on ulkolämpötilaa mittaava Shelly H&T.
Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjaustuntien asetus lämpötilan perusteella (erillinen Shelly H&T) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
HUOM: Tämä vaatii, että Shelly H&T asetetaan actions -> sensor reports
alle osoite http://ip-osoite/script/1/update-temp
, missä IP-osoite on pörssisähköskriptiä pyörittävän Shellyn osoite. Lisäksi sensor reports
pitää ruksia käyttöön. Näin kyseinen laite lähettää lämpötilan tähän osoitteeseen.
Esimerkin toiminta
- Jos lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
- Jos lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
- Jos lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
- Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-ht-sensor-temp.js
Tämä esimerkki näyttää, kuinka voi hyödyntää lämpötilamittausta ohjauksen rajoituksessa siten, että ei lämmitetä turhaan mutta ei myöskään päästetä liian kylmäksi.
Asenna esimerkkiskripti nimeltä Esimerkki: Ohjauksen rajoitus lämpötilan avulla (Shelly Plus Add-On ja DS18B20) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
Käyttää lämpötila-anturia, jonka id on 100.
- Jos lämpötila on yli 15 astetta, asetetaan lähtö aina pois
- Jos lämpötila on alle 5 astetta, asetetaan se aina päälle
- Muuten annetaan ohjata pörssisähköohjauksen mukaan
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-addon-temp.js
Tämä esimerkki hakee koordinaattien perusteella kuluvan vuorokauden alhaisimman ja korkeimman lämpötilan Open-Meteo-sääpalvelun API-rajapinnasta. Alhaisimman lämpötilan perusteella valitaan ohjaustuntien määrä ja ohjausminuutit.
Säätiedot haetaan vain kerran vuorokaudessa tai asetusten muuttuessa. Open-Meteo ei vaadi rekisteröitymistä.
Asenna esimerkkiskripti nimeltä Esimerkki: Ulkolämpötilan hakeminen Open-Meteo-sääpalvelusta ja sen hyödyntäminen Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
Esimerkin toiminta
- Käytetään Tampereen koordinaatteja
- Jos vuorokauden alhaisin lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
- Jos vuorokauden alhaisin lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
- Jos vuorokauden alhaisin lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
- Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-open-meteo-api.js
Jos et halua käyttää tai pysty käyttämään selainpohjaista käyttöliittymää, voidaan asetukset määrittää myös skriptissä (versiosta 2.8.0 alkaen). Tämä tapahtuu lisäämällä skriptin perään uusi funktio USER_CONFIG
.
Tämä myös mahdollistaa asetusten muuttamisen esimerkiksi etänä Shellyn pilvipalvelusta käsin skriptiä muokkaamalla. Huomaa, että käyttöliittymästä tehdyt asetusmuutokset ylikirjoitetaan.
Asenna esimerkkiskripti nimeltä ESIMERKKI: Asetusten määrittäminen skriptissä Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.
Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-user-config.js
Voit myös halutessasi hyödyntää nykyisiä asetuksia ja vain muokata jotain niistä, sillä funktion parametri config
sisältää tallennetut asetukset.
Esimerkki: Olet laittanut asetukset kuntoon kotona, mutta huomaat reissun päällä että halvimpia tunteja pitäisikin olla neljän sijaan viisi. Voit tehdä muutoksen etänä pilvipalvelusta lisäämällä alla olevan koodin skriptin perään:
function USER_CONFIG(config) {
//Muutetaan vain "halvimmat tunnit" -ohjauksen tuntimäärä arvoon 5
//Muuten asetukset pysyy samana
config.m2.cnt = 5;
return config;
}
Tällä hetkellä jos skripti hakee hintoja tai suorittaa ohjauslogiikkaa, vastataan kaikkiin HTTP-pyyntöihin 503 (Service Unavailable). Käyttöliittymä osaa hallita tämän.
Jos hintojen hakeminen ei onnistu, voi tämä virhe tulla käyttöliittymää avatessa (hintojen haun aikakatkaisu on 5s --> pahimmillaan virhe voi tulla 5 sekunnin ajan). Yritä avata sivu uudelleen.
Voi olla että muutan tätä myöhemmin, vaatii vielä testejä. Syy on jälleen muistin säästäminen.
Versiosta 2.12.0 lähtien tämä onnistuu helposti. Valitse ajanjaksoksi oma valinta (1 jakso)
ja aseta asetukset. Katso Jakson halvimmat tunnit - omavalintaiset jaksot.
Vanhemmat versiot: Aseta ohjaustavaksi jakson halvimmat tunnit
ja päivän siirtohinnaksi 999
c/kWh. Näin kaikki päivätunnit ovat kalliita ja halvimmat tunnit valitaan sen johdosta yöajalta.
Versiosta 2.6.0 lähtien tämä onnistuu valitsemalla ohjaustavaksi hintaraja
ja asettamalla 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 tuntui päivittävän ne rajapintansa puoli kolmen kieppeillä, joten aiemmin yrittäminen on turhaa.
- Skriptin tekemisen alkuvaiheessa Shellyn firmware ei hallinnut muistia kunnolla -> muistista oli kokoajan pulaa. Tämän takia monet asiat on optimoitu äärimilleen, vaikka enää ei ehkä tarvitsisi
- Shellyyn asennattava skripti on "kääntöprosessin" tulos, jotta skripti saadaan mahtumaan mahdollisimman pieneen tilaan
- Koodissa on jonkin verran outoja ja rumia temppuja, mitä en tekisi muualla
- Näiden syy on usein minimoida skriptin kokoa, joko suoraan tai helpottamalla minimointikirjastojen toimintaa
- Esim:
document.querySelector()
on korvattuqs()
jolloin säästetään paljon tilaa - Esim: typerät mahdollisimman lyhyet muuttujanimet ja kentät
- Staattiset web-serverin tiedostot (html, css, js) minimoidaan, pakataan gzip-muotoon ja base64-enkoodataan
- Nämä tiedostot sisällytetään
shelly-porssisahko.js
-skriptiin- Esim
atob('#[tab-config.js]')
korvataan kyseisen tiedoston pakatulla sisällöllä, joten lopputulos on luokkaaatob("H4sIAAAAAAAACo1...
- Esim
- Nämä tiedostot sisällytetään
- Myös
shelly-porssisahko.js
minimoidaan - Käyttää elering.ee:n CSV-muotoista API:a (JSON vie liikaa muistia)
src/shelly-porssisahko.js
- Itse skripti, ei kuitenkaan ajettavissa Shellyssä (vaatii "kääntämisen")
src/after-build-examples/
- Esimerkkiskriptit, jotka yhdistetään shelly-porssisahko.js kanssa käännön lopussa
src/statics/
- Staattiset html, js ja css -tiedostot
dist/shelly-porssisahko.js
- "Käänetty" valmis skripti joka voidaan laittaa ajoon
- Minimoitu ja sisältää myös staattiset tiedostot
dist/*.js
- Muut käännetyt esimerkkiskriptit
- Minimoitu ja sisältää myös staattiset tiedostot
dist/statics/
- Staattiset tiedostot, jotka muodostuvat kääntöprosessin aikana, debuggausta varten
- Minimoidut staattiset tiedostot sekä pakatut versiot
- Ei sisälly versiohallintaan
Skriptin versio 2.11.0 vie enimillään hetkellisesti noin 15kt RAM-muistia (Shellyn maksimi 25200).
"script:1": {
"id": 1,
"running": true,
"mem_used": 9240,
"mem_peak": 14854,
"mem_free": 15960
},
Käyttää Node.js -ympäristöä.
Kääntöprosessi:
- 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 - Valmis skripti löytyy
dist/shelly-porssisahko.js
Komentoja
npm run build
- "kääntää" eli tekee valmiin
dist/shelly-porssisahko.js
-skriptin
- "kääntää" eli tekee valmiin
npm run upload
- lähettää
dist/shelly-porssisahko.js
-skriptin määritettyyn shellyyn ja käynnistää sen
- lähettää
npm start
- ajaa
npm run build
ja sen jälkeennpm run upload
- ajaa
npm run debug
- kuuntelee porttiin 8001 tulevaa UDP-dataa
- aseta shellystä UDP debug muotoon
ip_osoitteesi:8001
npm run serve
- käyttöliittymän kehitystä varten
- käynnistää paikallisen web-serverin ja tarjoaa
src/statics/
-kansion tiedostot portista 3000
This is a script to control relay by Nordpool electric spot prices for Shelly products with web-based user interface.
At the moment it's available only in Finnish and the spot price is queried for Finland.
There will be an English version (maybe with country selection) available later when I have an insipiration to work on it.
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.