Filen app.json

Användning

Filen app.json används i Edge-appar för att informera användarens gränssnitt om vilka parametrar som behöver sättas samt vilken typ av parameter det är. Filen informerar även gränssnittet om olika sidor som bör öppnas och vad varje sida skall innehålla. Förutsättningen för detta är att användaren i ett steg innan också har valt vilken installation som just denna instans ska köras på samt vad för namn som instansen skall ha. Det är upp till det specifika användargränssnittet att implementera de olika komponenterna beskrivna i detta dokument.

Fält (inputs)

De olika fälten som användaren kan fylla i definieras här med en kort beskrivning av vad man skall kunna välja på. Resultatet av konfigurationen fylls sedan i config delen i JSON requesten för att skapa instansen.

All fält har följande variabler:

NamnStandardBeskrivning
requiredfalseSätts till true om användaren måste fylla i fältet.
nameVilket namn som skall visas för användaren.
typeVilken typ av fält användaren ska fylla i, som beskrivet nedan.
descriptionHjälptext för att beskriva hur detta fält kommer användas i appen.

single_function_selector

Låt användaren välja en funktion i en lista av funktioner. Det går även att låta användaren välja ett värde för vald funktion, till exempel om appen styr en dimmer och den skall slås på till 50%. Vid val av värdet bör användargränssnittet hantera olika funktionstyper.

NamnStandardBeskrivning
filter{}Ett JSON-objekt med metadata nyckel-värde för att filtrera ut funktionerna som går att välja på.
valuefalseSätt till true om användaren förväntas fylla i ett värde.

Konfigurationsresultat

Med värden:

{
  "input-name": {
    "<function-id>": <value>
  }
}

Utan värden:

{
  "input-name": <function-id>
}

multi_function_selector

Samma som föregående men användaren kan välja flera funktioner.

NamnStandardBeskrivning
filter{}Ett JSON-objekt med metadata nyckel-värde för att filtrera ut funktionerna som går att välja på.
valuefalseSätt till true om användaren förväntas fylla i ett värde.

Konfigurationsresultat

Med värden:

{
  "input-name": {
    "<function-id-1>": <value>,
    "<function-id-2>": <value>
  }
}

Utan värden:

{
  "input-name": [
    <function-id-1>,
    <function-id-2>
  ]
}

single_device_selector and multi_device_selector

Samma som funktions-väljaren men med enheter i stället.

single_notification_output_selector

Gör att användaren kan välja på existerande notifikationsutskick på installationen. Det kan också finnas möjlighet för användaren att lämna den aktuella konfigurationen för att skapa ett nytt utskick i en separat flöde. Om detta är fallet bör användaren komma tillbaka till detta flöde (med alla inställningar kvar) och sedan kunna välja den nyss skapade notifikationen.

NamnStandardBeskrivning
allow_addtrueOm användaren tillåts lägga till nya utskick.

Konfigurationsresultat

{
  "input-name": <notification-output-id>
}

multi_notification_output_selector

Samma som oven, men användaren kan välja på flera utskick.

NamnStandardBeskrivning
allow_addtrueOm användaren tillåts lägga till nya utskick.

Konfigurationsresultat

{
  "input-name": [
    <notification-output-id-1>,
    <notification-output-id-2>
  ]
}

text

Låt användaren välja en text. Användaren kan tvingas mata in en text som uppfyller specifierad regex.

NamnStandardBeskrivning
defaultVilket värde som skall stå i fältet om det är tomt.
multilinefalseOm användaren kan kan mata in en eller flera rader text.
validatorValbart Regexp som fältet valideras med, tom betyder ingen validering.
on_errorValbart felmeddelande som visas om texten inte matchar valideringen ovan.

Konfigurationsresultat

{
  "input-name": "<value>"
}

number

NamnStandardBeskrivning
defaultVilket värde som skall stå i fältet om det är tomt.

Konfigurationsresultat

{
  "input-name": <value>
}

option

Låt användaren välja en av flera värden.

NamnStandardBeskrivning
defaultVilket värde som är valt från början.
values{ }En mappning mellan värde och namn på värdet som ett JSON-objekt.

Konfigurationsresultat

{
  "input-name": <value>
}

