Ú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>
local promenna1
local promenna2 = "aaa" -- jde o proměnnou typu string (textový řetězec)
local promenna3 = 17 -- jde o proměnnou typu number (číslo)
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
and | musí platit sloučasně |
or | musí platit alespoň jedna z podmínek |
not | negace |
-- 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".
- POZNÁMKA: Pro převod lze použít webovou stránku https://www.latlong.net/degrees-minutes-seconds-to-decimal-degrees.
- 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
vlastnosti global ostatní čislo zařízení jenž scénu spustilo
- deviceID
jméno vlastnosti zařízení jenž spustila scénu
- propertyName
jméno proměnné jenž scénu spustila
- jméno
- žá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!")