Úvod

Původně byla Lua vyvinuta za účelem zlepšení funkcionality stávajících aplikací, časem se z ní stal samostatný programovací jazyk, který je v mnohém podobný legendárnímu Pascalu.


Vytvořena byla v roce 1993 v Tecgrafu, tehdy známém jako počítačová grafická technologická skupina PUC-Rio, jako odpověď na zvýšenou poptávku po větším uzpůsobení programů. Naprogramována je na ANSI C a má vcelku jednoduché C API, to znamená značnou kompatibilitu napříč platformami. Lua je vyvíjena, implementována, udržována týmem v PUC-Rio (Katolická Univerzita v Rio de Janeiru).


Lua znamená v portugalštině měsíc. Nicméně název není zkratka a jediný správný způsob zápisu je „Lua“.


Hlavními výhodami jsou: jednoduchost, efektivita, a přenosnost kódu. Kompletní dokumentaci k LUA naleznete na oficiálních stránkách: http://www.lua.org/manual/5.1/. V tomto článku se dočtete základní tipy a logické postupy při programování v jazyce lua.


Struktura kódu

Stejně jako v ostatních jazycích se i v Lua píše kód řádků jeden pod druhý. Není zapotřebí ukončovacích znaků na konci každé řádky (nicméně Lua ignoruje ; na koncích řádku, takže se nebudete muset odnaučit zvyky z jiných jazyků kde je ukončování řádků nutné).


Stanovení lokálních proměnných

pro stanovení lokální proměnné stačí napsat:

local <nazev_promenne>

případně rovnou stanovit proměnnou s její hodnotu:

local <nazev_promenne> = <hodnota>
příklad:
local promenna1
local promenna2 = "aaa" -- jde o proměnnou typu string (textový řetězec)
local promenna3 = 17 -- jde o proměnnou typu number (číslo)


Pro řetězení funkcí se užívá dvou teček " .. ".

příklad:

-- deklarace proměnných
-- pokud proměnné následně mají tvořit věty, tak doporučujeme meyeru yařadit již do proměnné, pokud je to možné
local text1 = "I "
local text2 = "love "
local text3 = "Home Center 2!"
local text4 = "Hello my name is "

local result1 = text1 .. text2 .. text3 -- spojení třech proměnných do jedné.
-- pokud by mezerz nebyli v proměnné zahrnuty, tak bz proměnná result vypadala následovně:
-- local result = text1 .. " " .. text2 .. " " .. text3

local result2 = text4 .. "Lili" -- přidání textu k roměnné

-- Zobrazí: "I love Home Center 2!"
fibaro:debug(result1)

-- Zobrazí: "Hello my name is Lili"
fibaro:debug(result2)


Podmíněné příkazy

Pokud chcete, aby se něco stalo pouze za určitých podmínek, tak je nutné je nadefinovat:

if (<podminka>) then
    <prikaz 1>
elseif (<podminka>) then
    <prikaz 2>
elseif (<podminka>) then
    <prikaz 3>
else
    <prikaz 4>
end

Příklad:

if (a == 1) then -- pokud je proměnná a rovna 1 tak ...
    b = 2    -- do proměnné b ulož hodnotu 2 ...
    c = 3    -- do proměnné c ulož hodnotu 3 ...
elseif (a == 2) then -- ... nebo pokud je proměnná a rovna 2 tak ...
    b = 3    -- do proměnné b ulož hodnotu 3 ...
    c = 4    -- do proměnné c ulož hodnotu 4 ...
else    -- jinak vykonej následující příkazy (pokud proměnná a nemá hodnotu 1 ani 2)
    b = 4 -- do proměnné b ulož hodnotu 4 ...
    c = 5 -- do proměnné c ulož hodnotu 5
end  -- konec podmínky


Operátory

Základní operátory

==rovnost
~=nerovnost
>větší
<menší
>=vetší či rovno
<=menší či rovno
local a = 2
local b = 3
local c = 5

-- Zobrazí textový řetězec "a je rovno nebo menší než b"
if (a > b) then
fibaro:debug("a je větší než b")
else
fibaro:debug("a je rovno nebo menší než b")
end

