# Edge-appar

# Summary

En Edge-app är en liten LUA (opens new window) applikation som kan tryckas ut på en gateway kopplad till en installation. Tillsammans med konfigurations-data för appen startas den upp och kan då köras lokalt. Appar kan ha en mängd olika inställningar och kan dynamisk ladda in data och vissa värden från IoT Open injiceras direkt i LUA-miljön som appen körs i. Apparna hanteras via plattformens API och gränssnitt.

# Arkitektur (API:er)

Ett antal API:et finns tillgängliga för att hantera och konfigurera tillgängliga appar. En publicerad app skall ses som en fristående mjukvara som kan laddas ner och köras på en gateway eller annan ansluten enhet.

# Livscykel

En ny app skapas med en del basinformation som namn, beskrivning mm. Denna data är tänkt att användas för en användare och visas upp i användarens gränssnitt.

En skapad app behöver inte innehålla varken exekverbar kod eller konfiguration. Det är då endast en listning av appens basinformation. En publicerad app kan aldrig tas bort. Däremot kan den döljas genom publikflaggan (public). En app som inte är publik syns endast i den organisation som äger appen. Det går inte att ta bort appar som är publicerade eftersom dessa kan köras på en installation som utgivaren inte kan se. Om appen skulle tas bort skulle användarens gateway inte längre kunna hämta appen och det skulle kunna resultera i oönskat beteende hos användaren.

När listningen har skapats går det att skapa versioner av appen. En version representeras av en hash och innehåller exekverbar kod (app.lua) samt en konfigurationsbeskrivning (app.json).

# Konfiguration

En publicerad app kan konfigureras att köra en eller flera gånger på samma gateway som olika instanser och med olika konfiguration. Detta betyder att appen kör med samma exekverbara kod men med olika konfiguration. Konfigurationen som skickas till API:et innehåller installationens ID, appens ID, app-version och användarparametrar. Versionen kan vara antingen en namngiven version eller en hash. Att använda sig av en hash kan vara bra när man testar nya releaser av koden då dessa versioner normalt sätt inte syns i listningen utan behöver hämtas med en speciell parameter.

Användarens parametrar bestäms vanligtvis av konfigurationen i filen app.json som laddas upp i samband med att man skapar en ny version av appen. Denna fil definierar alla parametrar som krävs för att appen skall kunna köras korrekt.

# Arkitektur (gateway)

Alla program på gatewayen körs inuti IoT Open Runtime (iotopen-rt). Runtimen hanterar autentisering mot API:et och på MQTT. Mjukvaran som hanterar edge-appar heter edged,

Edged programvaran består av flera lager. Själva huvudprogrammet som körs i bakgrunden hanterar nedladdning av användarkonfiguration, uppdatera apparnas version samt notifierar körande appar om förändringar. Varje app startas inuti ett abstraktionslager med en socketanslutning till huvudmjukvaran. På så sätt kan huvudmjukvaran göra RPC kommandon till körande appar. Huvudmjukvaran är även ansvatig för att ladda ner den exekverbara LUA-koden för varje app som skall köras på gatewayen.

fig1

# RPC Kommandon

Följande funktioner i LUA-koden kommer köras i app-runtimen om dessa är definierade.

Metod Beskrivning När
onFunctionsUpdated Normalt sätt används denna för att registrera nya funktioner som appen skall ta hänsyn till eller om funktioner tas bort. Om en function är tillagd/ändrad/borttagen (se MQTT Event).
onStart Används för att sätta appens initiala parametrar och nuvarande tillstånd. Varje gång appen startar.
onCreate Används om appen behöver skapa något när den startas för första gången, hämta mer information eller skapa funktioner. Första starten av appen, före onStart.
onDestroy Används för att städa upp när app-instansen plockas bort. Appen plockas bort
onExit Appen kommer stängas av, används för att spara nuvarande tillstånd. När appen stängs ner.

# Tillgängliga paket i LUA

De mesta av LUA:s standard paket är inbyggda i iotopen-rt. Följande tilläggspaket finns också för att få mer funktionalitet.

Paketnamn Beskrivning Link
lynx Funktioner för API-anrop mot plattformen. More
timer Tidsbaserade hjälpfunktioner. More
json JSON Hantering. More
mq MQTT hjälpfunktioner More
log Hjälpfunktioner för loggning More
edge Hjälpfunktioner för Edge mjukvara More
cfg Alla användarparametrar som sattes av användaren.
functions En uppdaterad lista på alla tillgängliga funktioner på den här installationen.
app Information om den appen som körs.