checkbox

Låt användaren välja en eller flera värden som checkboxar.

NamnStandardBeskrivning
defaultVilket värde som är valt från början.
values{ }En mappning mellan värde och namn på värdet som ett JSON-objekt.

Konfigurationsresultat

{
  "input-name": [
    <value-1>,
    <value-2>
  ]
}

toggle

Låt användaren välja mellan två värden som antingen eller.

NamnStandardBeskrivning
defaultfalseVilket värde som är valt från början.
false_valueVärdet som sätts om knappen är "av".
true_valueVärde som sätts om knappen är "på".

Konfigurationsresultat

{
  "input-name": <value>
}

repeat

Låt användaren välja samma variabel flera gånger vilket resulterar i en lista av objekt i konfigurationen.

NamnStandardBeskrivning
min0Minsta antal gånger som fältet skall repeteras.
maxobegränsadMax antal gånger som fältet skall repeteras.
input_fieldsNamn på de fält som skall repeteras.

Konfigurationsresultat

{
  "input-name": [
    {
      "input-name-1": <config-object>,
      "input-name-2": <config-object>
    },
    {
      "input-name-1": <config-object>,
      "input-name-2": <config-object>
    }
  ]
}

Guide

Guide-delen av filen beskriver olika sidor med inställningar som användaren måste gå igenom för att konfigurera appen. Varje sida består av en eller flera fält. Varje fält renderas enligt beskrivningen ovan. Sidorna renderas i samma ordning som denna array.

Varje sida kan ha en titel och en beskrivning för att förklara för användaren vilket område som fylls i här. Sidan innehåller också en lista med de fält som skall visas på just denna sida. Namnen på fälten motsvarar JSON-nyckeln i input_fields.

Exempel

Detta är en exempelkonfiguration med två functions-val och ett textfält.

{
  "author": "IoT Open",
  "licence": "MIT",
  "input": {
    "actuator_function": {
      "type": "single_function_selector",
      "name": "Controlled functions",
      "description": "This function that is turned to on when app is triggered."
    },
    "trigger_function": {
      "type": "single_function_selector",
      "name": "Trigger function",
      "description": "The door that will trigger the light to turn on.",
      "value": true
    },
    "timeout": {
      "type": "number",
      "name": "Light on time",
      "description": "The time that the control function will be on before turning off again in minutes.",
      "default": "10"
    },
    "trigger_value": {
      "type": "single_function_selector",
      "name": "Function",
      "description": "Select function",
      "value": true,
      "filter": {
        "type": "temperature"
      }
    },
    "temp": {
      "type": "repeat",
      "name": "Temperature triggers",
      "description": "Select a function and the value that should trigger the app to run.",
      "min": 2,
      "max": 4,
      "input_fields": [
        "trigger_value"
      ]
    },
    "notification": {
      "type": "single_notification_output_selector",
      "name": "Notification",
      "description": "Select how you should be notified if the app have to send an alarm."
    },
    "text_example": {
      "type": "text",
      "multiline": false,
      "default": "Example text",
      "validator": "[a-zA-Z]*",
      "on_error": "The text can only contain letters"
    }
  },
  "guide": [
    {
      "id": "stage_1",
      "title": "Function selection",
      "description": "Set the functions you want to use.",
      "input_fields": [
        "trigger_function",
        "actuator_function"
      ]
    },
    {
      "id": "stage_2",
      "title": "Timeout settings",
      "description": "",
      "input_fields": [
        "timeout",
        "temp",
        "notification",
        "example_text"
      ]
    }
  ]
}

Resultatet av beskrivningen ovan är en konfiguration som kan skickas till API:et och ser ut såhär:

{
  "app_id": 5,
  "installation_id": 12,
  "version": "1.0.0",
  "config": {
    "timeout": 10,
    "trigger_function": 123,
    "actuator_function": {
      "4456": 255
    },
    "temp": [
      {
        "trigger_value": {
          "9": 26
        }
      },
      {
        "trigger_value": {
          "9": 35
        }
      },
      {
        "trigger_value": {
          "12": 10
        }
      }
    ],
    "notification": 456,
    "example_text": "HelloWorld"
  },
  "name": "My app instance"
}