-- Zobrazí textový řetězec "c se rovná 5"
if (c ~= 5)
fibaro:debug("c se nerovná 5")
else
fibaro:debug("c se rovná 5")
end


Matematické operátory

+součet
-odečet
*násobení
/dělení
%zbytek jedné proměnné po dělení jinou
-- deklarace proměnných
local a = 2
local b = 3
local c = 5

-- matemarické výpočty
local result1 = a + b + c -- sčítání
local result2 = b / a -- dělení
local result3 = b * c -- násobení
local result4 = c % a -- zbytek po dělení

-- Zobraz: "a + b + c = 10"
fibaro:debug('a + b + c = ' .. result1)

-- Zobraz: "b / a = 1,5"
fibaro:debug('b / a = ' .. result2)

-- Zobraz: "b * c = 15"
fibaro:debug('b * c= ' .. result3)

-- Zobraz: "c % a = 3"
fibaro:debug('c % a = ' .. result4)


Logické operátory

andmusí platit sloučasně
ormusí platit alespoň jedna z podmínek
notnegace
-- deklarace proměnných
local a = 2
local b = 3
local c = 5

-- Zobraz "true"
if (a == 2 and b == 3) then -- Pokud je a rovno 2 a současně b rovno 3, tak ....
    fibaro:debug('true') -- ... zobraz true ...
else -- ... jinak ...
    fibaro:debug('false') -- ... zobraz false.
end -- konec podmíněného příkazu

-- Zobraz "true" (protože c je rovno 5)
if (a ==5 or b == 5 or c == 5) then -- Pokud je a rovno 5 nebo b rovno 5 nebo c rovno 5, tak ....
    fibaro:debug('true') -- ... zobraz true ...
else -- ... jinak ...
    fibaro:debug('false') -- ... zobraz false.
end -- konec podmíněného příkazu

-- Zobrazí "false" protože c je rovno 5 a v tomto případě zjišťujeme zda není rovno 5.
if ( not (a ==5 or b == 5 or c == 5))then -- Pokud není a rovno 5 nebo b rovno 5 nebo c rovno 5, tak ....
    fibaro:debug('true') -- ... zobraz true ...
else -- ... jinak ...
    fibaro:debug('false') -- ... zobraz false.
end -- konec podmíněného příkazu


Typy proměnných

Zpět k proměnným. Lua na rozdíl od například C / C++ neomezuje možný typ proměnné. Tento se může dynamicky změnit dle hodnot přiřazených v této proměnné. Viz příklad výše.

local promenna2 = "aaa" -- jde o proměnnou typu string (textový řetězec)
local promenna3 = 17 -- jde o proměnnou typu number (číslo)

Typ stringVariable vytvoří proměnnou typu textový řetězec a numberVariable vytvoří proměnnou typu číslo.


String Lua automaticky převede, pokud je to možné, do správného typu. Z toho plyne že pokud dáte proměnné stringVariable funkci textovou, a ne očekávanou číselnou, tak dojde k automatickému převodu.

Nicméně problémy mohou nastat, pokud porovnáváte proměnné číselného typu s typem řetězec. V podobných případech se doporučuje převod řetězce na číslo použitím funkce tonumber, viz. příklad:

-- Není validní a vypíše chybu z důvodu porovnání dvou různých proměnných (textový řetězec s číslem)
if (stringVariable > numberVariable) then
    fibaro:debug('stringVariable je větší!')
end

-- textový řetězec musí být převeden na číslo, aby bylo možné textový řetězec porovnat s číslem
local stringVariableConverted = tonumber(stringVariable) -- převod řetězce na číslo
local numberVariableConverted = tostring(numberVariable) -- převod čísla na řetězec

-- nyní lze porovnávat proměnné
if (stringVariableConverted > numberVariable) then
    fibaro:debug('stringVariable is greater!')
end

-- Alternativně nemusíme používat proměnnou
if (tonumber(stringVariable) > numberVariable) then
    fibaro:debug('stringVariable is greater!')
end

Užitečné funkce v Home Center 2

fibaro:abort()

  • přeruší script, který právě probíhá
  • bez argumentů
  • Nemá návratové hodnoty
  • příklad:
local a = 0

