Lua-sheriffen, del 9- Fibaro Home Center 2: biblioteket

Oh, happy day! 😀

Lua-sheriffen

Förra gången gick vi igenom hur man kan använda Lua på olika sätt i Fibaros Home Center 2. Idag ska vi titta vidare på det, genom att titta på Fibaros inbyggda kodbibliotek och vad man kan använda det till!

Olika förutsättningar

Virtuella enheter har tillgång till funktionalitet som inte går att använda i scener. Kanske onödigt begränsande, i vissa fall, men här är de funktionerna det gäller:

fibaro:getSelfId() – När denna funktion anropas i en virtuell enhet returnerar den enhetens ID. Detta kan vara bra eftersom det annars är lite bökigt att leta fram virtuella enheters IDn och detta behövs om man exempelvis vill uppdatera VD:ns komponenter i Lua-koden. Med denna behöver man inte tänka på det utan kan helt enkelt hämta ID:t vid behov. Denna funktion hade varit utmärkt att ha även i scener, men så är alltså inte fallet.

fibaro:log() – Fungerar ungefär som fibaro:debug() nedan men enbart i virtuella enheter. Skriver istället ut i den virtuella enhetens logg.

json.decode(), json.encode(), json.nullJSON är ett dataformat som är populärt på internet, och smidigt för oss eftersom det går att arbeta med i virtuella enheter på Home Center 2. Det går däremot inte att använda i scener. Varför? Därför. 🙂

Utöver dessa finns ett specialbibliotek, Net, vilket vi ska gå igenom kort nu.

Net.*

Net-biblioteket innehåller funktionalitet för att kommunicera över nätverk/internet. Har inte lyckats hitta någon komplett specifikation på detta ännu, men ett vanligt användningsområde är att hämta data från exempelvis ett REST API:

Därefter kan man göra beräkningar om man så vill. Till detta kan json-funktionerna nämnda ovan vara praktiska. Är det så att servern skickar svar i JSON-format kan man nämligen smidigt konvertera dessa till datatyper för att exempelvis presenteras i HC2ans interface.

Detta fungerar bara i virtuella enheter, det ska tydligen fungera i scener också men det verkar bökigare.

Nu, vidare till Fibaro-biblioteket!

fibaro:*

Detta är några av de anrop man kan använda både i scener och virtuella enheter. Jag går inte igenom alla här, för en komplett lista se Fibaros hemsida.

fibaro:abort() – Tar inga argument. Avbryter det nuvarande skriptet.

fibaro:call() – Tar minst två argument, och högst 9 beroende på vad som anropas. Funktionen ber en enhet att utföra en syssla, till exempel att slå av/på eller ändra ett värde. De två obligatoriska argumenten är deviceID och actionName.

fibaro:countScenes() – Tar inga, eller ett, argument. Returnerar ett heltal som motsvarar det antal instanser av den aktuella scenen som körs. Specificerar man ett heltal som motsvarar ett scen-ID returneras antal aktiva instanser av den scenen.

fibaro:debug() – Tar ett argument, en textsträng. Skriver ut textsträngen till HC2:ans debug-textfält.

fibaro:get() – Tar två argument, deviceID från vilken man vill hämta ett attribut, samt propertyName. Returnerar både värdet och när attributet senast ändrades. Observera att denna funktion har två syskonfunktioner, fibaro:getValue() och fibaro:getModificationTime(), vilka endast returnerar värdet respektive tidpunkt för senaste modifikation. Varför skulle man vilja använda dessa? Kanske främst för att göra koden så läslig som möjligt.

fibaro:getGlobal() – Tar ett argument, efterfrågad variabel. Annars samma som ovan, fast returnerar värde och tid för senaste modifikation för en global variabel. På samma sätt som get har denna syskonfunktionerna fibaro:getGlobalValue() och fibaro:getModificationTime().

fibaro:getName() – Tar ett argument, deviceID, och returnerar namnet på den enhet som specificerats.

fibaro:getSourceTrigger() – Tar inga argument. Returnerar en array med 1-3 värden. Det första värdet specificerar vilken typ av attribut som anropat/startat den aktuella scenen (property, global, other). Om det finns fler argument innehåller dessa detaljer om exempelvis enhet och/eller attribut som förändrats. Denna information kan vara bra för att exempelvis kunna göra olika saker i en scen beroende på vilken knapp som trycks ned.

fibaro:getType() – Tar ett argument, deviceID, och returnerar vilken typ av enhet det är.

fibaro:sleep() – Tar ett argument, millisekunder, och pausar skriptet så länge. fibaro:sleep(1000) pausar exempelvis i en sekund.

fibaro:startScene() – Tar som argument ett sceneID, och startar en instans av den scenen.

 

Det var en hyfsad genomgång av de paket som finns i Fibaros bibliotek. För den som vill se lite exempelscener har vi ett antal här på bloggen, och här finns ett Github-konto med några stycken.

Så vad har vi lärt oss idag?

  • Vad man använder för att nå nätverket genom Lua på HC2
  • Vilka relevanta funktioner som finns i Fibaros eget kodbibliotek
  • Att möjligheterna skiljer sig något mellan virtuella enheter och scener

Det var allt vi kommer att gå igenom på ämnet Lua på Home Center 2! Nästa gång kommer vi att gå igenom något annat, jag undrar vad? 😉

Kommentera