Apufunktiot

Ensto/Koodin dokumentaatio/Main/Apufunktiot

(Rivit 199-213)Funktio openWifiInfo nimensä mukaisesti avaa tiedot paikallisesti tallennetusta wifi-yhteydestä. SiPy käyttää tätä yhteyttä oletuksena, jos se ei vastaanota uutta yhteyttä. SSID ja salasana luetaan files-kansion wifiInfo-tekstitiedostosta, jossa molemmat on tallennettu omalle rivilleen. Lopuksi arvot palautetaan.

(Rivit 209-213)Funktio saveWifiInfo tallentaa parametreina saadut SSID:n ja salasanan samaan tekstitiedostoon wifiInfo.txt. Molemmat tallennetaan omalle rivilleen, helpompaa lukua varten.

(Rivit 215-223)Funktio openLoads lataa palvelimen tietokannasta järjestelmän kuormien tiedot, luo niiden avulla uudet kuorma-oliot ja tallentaa ne osaksi loads-listaa. Aluksi haetaan data urequests-moduulin get-komennolla halutusta osoitteesta.

LoadData-muuttujaan tallennetaan JSON versio ladatusta datasta. Datan täytyy olla muotoiltu niin, että tämä JSON on lista eri kuormista, jotka ovat Python-sanakirjoja. Listan läpi voidaan käydä ja sanakirjasta voidaan hakea arvot käyttämällä avaimia, kuten “name” tai “id”.

Lopuksi palautetaan vastaus itse, jotta socketin viemä muisti voidaan palauttaa halutussa kohdassa koodia.

(Rivit 239-245)Funktio openPhases tekee saman kuin openLoads, mutta vaiheille.

(Rivit 225-237)Funktio sortLoads lisää kaikki järjestelmän kuormat niiden vastaavien vaiheiden listoihin addLoad-funktiota käyttäen. Lopuksi kuormat asetetaan vaiheiden listoissa prioriteettijärjestykseen.

(Rivit 247-254)Funktio openPass avaa files-kansiosta parametrina annetun tiedoston. Tässä tiedostossa on samalla rivillä, pilkulla erotettuna käytettävän InfluxDB-tietokannan käyttäjänimi ja salasana. Nämä palautetaan listana käyttöä varten.

(Rivit 256-260)Funktio setMeasTime on apufunktio, joka asettaa ensimmäisenä parametrina annetun listan alkiot vastaamaan toisena parametrina annetun listan alkioita.

(Rivit 262-267)Funktio parseStringToTime tulkitsee InfluxDB-tietokannan aikaleima-merkkijonon numeroiksi ja palauttaa ne listana.

(Rivit 270-302)Funktiota getCloudEnes kutsutaan vain kerran käynnistyksessä. Se lataa InfluxDB-tietokannasta tämänhetkisen tunnin kulutukset eri kuormille ja vaiheille, mikäli SiPy sammuu kesken tunnin. Aluksi määritellään url, josta tietokanta löytyy, johon myös sisällytetään esimerkiksi tietokannan käyttäjätunnus ja salasana InfluxDB:n url-enkoodauksen mukaan. Pretty-arvo määrittää palauttaako tietokanta tiedon “nätisti” muotoiltuna, mitä haluamme, eli asetamme arvoksi true.

Seuraavaksi käymme listan kuormia/vaiheita läpi yksi kerrallaan. Aluksi tarkistamme nykyisen ajan SiPyn RTC:stä (real-time clock). Vertaamme sitä myöhemmin haettuun dataan. Queryn arvoa merkitään q:lla. Kerromme InfluxDB:lle, että haluamme viimeisimmän kulutetun energian mittauksen (last(totalEne)) tiedot getID:n palauttamasta ID:stä.