-- Nekonečná smyčka
while true do

    -- Pokud a je větší než 10 ukonči skript
    if (a > 10) then
        fibaro:abort()
    end

    -- přičti 1 k proměnné a
    a = a + 1

    -- Počkej 1 sekundu (1000 milisekund)
    fibaro:sleep(1000)
end

fibaro:CalculateDistance(position1,position2)

  • spočítá vzdálenost mezi dvěma geografickými body
  • vrácená vzdálenost je v metrech
  • position1 je první a position2 druhý bod
  • bod se udává v zeměpisné šířce a délce. Hodnoty jsouuváděny ve stupních (°) a desítkové soustavě oddělené středníkem (;). Záporné hodnoty jsou uváděny jako sever a západ.
  • Příkladu bodu: 40°44'55"N -73°59'11W by měl být vložen jako "40.7468;-73.986".
  • příklad:
-- Získání lokace uživatele s ID 123
local userLocation = fibaro:getValue(123, 'Location')
local testLocation ="52.43259514701;16.8450629997253"

local result

-- vypočítej vydálenost mezi uživatelem a testovací lokací
result = fibaro:calculateDistance(userLocation, testLocation)
fibaro:debug('Vydálenost je ' .. result ..'m. ')

fibaro:call()

  • pošle požadavek zařízení aby provedlo žádanou akci
  • fibaro:call(deviceID, actionName, ...)
    • deviceID: jde o ID zařízení
    • actionName: řetězec obsahující název akce jenž se má stát
    • v některých případech bude akce vyžadovat více argumentů aby se mohla správně udát. Maximální počet argumentů je 7 na jedno deviceID a ActionName
  • příklad:
fibaro:call(12, 'turnOff') -- Vypni zařízení s id 12

fibaro:call(12, 'setValue', 23) -- Nastavit na zařízení hodnotu 23 -> používá se u stmívačů, žaluzií, ...
  • automatický převod, je nutné poznamenat že jsou všechny argumenty převáděny do řetězců. Nicméně není nutné tyto argumenty převádět do číselných typů, vzhledem k automatickým opravám se to provede sama řídící jednotka.
local a = 50

fibaro:call(12, 'setValue', a) -- Nastav na zařízení hodnotu uloženou v proměnné a

fibaro:countScenes()

  • zjistí počet spuštěných instancí aktuální scény
  • Fibaro:countScenes()
    • Fibaro:countScenes(SceneID)
    • SceneID: číslo (nepovinné) scény, jejíž instance se mají počítat
  • vrací pozitivní celek obsahující počet současně aktivních scén  
    • pokud je upřesněno SceneID tak bude spočítán a ukázán počet právě běžících scén s daným ID, pokud určeno není tak se použije sceneID aktuální scény.
  • Příklady:
-- Zobrazení počtu instance této scény
local num = fibaro:countScenes()

if (num == 1) then
    fibaro:debug('Běžím pouye jednou.')
else
    fibaro:debug('Běžím ' .. num ..'-krát. ' )
end

-- Pouze povol jednu instanci scény
if (fibaro:countScenes() > 1) then
    fibaro:abort()
end

-- Zobrazí počet instancí scény 12
local num = fibaro:countScenes(12)

fibaro:debug('Number instancí scény 12: ' .. num);

-- Kontrola zda scéna 12 běží
if (fibaro:countScenes(12) >= 1) then
    fibaro:Debug('Scéna s ID 12 běží');
else
    fibaro:debug('Scéna s ID 12 neběží');
end

fibaro:debug()

  • výstup je řetězec do debug konsole jenž je s příkazem asociována
  • fibaro:debu(text)
    • text: to co se má zobrazit v konzoli (hodnota proměnné, číslo, řetězec, ...)
  • nevrací žádné hodnoty
  • příklad:
-- Zobrazí se 'Hello world!' v konzoli
fibaro:debug('Hello world!')

fibaro:get()

  • zjistí stav a vlastnosti zařízení. Konkrétně hodnotu a poslední změnu
  • je součástí skupiny příkazů (fibaro:get + Value / ModificationTime)
  • Fibaro:get(DeviceID, PeopertyName)
    • DeviceID: ID zařízení
    • PropertyName: vlastnost jejíž hednotu zjišťujeme (například jas dle příkladu níže)
  • tato funkce může vracet dvě hodnoty:
    • řetězec obsahjící současnou hodnotu objěktu
    • nebo
    • údaj o tom kdy se objekt naposledy změnil
  • příklad:
