{
  "title": "config",
  "type": "object",
  "properties": {

    "gnssPrettyTrail": {
      "type": "boolean",
      "description": "Enable automatic location events in order to show pretty trails on the map (causes higher data consumption)"
    },
    "gnssMaxAccuracy": {
      "type": "integer",
      "description": "GNSS location accuracy limit (meters, 0 = Filter disabled, 10 = No more than 10m)",
      "enum": [0, 5, 10, 15, 20, 25, 30, 35, 40]
    },
    "locationLostTime": {
      "type": "integer",
      "description": "Maximum time without a location to trigger the 'unable to receive location' event. (minutes, 0 = event is disabled)",
      "minimum": 0,
      "maximum": 250
    },
    "fallbackLocation": {
      "type": "string",
      "description": "Fallback device location in the format of 'LAT LONG' with exactly 6 digit accuracy. for example '31.990553 34.756424'. To disable set to '0.000000 0.000000'"
    },
    "geoLocationRefreshTime": {
      "type": "integer",
      "description": "How often should we try to get a new location when not moving (minutes)",
      "enum": [0, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "gwPingInterval": {
      "type": "integer",
      "description": "How often to send a location to the server (seconds, 0 = disabled)",
      "enum": [0, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "extendedGeoLocation": {
      "type": "boolean",
      "description": "Transmit extended key/values in gwGeoLocation events"
    },
    "idleReportInterval": {
      "type": "integer",
      "description": "How often to connect to the server when neither pixels nor bridges are received (minutes, 0 = disabled)",
      "enum": [0, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "networkPolicy": {
      "type": "integer",
      "description": "0 = Try to reconnect whenever needed. 1 = Prevent frequent network re-connection",
      "enum": [0, 1]
    },
    "autoRebootNoServer": {
      "type": "integer",
      "description": "How long to wait before rebooting when unable to connect to the server (minutes, 0 = disabled)",
      "enum": [0, 15, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "autoRebootNoRx": {
      "type": "integer",
      "description": "How long to wait before rebooting when unable to receive any bridge (minutes, 0 = disabled)",
      "enum": [0, 15, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "autoReboot": {
      "type": "integer",
      "description": "Automatic reboot interval - unconditional (hours, 0 = disabled)",
      "enum": [0, 6, 12, 18, 24, 36, 48, 72, 120, 144, 168]
    },
    "periodicGatewayInfo": {
      "type": "integer",
      "description": "How often to send gateway info when connected to server (minutes, 0 = disabled)",
      "enum": [0, 15, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },
    "accessControlList": {
      "name": "Access Control List",
      "type": "object",
      "description": "Access Control List (ACL) enables Gateways to selectively listen to or ignore pre-defined Bridges. It helps regulate Bridge-to-Gateway communication and reduces unnecessary traffic and associated costs by managing which Bridges connect to the Cloud.",
      "properties": {
        "mode": {
          "type": "string",
          "enum": ["allow", "deny"],
          "default": "deny"
        },
        "bridgeIds": {
          "type": "array",
          "minItems": 0,
          "maxItems": 32
        }
      }
    },

    "clockUpdateInterval": {
      "type": "integer",
      "description": "Time interval in minutes between clock updates when GNSS is unavailable",
      "enum": [0, 15, 30, 60, 90, 120, 180, 300, 600, 720, 1440, 2880, 4320, 10080]
    },

    "bridgeDetection": {
      "type": "integer",
      "description": "How often to send visible bridges in the gwGeoLocation message (minutes, 0 = disabled)",
      "enum": [0, 5, 10, 15, 30, 60, 90, 120, 180, 300, 600, 720, 1440]
    },

    "workWithoutPowerMode": {
      "type": "string",
      "description": "Operating mode when main power is lost",
      "enum": ["turn_off","stay_on","low_power"]
    },
    "modemWhenLowPower": {
      "type": "boolean",
      "description": "Enable modem when working in low power mode"
    },

    "movAboveSpeed": {
      "type": "integer",
      "description": "Transmit PING event after moving at a speed higher than this (kph, 0 = disabled)",
      "minimum": 0,
      "maximum": 250
    },
    "movMinDuration": {
      "type": "integer",
      "description": "Transmit PING event after moving for at least this duration (seconds, 0 = disabled)",
      "minimum": 0,
      "maximum": 250
    },
    "movMinDistance": {
      "type": "integer",
      "description": "Minimum distance between movement PING events (meters)",
      "minimum": 0,
      "maximum": 20000
    },
    "movStoppedDuration": {
      "type": "integer",
      "description": "Allow another movemnt ping event after parking for at least this duration (minutes)",
      "minimum": 0,
      "maximum": 250
    },

    "movementDetection": {
      "type": "string",
      "description": "Detection method for movement detection",
      "enum": ["automatic","ignition_on","always_on"]
    },

    "wifiConfiguration": {
      "type": "boolean",
      "description": "Enable WiFi access-point for configuration on reboot and button press"
    }
  }
}