Seuraavaksi lähetetään get-pyyntö tietokannalle ja jälleen muutetaan vastaanotettu data JSON-muotoon. Luetaan datan aikaleima ajaksi, jota vertaamme nykyiseen aikaan. Jos niiden vuodet, kuukaudet, päivät ja tunnit täsmäävät, on edellisessä mittauksessa kyseessä sama tunti kuin nyt on meneillään. Tällöin luetaan vastauksesta energian arvo ja asetetaan se. Lisäksi päivitetään nykyinen mittausaika.

Jos arvot eivät täsmää, mitään ei tehdä.

(Rivit 304-327)Funktio getCloudMaxHourPower hakee InfluxDB-tietokannasta viimeisimmän 12 kuukauden ajalta suurimman tuntitehon. Funktio tulostaa sen ja palauttaa myös sen arvon. Tällä hetkellä funktiota ei käytetä ohjelmassa mihinkään.

Jälleen get-komennolle annetaan tietokannan osoite, tiedot ja query yhtenä merkkijonona. Nyt käytetään InfluxDB:n query languagen max-käskyä hakemaan suurin arvo, kuitenkin, että päiviä on enintään 365 nykyisestä taaksepäin. Data muutetaan taas JSON-muotoon ja energia luetaan siitä. JSON-muodossa datassa on sisäkkäin sekä sanakirjoja ja listoja ja siksi rivi (ene = jsonOut[“results”][0][“series”][0][“values”][0][1]) näyttää hieman epäselvältä. Otetaan myös kyseisen kulutuksen ajankohta ja lopuksi tulostetaan molemmat. Funktion päätteeksi palautetaan kulutuksen arvo.

(Rivit 329-334)Debuggaus funktio printInfo, joka tulosti kuormien ja vaiheiden infoja.

(Rivit 336-340)Funktio getTotalEnergy palauttaa koko järjestelmän kuluttaman energian. Tämä lasketaan parametrina annettujen vaihelistan vaiheiden kuluttamista energioista.

(Rivit 342-384)Funktio cloudThread vastaa ohjausmuuttujien arvojen päivittämisestä palvelimelta. Sitä pyöritetään rinnakkain muun ohjelman kanssa omassa threadissaan. Sitä ei kuitenkaan käynnistetä ennen kuin internet-yhteys on luotu ja muut valmistelut tehty. Tätä varten tarkistetaan startto-muuttujan arvoa, joka päivitetään true:ksi kun kaikki on valmista threadin koodin käynnistämiselle. Parametreina annetaan threadLoads, joka on siis vain aikaisemmin määritelty lista kuormista ja threadPhases, joka on lista vaiheista. Globaalien muuttujien(maxHour, startto) arvot pystyvät muuttumaan funktion ulkopuolella ja funktio saa niiden arvot heti käsiinsä ja pystyy myös itse globaalisti muuttamaan niitä.

Jälleen määritellään url-muuttujaan osoite, josta pystymme get:taamaan tarvittavat tiedot. Saatu data muutetaan jälleen JSON-muotoon ja käydään läpi. Datassa ovat kaikki kuormat ja niiden tiedot. Verrataan näiden kuormien ID:eitä paikalliseen listaan ja jos täsmäys löytyy, niin otetaan kyseisen datakuorman ohjausarvo ja prioriteetti talteen, sekä asetetaan paikallisen kuorman arvot vastaaviksi.

Seuraavaksi haetaan maksimituntiteho. Määritellään jälleen url ja muutetaan data JSON:iksi. Jälleen verrataan ID:eitä ja asetetaan globaali maxHour-muuttuja datan mukaiseksi, mikäli ID:t vastaavat. Tässä versiossa ohjelmaa maksimituntiteho on tallennettu samaan tietokantaan kuin yksittäiset vaiheet, vaikka oikeasti se onkin koko järjestelmän ominaisuus.

(Rivit 386-389)Funktiota sendInfo kutsuttaisiin, kun SiPy lähettäisi dataa Bluetoothin kautta. Emme kuitenkaan lopulta tehneet tätä toiminnallisuutta.