-- Získání hodnoty a posladního času modifikace hodnoty jasu (brightness) ze zařízení 11
local value, modificationTime = fibaro:get(11, 'brightness)

-- v lue může být vynechána druhá návratová hodnota
-- v tomto případě také funguje
local value2=fibaro:get(11, 'brightness')

-- Získané hodnoty mohou být použity pro různé věci ve scénách
-- Například vypni zařízení, pokud je jas nad 50
if (tonumber(value) > 50) then
    fibaro:call(142, 'turnOff')
end

fibaro:getGlobal()

  • zjišťuje hodnotu a čas poslední změny registrované v panelu proměnných
  • součást skupiny příkazů (fakro:get + Global / GlobalValue / GlobalModificationTime)
  • fibaro:getGlobal(varName)
    • varName: jméno globální proměnné
  • tato funkce vrací dvě hodnoty:
    • řetězec obsahující současnou hodnotu globální proměnné nebo časový údaj o poslední změně
    • upozornění: tyto hodnoty jsou druhu řetězcovitého, pokud jej budete chtít porovnat s typem číselným budete muset nejdříve použít příkaz "tonumber" k jejich převedení na číselný
  • příklad:
-- Získej hodnotu globální proměnné 'isNight'
-- Při použití funkce fibaro:getGlobal lze získat veškeá data o proměnné
local value, modificationTime = fibaro:getGlobal('isNight')

-- hodnota předdefinované globální proměnné je vždy řetězcem
-- na základě hodnoty lze vytvořit příkazy, které se mají stát, pokud je daná hodnota aktivní.
if (value == '1') then
    fibaro:debug('Je noc!')
end

fibaro:getGlobalValue()

  • zjisí hodnotu globální proměnné registrované v panelu proměnných
  • součástí skupiny příkazů (fibaro:getGlobal + Value / ModificationTime)
  • fibaro:getValue(varName)

varName: jméno proměnné

  • vrací: řetězec obsahující současný stav proměnné

upozornění: tyto hodnoty jsou druhu řetězcovitého, pokud jej budete chtít porovnat s typem číselným budete muset nejdříve použít příkaz "tonumber" k jejich převedení na číselný

  • příklad:
-- Získání pouze hodnoty isNight
local value = fibaro:getGlobalValue('isNight')

-- hodnota předdefinované globální proměnné je vždy řetězcem-- na základě hodnoty lze vytvořit příkazy, které se mají stát, pokud je daná hodnota aktivní.
if (value == '1') then    
    fibaro:debug('Je noc!') 
end

fibaro:getGlobalModificationTime()

  • zjisí hodnotu globální proměnné registrované v panelu proměnných
  • součástí skupiny příkazů (fibaro:getGlobal + Value / ModificationTime)
  • fibaro:getValue(varName)
varName: Jméno globální proměnné
  • vrací oznámení o poslední změně globální proměnné
upozornění: tyto hodnoty jsou druhu řetězcovitého, pokud jej budete chtít porovnat s typem číselným budete muset nejdříve použít příkaz "tonumber" k jejich převedení na číselný
  • příklad:
-- Zjistit čas, kdy byla proměnná modifikována
local lastModified = fibaro:getGlobalModificationTime('counter')

-- pokud to bylo alespoň 10 sekund od poslední modifikace proměnné
if ((os.time() - lastModified) > 10) then
    fibaro:debug('Je to více jak 10 sekund.')
else
    fibaro:debug('Je to méně jak 10 sekund')
end

fibaro:getModificationTime()

  • zjistí stav zařízení, konkrétně čas poslední změny
  • součástí skupiny příkazů (fibaro:get + Value / ModificationTime)
  • fibaro:geModificationTime(deviceID, propertyName)
deviceID: název zařízení jehož identita se zjišťujePropertyName: název vlastností jenž se zjišťují
  • vrací informaci o tom kdy byla vlastnost naposledy změněna
upozornění: tyto hodnoty jsou druhu řetězcovitého, pokud jej budete chtít porovnat s typem číselným budete muset nejdříve použít příkaz "tonumber" k jejich převedení na číselný
  • například:
-- Zjistit čas, kdy byl změněn stav zařízení
local lastModified = fibaro:getGlobalModificationTime(11, 'value')

-- pokud to bylo alespoň 10 sekund od poslední modifikace proměnné
if ((os.time() - lastModified) > 10) then
fibaro:debug('Je to více jak 10 sekund.')
else
fibaro:debug('Je to méně jak 10 sekund')
end

fibaro:getName()

  • fibaro:getName(deviceID)
deviceID: identifikační číslo zařízení
  • vrací hodnoty zařízení jakožto řetezec
  • například: 
local deviceID = 58

-- Zjisti a zobraz název zařízení v konzoli
fibaro:debug(fibaro:getName(deviceID))

fibaro:getRoomID()

  • zjistí číslo(ne nezbutně to co je na dveřích ale to jímž si tento pokoj Fibaro označilo) pokoje kde se zařízení nachází
  • fibaro:getRoomID(deviceID)
deviceID: identifikace zařízení
  • vrací hodnoty:číslo kteé reprezentuje pokoj jenž obsahuje zařízení (hodnota 'unassigned' - nepřiřazeno, se zobrazí pokud není prvek v žádném z pokojů
  • příklad:
-- Získaná ID místnosti, ve které je umístěno zařízení s ID 15
local room = fibaro:getRoomID(15)

if (room == 0) then
    fibaro:debug('Zařízení naleznete v místnost \' Nepřiřazeno\'.')
else
    fibaro:debug('Zařízení naleznete v místnosti s ID' .. room .. '.')
end

fibaro:getRoomName()

  • zjistí název pokoje při poskytnutí označení
  • fibaro:getRoomName(roomID)
roomID: identifikační číslo pokoje

    • vrací jméno pokoje jakožto řetězec
  • příklad:
-- Získá a zobrazí název místnosti s ID 8
fibaro:debug(fibaro:getRoomName(8))

local deviceID = 58
-- Názevmístnosti obsahující zařízení s ID 58
fibaro:debug(fibaro:getName(deviceID))
-- Název místnosti obsahující zařízení s ID 58
fibaro:debug(fibaro:getRoomName(fibaro:getRoomID(deviceID)))
-- Jiný způsob získání názvu místnosti obsahující zařízení s ID 58
fibaro:debug(fibaro:getRoomNameByDeviceID(deviceID))

fibaro:getRoomNamebyDeviceID()

  • zjistí název pokoje v nemž je dané zařízení při poskytnutí ID zařízení
  • fibaro:getRoomName(deviceID)
deviceID: ozančení zařízení

    • vrací jméno pokoje jakožto řetězec
  • příklad:
-- Příkaz na získání názvu místnosti obsahující zařízení s ID 58
fibaro:debug(fibaro:getRoomNameByDeviceID(deviceID))

fibaro:getSectionID()

  • zjistí číslo sekce v níž se zařízení nachází
  • fibaro:getSectionID(deviceID)
deviceID: identifikační číslo zařízení
  • vrací číslo reprezentující sekci jenž obsahuje zařízení (v případě nepřiřazené vrací 'unassigned' hodnotu 0
  • příklad: 
-- Získání číslo sekce (skupina místností, patro, ...), která obsahuje zařízení s id 10
local section = fibaro:getSectionID(10)

if (section == 0) then
    fibaro:debug('Toto zařízení není přidáno do žádné sekce.')
else
    fibaro:debug('Toto zařízení je přidání do sekce s ID ' .. section .. '.')
end

fibaro:getSelfID()

  • vrací číslo virtuálního zařízení jenž tento příkaz vyslalo
perspektiva: tato funkce je definována pouze jako introspectiva virtuálního zařízení. nebude fungovat ve scéně.
  • tato funkce nepřijmá argumenty
  • vrací číslo obsahující identifikační číslo virtuálního zařízení jenž jej odeslalo
  • například:


-- Získání ID tohoto virtuálního zařízení
local thisDevice = fibaro:getSelfId()

-- Použitím můžeme získat IP adresu a TCP port ze základního nastavení virtuálního zařízení.
local ip = fibaro:getValue(thisDevice, 'IPAdrress')
local port = fibaro:getValue(thisDevice, 'TCPPort')

-- Připoj se k zařízení a něco mu pošli.
tcpSocket = Net.FTcpSocket (ip, port)
bytes, errorCode = tcpSocket:write("Hello device!")

fibaro:getSourceTrigger()

  • zjišťuje informace ohledně spouštěče jenž aktivoval momentálně běžící scénu
  • tato funkce nepovoluje žádné argumenty
  • vrací hodnoty: spektrum informací ohledně spouštěče aktivní scény.
spektrum musí vždy obsahovat pole ozančené jako typ, které bude dle druhu spouštěče zobrazovatnásledující hodnoty:vlastnosti - pro spouštěče jenžmění vlastnosti zařízeníglobal - pro ty spouštěče jenž mění glbální proměnouostatní - ve všch ostatních případech (například: přímé spuštění scény z rozhraní HC2, spouštění jinou scénou)dle hodnoty typu může mít tabulka pole dodatečná pole
vlastnostiglobalostatní
  • deviceID
čislo zařízení jenž scénu spustilo
  • propertyName
jméno vlastnosti zařízení jenž spustila scénu

  • jméno
jméno proměnné jenž scénu spustila
  • žádná dodatečná pole


  • příklad: tato funkce je použitelná ke zjištění který ze spouštěčů byl přímým důvodem spuštění scény. v následujícím příkladu jsou tyto spouštěče všechny nastaveny tak že kterýkoliv z nich mohl být důvodem
    • změna hodnoty v objektu zařízení 13
    • změna hodnoty v objektu zařízení 15
    • změna globální proměnné 'uzJeVenkuTma'
dále může být scéna spuštěna přímo z jakéhkoliv rozhraní nebo kteroukoliv jinou scénou (fibaro:startScene(sceneID)při spuštění scény se informace o důvodu spuštění zobrazí v debug konsoli
--[[
%% properties
13 value
15 value
%% globals
isItDarkOutside
--]]

local trigger = fibaro:getSourceTrigger()

if (trigger['type'] == 'property') then
    fibaro:debug('Scénu spustilo zařízení ' .. trigger['deviceID'])
elseif (trigger['type'] == 'global') then
    fibaro:debug('Scénu spustila proměnná ' .. trigger['name'])
elseif (trigger['type'] == 'other'
    fibaro:debug('Scénu spustilo něco jiného.')
end

fibaro:getSourceTriggerType()

  • zjistí informace o druhu spouštěče momentálně aktivní scény
  • tato funkce nepřijmá žádné argumenty
  • vrací řetězec obsahující typ spouštěče jenž je zodpovědný za spuštění aktivní scény. tato funkce vrací stejná data jako tabulka typ po zadání příkazu fibaro:getSourceTriger()
  • příklad
-- Zkontroluj, zda scéna byla spuštěna manuálně.
if (fibaro:getSourceTriggerType() == 'other' then
    fibaro:debug('Scéna spuštěna manuálně.')
end

-- To samé lze dosáhnout stažením kompletní tabulky použitím fibaro:getSourceTrigger() a dotazem na pole 'type'
local source = fibaro:getSourceTrigger()

if (source['type'] == 'other') then
    fibaro:debug('Scéna spuštěna manuálně.')
end

fibaro:getType()

  • zjistí typ zařízení
  • fibaro:getType(deviceID)
deviceID: identifikační číslo zařízení
  • vrací řetězec s typem zxařízení
  • příklad
-- Získání typu zařízení s ID 100
local theType = fibaro:getType(100)

-- Pokud je zařízení rovno žaluzie
if (theType == 'blind') then
    fibaro:debug('Zařízení je žaluzie.')
else
    fibaro:debug('Typ zařízení: ' .. type)
end

fibaro:getValue()

  • zjistí stav vlastnosi zařízení. konkrétně hodnotu
  • je součástí skupiny příkazů (fibaro:get + Value / ModificationTime)
  • fibaro:getValue (deviceID, propertyName)

DeviceID: bude zjištěna identifikace zařízení

PropertyName: jméno objěktu bude zjištěno

  • řetězec obsahující současnou hodnotu objektu
upozornění: tyto hodnoty jsou druhu řetězcovitého, pokud jej budete chtít porovnat s typem číselným budete muset nejdříve použít příkaz "tonumber" k jejich převedení na číselný
  • příklad 
-- Získání hodnoty parametru jas (brightness) ze zařízení 11
local value = fibaro:getValue(11, 'brightness')

-- Získaná hodnota může být použita dalším účelům
-- Například k vypnutí zařízení, pokud je jas nad 50%
if (tonumber(value) > 50) then
    fibaro:call(142, 'turnOff')
end

fibaro:isSceneEnabled()

  • zkusí jestli je scéna povolena, po zadání správného čísla scény
  • fibaro:isSceneEnabled(sceneID)
sceneID: identifikační číslo scény jenž se má ověřit
  • vrací logickou hodnotu: v případě kladné odpovědi je scéna aktivní nepravdivá scénu deaktivuje
  • příklad: 
-- Pokud scéna 3 je aktivní, aktivuj scénu 5
if (fibaro:isSceneEnabled(3)) then
    fibaro:setSceneEnabled(5, true)
end

fibaro:killScenes()

  • vypne všechny úrovně běžící scény 
  • nevrací žádné hodnoty
  • příklad:
Pokud hodnota proměnné a je mezi 1 a 5, tak ukonči scénu s id 2
if (a >= 1 and <=5) then
    fibaro:killScoenes(2)
end

fibaro:log()
 

  • dočasně zobrazí správu v logovacím řádku (je umístěn na spodní části při zobrazení virtuálnho zařízení a není vidět z mobilních zařízení) 
  • fibaro:lo(message 
message: řetězec bude dočasně zobrazen v daném místě
  • Nevrací žádné hodnoty
  • příklad: 
-- Zobraz zprávu v prostoru virtuálního zařízení pro log.
fibaro:log('Zařízení aktivní')

fibaro:setGlobal()

  • mění hodnotu globální proměnné 
  • fibaro:setGlobal(varName, value) 
varName: jméno globální proměnnévalue: nová hodnota proměnné
  • žádná data nevrací
  • příklad:
-- přiřaď hodnotu 1 globální proměnné index
fibaro:setGlobal('index', 1)

-- Zvyš hodnotu globální proměnné 'test' o 3
fibaro:setGlobal('test', tonumber(fibaro:getGlobalValue('test')) + 3)

-- přiřaď hodnotu lokální proměnné a globální proměnné index
local a = 10 *234
fibaro:setGlobal('index', a)

fibaro:setSceneEnabled() 

  • spouští a vypíná scénu 
  • fibaro:setSceneEnabled(sceneID, enabled) 
sceneID: identifikační číslo scény jenž chcete aktivoavt či vypnoutenabled: logická hodnota kde v případě pravdivosti se scéna spustí a nepravdivosti se vypne
  • Nevrací žádné hodnoty
  • příklad:
-- Pokud je hodnota proměnné a jiná než 0, deaktivuj scénu 3
if (a >0) then
    fibaro:setSceneEnabled(3, false)
else
-- jinak scénu aktivuj (jiné od spusť)
    fibaro:setSceneEnabled(3, true)
end

fibaro:sleep()

  • pozastaví scénu na určenou dobu (v milivteřinách) 
  • fibaro:sleep(čas) 
cas: určuje dobu po níž bude tento stav trvat v milivteřinách
  • nevračí žádné hodnoty
  • příklad:
-- Zastav scénu na 10 sekund
fibaro:sleep(10000)

fibaro:startScene()

  • spustí jednu scénu 
  • fibaro:startScene(sceneID) 
sceneID: identifikuje scénu podle čísla
  • nevrací žádné hodnoty
  • příklad:


-- Pokud je hodnota a větší než 20, tak spusť scénu s ID 10
if (a > 20) then
    fibaro:startScene(10)
end

json.decode ()

  • převede JSON řetěz do LUA tabulky 
perspektiva: tato funkce je pouze definována pro virtuální zařízení a ve scéně nebude fungovat.
  • json.deconde(json_string)
json_string je řeězec JSON jenž se má dekódovat
  • tabulka: dekódovaný JSON řetězec je reprezentován v Lue jako tabulka
  • příklad:
jsonTable = {value1 = 512, value2 = json.null}
jsonString = json.encode(jsonTable)

-- po zapouzdření proměnná jsonString obsahuje řetězec '{"value2": null, "value1": 512}'
json:debug(jsonString)

-- null bude dekódováno na json.null
jsonTable = json.decode(jsonString)
if(jsonTable.value2 == json.null) then
    fibaro:debug('Null už funguje.')
end

json.encode ()

  • převede Lua tabulku do sériového JSON řetězce 
perspektiva: tato funkce je nastavena pouze pro virtuální zařízení a ve scéně fungovat nebude
  • json.encode(lua_table)
lua_table:tabulka lua z níž bude sériově převeden obsah do JSON řeetězce
  • vrací hodnoty v JSON řetězci jenž je sériovou reprezentací Lua tabulky
  • příklad:


jsonTable = {value1 = 512, value2 = json.null}
jsonString = json.encode(jsonTable)

-- po zapouzdření proměnná jsonString obsahuje řetězec '{"value2": null, "value1": 512}'
json:debug(jsonString)

-- null bude dekódováno na json.null
jsonTable = json.decode(jsonString)
if(jsonTable.value2 == json.null) then
    fibaro:debug('Null už funguje.')
end

json.null()

  • unikátní hodnota jenž bude zakódována jakožto null přes json.enconde() 
perspektiva: tato konstanta je definována z perspektivy virtuálního zařízenínebude fungovat ve scéně
  • příklad:
jsonTable = {value1 = 512, value2 = json.null}
jsonString = json.encode(jsonTable)

-- po zapouzdření proměnná jsonString obsahuje řetězec '{"value2": null, "value1": 512}'
json:debug(jsonString)

-- null bude dekódováno na json.null
jsonTable = json.decode(jsonString)
if(jsonTable.value2 == json.null) then
    fibaro:debug('Null už funguje.')
end

os.time()

  • zjistí aktuální čas, pokud se spustí bez dodatečných parametrů, nebo čas definovaný tabulkou 
  • os.time ([ table ])
table (volitelný parameter) tato tabulka musí mít speciální pole pro rok (4 symboly), měsíc (1-12), den (1-31) a pro čas (0-23, tovární je 12), minuty (0-60) a sekundy (0-61, tovární je 0) a isdst (letní čas, logická hodnota, tovární je nil)
  • vrací časové hodnoty (buďto aktuální nebo definované tabulkou) v sekundách od EPOCHY
  • příklad:
-- uložení času do rpoměnné t1
t1 = os.time() 
-- uspání na 5 sekund
fibaro:sleep(5000)

-- uložení nového času do t2
t2 = os.time()

-- získání rozdílu v sekundách
local difference = tonumber(t2) - tonumber(t1)

-- zobrazení časového rozdílu mezi oběma uložením do proměěných
fibaro:debug(difference)

tostring()

  • převede parametr (například číslo) na řetězec 
  • tostring(parametr)
jakýkoli parametr kteréhokoli typu, který se má převést na řetězec
  • vrací textovou reprezentaci (řetězec, string) zadaného parametru

příklad:

-- ulož číslo 32 do proměnné myAge
local myAge = 32

-- konverze čísla na řetězec
local myString = tostring(myAge)

fibaro:debug("Jste " .. myString .. " let starý.")

tonumber()

  • pokusí se převést prezentovanou podmínku (například řetězec) na číslo
  • tonumber(argument)
argument: podmínka jakéhokoliv typu jenž má být převeden do čísélné podoby
  • vrací číslo odpovídající obsahem zadané podmínce
  • příklad: 
-- ulož řetězec '123' do proměnné myString
local myString = '123'

-- Toto ukáže chybu jelikož Lua neumí porovnat řetězec s číslem bez převodu na stejný typ (řetězec nebo číslo)
if (myString > 100) then
end

-- Po převodu na číslo to začne fungovat
if (tonumber(myString) > 100) then
    fibaro:debug("Tohle funguje - 123 je větší jak 100!")

Zdroje