# System

Sisältää käyttöjärjestelmään ja laitteistoon liittyviä funktioita.

**System.base64encode (strTxt)**  
**System.base64decode (strTxt)** *strTxt Tulostettava teksti*

Koodaa ja dekoodaa tekstiä tai binääridataa base64 -muotoon. Kyseistä koodaustapaa käytetään usein binäärimuotoisen datan siirtämiseksi vain tekstimuotoa tukevan linjan ylitse – usein ascii 7-bit.

Paluuarvot  
 Palauttaa koodatun tai dekoodatun datan.

Esimerkki:  
\-- Lue binääri dataa tiedostosta ja koodaa se   
local bin = file:read (”\*a”)  
local coded = System.base64encode(bin)

**System.shell (strCmd)** *strCmd Suoritettava komento*

Suorittaa komennon järjestelmän shellissä (synkronisesti, eli kutsuva käyttöjärjestemän prosessi odottaa että komento on suoritettu kokonaan) ja palauttaa komennon stdout:iin tulostaman tekstin riveittäin taulukossa. Palautettu taulukko on numeraalisesti indeksoitu 1 eteenpäin, ja yksi tulosteen rivi vastaa yhtä taulukon riviä.

Palauttaa *nil* jos komentoa ei voitu suorittaa, ja tyhjän taulukon jos komento ei tulosta mitään std out:iin.

Komento palauttaa toisena paluuarvona suoritetun komennon paluuarvon, eli n.s. exit code:n.

Esimerkki:  
\-- hakemiston tiedostot  
\-- huom! että kaksi ensimmmäistä aina . Ja ..  
\-- ne pitää ohittaa

```lua
local dir, ec = System.shell (”ls /tmp/*”)
if #dir > 2 and ec == ”0” then
    for i = 3, #dir do 
        print (dir[i])
    end
end
```

**System.log (prio, strCmd)**

prio Loki merkinnän kiireellisyys. Kokonaisluku välillä 0 .. 7 jossa 0 vähiten kiireellinen (debug).  
strCmd Tulostettava teksti

Kirjoittaa merkinnän järjestelmä lokiin.

Paluuarvot  
 *true* mikäli onnistuu, muuten *nil*.

Esimerkki:  
Slc.log(0, ”This is my system log info”)

  
**System.nanosleep (intDly)** *intDly Viive nanosekunteina*

Vastaa POSIX kutsua nanosleep(). Asettaa kutsuvan säikeen uneen (minimissään) annetuksi ajaksi.

Esimerkki:  
\-- Plc ohjelma odottaa 1 millisekunnin  
Slc.nanosleep (1000000)

 **System.nanotimer ()** *Ei argumentteja*

Palauttaa järjestelmän tarkkuusajastimen nykyisen arvon. Ajastin on laskuri (uint64), joka alkaa juosta 0:sta kun käyttöjärjestelmä käynnistyy. Sen laskee nanosekuntteja, ja sen todellinen tarkkuus on usein noin 40 nanosekunnin luokkaa (ARM cortex A8).

Esimerkki:  
print (”Current hires timer value: ”.. System.nanotimer () )

  
**System.parseUrl (strUrl)**  
*strUrl Url teksti*

Parsii URL merkkijonon, ja palauttaa URL eri kentät talukossa.

Esimerkkinä:  
URL: https://areena.yle.fi/tv/ohjelmat/sarjat?t=uusimmat

Parsittu taulukko:   
URL\_taulukko = {  
 protocol = ”https”,  
 user = ””,  
 pass = ””,   
 address=”areena.yle.fi”,  
 port=””,  
 fullpath=”/tv/ohjelmat/sarjat”,  
 path={”tv”, ”ohjelmat”, ”sarjat”},  
 paramstring=”t=uusimmat”,  
 params={t=”uusimmat”}  
}

Toinen esimerkki:

URL:   
http://name:secret@www.google.com:8080/this/is/path/file.xml?param1=1&amp;meaning=42

Parsittu taulukko:   
{  
 protocol = "http",  
 user = "name",  
 pass = "secret",  
 address = "www.google.com",  
 port = "8080",  
 fullpath = "/this/is/path/file.xml",  
 path = {"this", "is", "path", "file.xml" },  
 paramstring = "param1=1&amp;meaning=42",  
 params = {  
 param1 = "1",  
 meaning = "42"  
 }  
}

  
Virhetilanteessa funktio voi palauttaa arvon *nil*.

Esimerkki:

```lua
local parsed = System.parseUrl ( urlString )
if parsed.protocol == ”http” then
    -- Handle http request
end
```

  
**System.encodeUrl (strData)**  
**System.decodeUrl (strData)** *strData Tulostettava teksti*

Kun käsitellään URL tekstejä, on itse lokaattorin lopussa annettavien parametrien arvot koodattava niin sanotulla prosentti koodauksella. Näillä funktioilla voidaan tehdä parametrien arvojen prosenttikoodaus, ja dekoodaus.

Paluuarvot  
 koodattu tai purettu teksti.

Esimerkki:  
\-- Palauttaa meik%C3%A4%0A  
local encoded = System.encodeUrl (”meikä”)

**System.serialize (data)** *data Serialisoitava data (merkkijono, luku, taulukko)*

Tekee lua objekteille niin sanotus sarjoituksen, eli serialisoinnin.

Täma muunnos tarkoittaa että objekti muutetaan takaisin lähdekoodi -muotoon. Tätä muunnosta tarvitaan esimerkiksi silloin kun lua taulukko halutaan siirtää tcp yhteyden ylitse toiseen laitteeseen, tai vain IPC-kanavan lävitse laitteen muistissa toiseen prosessiin, tai tallentaa tiedostoon.

Serialisoitu objekti on helppoa palauttaa takaisin ohjelmassa käsiteltäväksi, koska se voidaan ”ajaa” normaalissa lua tulkissa.

Vastaa suurinpiirtein javascriptin JSON.stringify() kutsua.

Tämä funktio on käyttökelpoinen paitsi tiedonsiirrossa ja tallentamisessa, myös ohjelmien debuggauksessa, koska miltei mikä tahansa objekti voidaan tulostaa tekstimuodossa vaikkapa konsoliin ohjelmoijan tarkasteltavaksi.

Paluuarvot  
 Annettu objekti tekstimuodossaan merkkijonona, tai nil mikäli kutsuttiin virheellisillä arvoilla.

 **System.importCSV (strCsv \[, strDlm\] )**

strCsv Tab eroteltu data  
strDlm Sarakeet erottava merkki, oletus on \\t eli tabulaattori

Tämä funktio luo CSV muotoisesta – tai oletusarvoisesti TAB-erotellusta tekstistä – taulukon ja palauttaa sen.

Nimestään huolimatta oletus sarake-erottimelle on ’\\t’.

Luotavan rivin nimen oletetaan löytyvän sarakkeesta, jonka nimi on ”dataname”, ”pointname”, ”rowname”, ”datapoint” tai ”keyname” – kaikki edellämainitut ovat synonyymejä.

Esimerkki:  
csv = \[\[name description pv  
data1 tunnit 7.0  
data2 minuutit 15.0  
data3 sekunnit 23.0  
data4 paivat 1.0  
\]\]

local d = System.importCSV (csv)

&gt;&gt; taulukon d sisältö:  
d = {  
 data1 = {description = ”tunnit”, pv = 7},  
 data2 = {description = ”minuutit”, pv = 15},  
 data3 = {description = ”sekunnit”, pv = 23},  
 data4 = {description = ”paivat”, pv = 1}  
}

**System.archInfo ()**

Funktio palauttaa taulukossa laitteiston käyttöjärjestelmän ja prosessoriarkkitehtuurin.

Palauttaa taulukon, jossa rivit  
 os Käyttöjärjestelmän nimi. Joitakin tavallisia arvoja ovat mm.   
  **Ubuntu, Builtroot, Debian.**

 arch Prosessoriarkkitehtuuri. Tyypillisiä arvoja ovat   
 **armv7l** (beagle bone) ja **x86\_64**

  
Esimerkki:  
local d = System.archInfo (csv)  
print (”Käyttöjärjestelmä: ”.. d.os)

**System.getNetworkInterfaces ()**

Funktio palauttaa taulukossa järjestelmän verkkosovittimet ja niiden asetukset.

  
**System.pid ()**

Funktio palauttaa kutsuvan prosessin (yleensä slc engine) process ID (eli pid) numeron. Tämä on se tekninen tunnus, jolla käyttöjärjestelmä tunnistaa prosessit, ja jonka avulla voi lähettää mm. signaaleita prosessien välillä.

**System.sendSig (pid, signal)** *pid (int) prosessin ID numero*  
*signal (int) signaali joka lähetetään (kts. posix singals)*

Funktion avulla voi lähettää signaalin käyttöjärjestelmäprosessien välillä. Palauttaa *true* onnistuessaan, ja *nil* mikäli kutsussa ilmeni virhe.