{
  "pluginAlias": "HttpSensorsAndSwitches",
  "pluginType": "platform",
  "headerDisplay": "Sensors, Switches, Lights",
  "footerDisplay": "Please use Unique ID's",
  "singular": true,
  "schema": {
    "type": "object",
    "properties": {     
      "name": {
        "title": "Name",
        "type": "string",
        "required": true
      },
      "description": {
        "title": "Description",
        "type": "string",
        "required": true
      }, 
      "devices": {
        "type": "array",
        "title": "Devices",
        "description": "",
        "items": {
          "type": "object",
          "properties": {
            "deviceType": {
              "type": "string",
              "title": "Device Type",
              "oneOf":
              [
                { "title": "Temperature & Humidity Sensor", "enum": ["Sensor"] },
                { "title": "Switch", "enum": ["Switch"] },
                { "title": "Outlet", "enum": ["Outlet"] },
                { "title": "Light Bulb", "enum": ["LightBulb"] },
                { "title": "Fan", "enum": ["Fan"] },
                { "title": "Motion Sensor", "enum": ["MotionSensor"] },
                { "title": "Contact Sensor", "enum": ["ContactSensor"] },
                { "title": "Light Sensor", "enum": ["LightSensor"] },
                { "title": "Air Quality", "enum": ["AirQualitySensor"] },
                { "title": "Carbon Dioxide", "enum": ["CarbonDioxideSensor"] },
                { "title": "Smoke Sensor", "enum": ["SmokeSensor"] },
                { "title": "Occupancy Sensor", "enum": ["OccupancySensor"] },
                { "title": "Garage Door", "enum": ["GarageDoorOpener"] },
                { "title": "Window", "enum": ["Window"] },
                { "title": "Window Covering", "enum": ["WindowCovering"] }
              ],
              "required": true,
              "default": "Switch",
              "placeholder": "Switch"
            },
            "enableLogging": {
              "title": "Enable Logging",
              "description": "Enable console Logging",
              "type": "boolean",
              "required": false,
              "default": true
            },
            "deviceID": {
              "title": "Device ID",
              "description": "Please input Unique ID for this device",
              "type": "string",
              "required": true
            },
              "deviceName": {
              "title": "Device name",
              "description": "Device name",
              "type": "string",
              "required": true
            },
            "deviceManufacturer": {
              "title": "Device Manufacturer",
              "description": "Device Manufacturer",
              "type": "string",
              "required": false
            },
              "deviceModel": {
              "title": "Device Model",
              "description": "Device Model",
              "type": "string",
              "required": false
            },
              "deviceSerialNumber": {
              "title": "Device Serial Number",
              "description": "Device Serial number or leave it blank and will be generated automaticaly",
              "type": "string",
              "required": false
            },
            "deviceFirmwareVersion": {
              "title": "Device Firmware version",
              "description": "Device Firmware version",
              "type": "string",
              "required": false
            },
            "urlON": {
              "title": "URL turn ON",
              "description": "URL to Turn On the Switch / Light",
              "type": "string",
              "required": false
            },
            "urlOFF": {
              "title": "URL turn OFF",
              "description": "URL to Turn OFF the Switch / Light",
              "type": "string",
              "required": false
            },
            "sharedPolling": {
              "title": "Shared Polling",
              "description": "Share url status between devices",
              "type": "boolean",
              "required": false
            },
            "sharedPollingId": {
              "title": "Share Polling group name",
              "description": "Share Polling group name",
              "type": "string",
              "required": false
            },
            "urlStatus": {
              "title": "URL Status",
              "description": "URL to retrieve JSON of Device status",
              "type": "string",
              "required": false
            },
            "stateName": {
              "title": "Parameter Name for On/Off",
              "description": "JSON Parameter Name for On/Off status",
              "type": "string",
              "required": false
            },
            "onStatusValue": {
              "title": "Parameter Value for status On",
              "description": "JSON return Value for status ON (true, 1, ON)",
              "type": "string",
              "required": false
            },
            "offStatusValue": {
              "title": "Parameter Value for status OFF",
              "description": "JSON return Value for status OFF (false, 0, OFF)",
              "type": "string",
              "required": false
            },
            "inUseStateName": {
              "title": "Parameter Name for: in USE",
              "description": "JSON Parameter Name for in Use status",
              "type": "string",
              "required": false
            },
            "inUseOnStatusValue": {
              "title": "Parameter value for In Use Status ON",
              "description": "JSON return Value for status In Use ON (true, 1)",
              "type": "string",
              "required": false
            },
            "inUseOffStatusValue": {
              "title": "Parameter value for In Use Status OFF",
              "description": "JSON return Value for status in use OFF (false, 0)",
              "type": "string",
              "required": false
            },
            "useRGB": {
              "title": "Use RGB Color",
              "description": "Use RGB instead of HSV",
              "type": "boolean",
              "required": false
            },
            "useBrightness255": {
              "title": "Use Brightness 0 - 255",
              "description": "Use Brightness 0 - 255 not 0 - 100",
              "type": "boolean",
              "required": false
            },
            "methodUpdate": {
              "title": "use GET method",
              "description": "Default is POST method",
              "type": "boolean",
              "required": false
            },
            "useColorTKelvin": {
              "title": "Color Temperature in Kelvin",
              "description": "Mired (153-500), Kelvin (2000-6500)",
              "type": "boolean",
              "required": false
            },
            "rgbParamName": {
              "title": "Parameter Name for RGB",
              "description": "JSON Parameter Name for RGB color",
              "type": "string",
              "required": false
            },
            "urlLightBulbControl": {
              "title": "HTTP address Light Bulb Control",
              "description": "HTTP address where to send Device control commands",
              "type": "string",
              "required": false
            },
            "brightnessParamName": {
              "title": "Parameter Name for Brightness",
              "description": "JSON Parameter Name for Brightness",
              "type": "string",
              "required": false
            },
            "saturationParamName": {
              "title": "Parameter Name for Saturation",
              "description": "JSON Parameter Name for Saturation",
              "type": "string",
              "required": false
            },
            "hueParamName": {
              "title": "Parameter Name for HUE",
              "description": "JSON Parameter Name for HUE",
              "type": "string",
              "required": false
            },
            "colorTemperatureParamName": {
              "title": "Parameter Name for Color Temperature",
              "description": "JSON Parameter Name for Color Temperature",
              "type": "string",
              "required": false
            },
            "urlDeviceControl": {
              "title": "HTTP address Device Control",
              "description": "HTTP address where to send Device control commands",
              "type": "string",
              "required": false
            },
            "urlFanControl": {
              "title": "HTTP address Fan Control",
              "description": "HTTP address where to send Device control commands",
              "type": "string",
              "required": false
            },
            "paramNameStatusActive": {
              "title": "Parameter Name for Active",
              "description": "JSON Parameter Name for Active (on/off)",
              "type": "string",
              "required": false
            },
            "paramNameTargetDoorState": {
              "title": "Parameter Name for Target Door State",
              "description": "JSON Parameter Name for TargetDoorState",
              "type": "string",
              "required": false
            },
            "paramNameCurrentDoorState": {
              "title": "Parameter Name for CurrentDoorState",
              "description": "JSON Parameter Name for Current Door State",
              "type": "string",
              "required": false
            },
            "paramNameObstructionDetected": {
              "title": "Parameter Name for Obstruction Detected",
              "description": "JSON Parameter Name for Obstruction Detected",
              "type": "string",
              "required": false
            },
            "paramNameStatusJammed": {
              "title": "Parameter Name for Device Jammed",
              "description": "JSON Parameter Name for Device Jammed",
              "type": "string",
              "required": false
            },
            "paramNameTargetPosition": {
              "title": "Parameter Name for Target Position",
              "description": "JSON Parameter Name for Target Position",
              "type": "string",
              "required": false
            },
            "paramNameCurrentPosition": {
              "title": "Parameter Name for Current Position",
              "description": "JSON Parameter Name for Current Position",
              "type": "string",
              "required": false
            },
            "paramNamePositionState": {
              "title": "Parameter Name for Position State",
              "description": "JSON Parameter Name for Position State",
              "type": "string",
              "required": false
            },
            "paramNameHoldPosition": {
              "title": "Parameter Name for Hold Position",
              "description": "JSON Parameter Name for Hold Position",
              "type": "string",
              "required": false
            },
            "paramNameRotationSpeed": {
              "title": "Parameter Name for Rotation Speed",
              "description": "JSON Parameter Name for Rotation Speed",
              "type": "string",
              "required": false
            },
            "paramNameRotationDirection": {
              "title": "Parameter Name for Rotation Direction",
              "description": "JSON Parameter Name for Rotation Direction",
              "type": "string",
              "required": false
            },
            "paramNameSwingMode": {
              "title": "Parameter Name for Swing Mode",
              "description": "JSON Parameter Name for Swing Mode",
              "type": "string",
              "required": false
            },
            "paramNameCurrentFanState": {
              "title": "Parameter Name for Current Fan State",
              "description": "JSON Parameter Name for Current Fan State",
              "type": "string",
              "required": false
            },
            "paramNameTargetFanState": {
              "title": "Parameter Name for Target Fan State",
              "description": "JSON Parameter Name for Target Fan State",
              "type": "string",
              "required": false
            },
            "paramNameContactSensorState": {
              "title": "Parameter Name for Contact Sensor State",
              "description": "JSON Parameter Name for Contact Sensor State",
              "type": "string",
              "required": false
            },
            "CurrentAmbientLightLevel": {
              "title": "Parameter Name for Current Ambient Light Level",
              "description": "JSON Parameter Name for Current Ambient Light Level",
              "type": "string",
              "required": false
            },
            "paramNameCO2Detected": {
              "title": "Parameter Name for CO2 Detected",
              "description": "JSON Parameter Name for CO2 Detected",
              "type": "string",
              "required": false
            },
            "paramNameSmokeDetected": {
              "title": "Parameter Name for Smoke Detected",
              "description": "JSON Parameter Name for Smoke Detected",
              "type": "string",
              "required": false
            },
            "paramNameOccupancyDetected": {
              "title": "Parameter Name for Occupancy Detected",
              "description": "JSON Parameter Name for Occupancy Detected",
              "type": "string",
              "required": false
            },
            "paramNameMotionDetected": {
              "title": "Parameter Name for Motion Detected",
              "description": "JSON Parameter Name for Motion Detected",
              "type": "string",
              "required": false
            },
            "paramNameAirQuality": {
              "title": "Parameter Name for Air Quality",
              "description": "JSON Parameter Name for Air Quality",
              "type": "string",
              "required": false
            },
            "paramNamePM2_5Density": {
              "title": "Parameter Name for PM2.5 Density",
              "description": "JSON Parameter Name for PM2.5 Density",
              "type": "string",
              "required": false
            },
            "paramNamePM10Density": {
              "title": "Parameter Name for PM10 Density",
              "description": "JSON Parameter Name for PM10 Density",
              "type": "string",
              "required": false
            },
            "paramNameOzoneDensity": {
              "title": "Parameter Name for Ozone Density",
              "description": "JSON Parameter Name for Ozone Density",
              "type": "string",
              "required": false
            },
            "paramNameNitrogenDioxideDensity": {
              "title": "Parameter Name for Nitrogen Dioxide Density",
              "description": "JSON Parameter Name for Nitrogen Dioxide Density",
              "type": "string",
              "required": false
            },
            "paramNameSulphurDioxideDensity": {
              "title": "Parameter Name for Sulphur Dioxide Density",
              "description": "JSON Parameter Name for Sulphur Dioxide Density",
              "type": "string",
              "required": false
            },
            "paramNameCarbonMonoxideLevel": {
              "title": "Parameter Name for Carbon Monoxide Level",
              "description": "JSON Parameter Name for Carbon Monoxide Level",
              "type": "string",
              "required": false
            },
            "paramNameCO2Level": {
              "title": "Parameter Name for CO2 Level",
              "description": "JSON Parameter Name for CO2 Level",
              "type": "string",
              "required": false
            },
            "paramNameCO2PeakLevel": {
              "title": "Parameter Name for CO2 Peak Level",
              "description": "JSON Parameter Name for CO2 Peak Level",
              "type": "string",
              "required": false
            },
            "paramNameStatusFault": {
              "title": "Parameter Name for Fault",
              "description": "JSON Parameter Name Device Fault",
              "type": "string",
              "required": false
            },
            "paramNameBatteryLevel": {
              "title": "Parameter Name for Battery Level",
              "description": "JSON Parameter Name for Battery Level",
              "type": "string",
              "required": false
            },
            "paramNameStatusLowBattery": {
              "title": "Parameter Name for Low Battery",
              "description": "JSON Parameter Name for Low Battery",
              "type": "string",
              "required": false
            },
            "paramNameStatusTampered": {
              "title": "Parameter Name for Tampered",
              "description": "JSON Parameter Name Device is Tampered",
              "type": "string",
              "required": false
            },
            "sensorUrl": {
              "title": "Sensor URL",
              "description": "JSON file containing sensor readings (temperature, humidity)",
              "type": "string",
              "required": false
            },
            "temperatureName": {
              "title": "Parameter Name for Temperature",
              "description": "JSON parameter name for Temperature reading",
              "type": "string",
              "required": false
            },
            "humidityName": {
              "title": "Parameter Name for Humidity",
              "description": "JSON parameter name for Humidity reading",
              "type": "string",
              "required": false
            },
            "updateInterval": {
              "title": "Update interval",
              "description": "update interval for reading Sensors, default is 60000 = 60 seconds = 1 minute",
              "type": "integer",
              "required": false
            },
            "sharedPollingInterval": {
              "title": "Update Interval",
              "description": "Update interval, default is 60000 miliseconds",
              "type": "integer",
              "required": false
            },
            "mqttBroker": {
              "title": "MQTT Broker",
              "description": "URL of MQTT Broker",
              "type": "string",
              "required": false
            },
            "mqttPort": {
              "title": "MQTT port",
              "description": "1883",
              "type": "number",
              "required": false
            },
            "mqttUsername": {
              "title": "MQTT Username",
              "description": "MQTT Username",
              "type": "string",
              "required": false
            },
            "mqttPassword": {
              "title": "MQTT Password",
              "description": "MQTT Password",
              "type": "string",
              "required": false
            },
            "mqttTemperature": {
              "title": "MQTT Topic Temperature",
              "description": "mqtt Topic Temperature",
              "type": "string",
              "required": false
            },
            "mqttHumidity": {
              "title": "MQTT Topic Humidity",
              "description": "mqtt Topic Humidity",
              "type": "string",
              "required": false
            },
            "mqttSwitch": {
              "title": "MQTT Topic Switch",
              "description": "MQTT Topic Switch",
              "type": "string",
              "required": false
            },
            "mqttRGB": {
              "title": "MQTT Topic RGB",
              "description": "MQTT Topic RGB",
              "type": "string",
              "required": false
            },
            "mqttBrightness": {
              "title": "MQTT Topic Brightness",
              "description": "MQTT Topic Brightness",
              "type": "string",
              "required": false
            },
            "mqttHue": {
              "title": "MQTT Topic Hue",
              "description": "MQTT Topic Hue",
              "type": "string",
              "required": false
            },
            "mqttSaturation": {
              "title": "MQTT Topic Saturation",
              "description": "MQTT Topic Saturation",
              "type": "string",
              "required": false
            },
            "mqttColorTemperature": {
              "title": "MQTT Topic Color Temperature",
              "description": "MQTT Topic Color Temperature (Kelvin)",
              "type": "string",
              "required": false
            },
            "mqttInUse": {
              "title": "MQTT Topic In Use",
              "description": "MQTT Topic In Use",
              "type": "string",
              "required": false
            },
            "mqttReconnectInterval": {
              "title": "MQTT Reconnect interval (sec)",
              "description": "MQTT Reconnect interval default is set to 60 sec",
              "type": "number",
              "required": false
            },
            "mqttRotationSpeed": {
              "title": "Parameter Name for Rotation Speed",
              "description": "MQTT Topic Name for Rotation Speed",
              "type": "string",
              "required": false
            },
            "mqttRotationDirection": {
              "title": "MQTT Topic for Rotation Direction",
              "description": "MQTT Topic Name for Rotation Direction",
              "type": "string",
              "required": false
            },
            "mqttSwingMode": {
              "title": "MQTT Topic for Swing Mode",
              "description": "MQTT Topic Name for Swing Mode",
              "type": "string",
              "required": false
            },
            "mqttCurrentFanState": {
              "title": "MQTT Topic for Current Fan State",
              "description": "MQTT Topic Name for Current Fan State",
              "type": "string",
              "required": false
            },
            "mqttTargetFanState": {
              "title": "MQTT Topic for Target Fan State",
              "description": "MQTT Topic Name for Target Fan State",
              "type": "string",
              "required": false
            },
            "mqttMotionDetected": {
              "title": "MQTT Topic Motion Detected",
              "description": "MQTT Topic Motion Detected",
              "type": "string",
              "required": false
            },
            "mqttContactSensorState": {
              "title": "MQTT Topic Contact Sensor State",
              "description": "MQTT Topic Contact Sensor State",
              "type": "string",
              "required": false
            },
            "mqttCurrentAmbientLightLevel": {
              "title": "MQTT Topic Current Ambient Light Level",
              "description": "MQTT Topic Current Ambient Light Level",
              "type": "string",
              "required": false
            },
            "mqttCO2Detected": {
              "title": "MQTT Topic for CO2 Detected",
              "description": "MQTT Topic Name for CO2 Detected",
              "type": "string",
              "required": false
            },
            "mqttSmokeDetected": {
              "title": "MQTT Topic for Smoke Detected",
              "description": "MQTT Topic Name for Smoke Detected",
              "type": "string",
              "required": false
            },
            "mqttOccupancyDetected": {
              "title": "MQTT Topic for Occupancy Detected",
              "description": "MQTT Topic Name for Occupancy Detected",
              "type": "string",
              "required": false
            },
            "mqttAirQuality": {
              "title": "MQTT Topic for Air Quality",
              "description": "MQTT Topic Name for Air Quality",
              "type": "string",
              "required": false
            },
            "mqttPM2_5Density": {
              "title": "MQTT Topic for PM2.5 Density",
              "description": "MQTT Topic Name for PM2.5 Density",
              "type": "string",
              "required": false
            },
            "mqttPM10Density": {
              "title": "MQTT Topic for PM10 Density",
              "description": "MQTT Topic Name for PM10 Density",
              "type": "string",
              "required": false
            },
            "mqttOzoneDensity": {
              "title": "MQTT Topic for Ozone Density",
              "description": "MQTT Topic Name for Ozone Density",
              "type": "string",
              "required": false
            },
            "mqttNitrogenDioxideDensity": {
              "title": "MQTT Topic for Nitrogen Dioxide Density",
              "description": "MQTT Topic Name for Nitrogen Dioxide Density",
              "type": "string",
              "required": false
            },
            "mqttSulphurDioxideDensity": {
              "title": "MQTT Topic for Sulphur Dioxide Density",
              "description": "MQTT Topic Name for Sulphur Dioxide Density",
              "type": "string",
              "required": false
            },
            "mqttCarbonMonoxideLevel": {
              "title": "MQTT Topic for Carbon Monoxide Level",
              "description": "MQTT Topic Name for Carbon Monoxide Level",
              "type": "string",
              "required": false
            },
            "mqttCO2Level": {
              "title": "MQTT Topic for CO2 Level",
              "description": "MQTT Topic Name for CO2 Level",
              "type": "string",
              "required": false
            },
            "mqttCO2PeakLevel": {
              "title": "MQTT Topic for CO2 Peak Level",
              "description": "MQTT Topic Name for CO2 Peak Level",
              "type": "string",
              "required": false
            },
            "mqttTargetDoorState": {
              "title": "MQTT Topic for Target Door State",
              "description": "MQTT Topic Name for Target Door State",
              "type": "string",
              "required": false
            },
            "mqttCurrentDoorState": {
              "title": "MQTT Topic for Current Door State",
              "description": "MQTT Topic Name for Current Door State",
              "type": "string",
              "required": false
            },
            "mqttObstructionDetected": {
              "title": "MQTT Topic for Obstruction Detected",
              "description": "MQTT Topic Name for Obstruction Detected",
              "type": "string",
              "required": false
            },
            "mqttStatusJammed": {
              "title": "MQTT Topic for Status Jammed",
              "description": "MQTT Topic Name for Status Jammed",
              "type": "string",
              "required": false
            },
            "mqttTargetPosition": {
              "title": "MQTT Topic for Target Position",
              "description": "MQTT Topic Name for Target Position",
              "type": "string",
              "required": false
            },
            "mqttCurrentPosition": {
              "title": "MQTT Topic for Current Position",
              "description": "MQTT Topic Name for Current Position",
              "type": "string",
              "required": false
            },
            "mqttPositionState": {
              "title": "MQTT Topic for Position State",
              "description": "MQTT Topic Name for Position State",
              "type": "string",
              "required": false
            },
            "mqttHoldPosition": {
              "title": "MQTT Topic for Hold Position",
              "description": "MQTT Topic Name for Hold Position",
              "type": "string",
              "required": false
            },
            "mqttActive": {
              "title": "MQTT Topic for Active",
              "description": "MQTT Topic Name for Active (on/off)",
              "type": "string",
              "required": false
            },
            "mqttFault": {
              "title": "MQTT Topic for Fault",
              "description": "MQTT Topic Name for Device is Fault",
              "type": "string",
              "required": false
            },
            "mqttLowBattery": {
              "title": "MQTT Topic for Low Battery",
              "description": "MQTT Topic Name for Low Battery",
              "type": "string",
              "required": false
            },
            "mqttTampered": {
              "title": "MQTT Topic for Tampered",
              "description": "MQTT Topic Name for Tampered",
              "type": "string",
              "required": false
            },
            "discordWebhook": {
              "title": "Discord WebHook",
              "description": "URL to Discord WebHook",
              "type": "string",
              "required": false
            },
            "discordUsername": {
              "title": "Discord Username",
              "description": "Name for publisher",
              "type": "string",
              "required": false
            },
            "discordAvatar": {
              "title": "Discord Avatar",
              "description": "URL to Online Avatar image",
              "type": "string",
              "required": false
            },
            "discordMessage": {
              "title": "Discord Message",
              "description": "Message",
              "type": "string",
              "required": false
            }
          }
        }
      }
    }
  },
  "layout": [{
    "key": "devices",
    "type": "tabarray",
    "title": "{{ value.deviceName || 'new Device' }}",
    "items": [   
      "devices[].enableLogging",  
      "devices[].deviceType",
      "devices[].deviceName",
      "devices[].deviceID",
      "devices[].deviceManufacturer",
      "devices[].deviceModel",
      "devices[].deviceSerialNumber",
      "devices[].deviceFirmwareVersion",
      {
        "key": "devices[]",
        "type": "fieldset",
        "title": "{{ value.title }}",
        "items": [{
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Switch Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Switch';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].urlON",
              "devices[].urlOFF",
              "devices[].stateName",
              "devices[].onStatusValue",
              "devices[].offStatusValue"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Switch Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Switch';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttSwitch"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Switch Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Switch';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].sensorUrl",
              "devices[].temperatureName",
              "devices[].humidityName",
              "devices[].updateInterval"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttTemperature",
              "devices[].mqttHumidity"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Carbon Dioxide Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'CarbonDioxideSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameCO2Detected",
              "devices[].paramNameCO2Level",
              "devices[].paramNameCO2PeakLevel",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Carbon Dioxide Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'CarbonDioxideSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttCO2Detected",
              "devices[].mqttCO2Level",
              "devices[].mqttCO2PeakLevel",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Carbon Dioxide Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'CarbonDioxideSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'MotionSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameMotionDetected",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'MotionSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttMotionDetected",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'MotionSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'ContactSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameContactSensorState",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'ContactSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttContactSensorState",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Motion Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'ContactSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Light Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'LightSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameCurrentAmbientLightLevel",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Light Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'LightSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttCurrentAmbientLightLevel",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Light Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'LightSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Smoke Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'SmokeSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameSmokeDetected",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Smoke Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'SmokeSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttSmokeDetected",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Smoke Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'SmokeSensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Air Quality Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'AirQualitySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameAirQuality",
              "devices[].paramNamePM2_5Density",
              "devices[].paramNamePM10Density",
              "devices[].paramNameOzoneDensity",
              "devices[].paramNameNitrogenDioxideDensity",
              "devices[].paramNameSulphurDioxideDensity",
              "devices[].paramNameCarbonMonoxideLevel",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Air Quality Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'AirQualitySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttAirQuality",
              "devices[].mqttPM2_5Density",
              "devices[].mqttPM10Density",
              "devices[].mqttOzoneDensity",
              "devices[].mqttNitrogenDioxideDensity",
              "devices[].mqttSulphurDioxideDensity",
              "devices[].mqttCarbonMonoxideLevel",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Air Quality Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'AirQualitySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Occupancy Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'OccupancySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].updateInterval",
              "devices[].paramNameOccupancyDetected",
              "devices[].paramNameStatusActive",
              "devices[].paramNameStatusFault",
              "devices[].paramNameStatusLowBattery",
              "devices[].paramNameStatusTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Occupancy Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'OccupancySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttOccupancyDetected",
              "devices[].mqttActive",
              "devices[].mqttFault",
              "devices[].mqttLowBattery",
              "devices[].mqttTampered"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Occupancy Sensor Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'OccupancySensor';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "condition": {
              "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
            },
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].useRGB",
                  "devices[].useBrightness255",
                  "devices[].useColorTKelvin"
                ]
              }
            ]
          },          
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Light Bulb Settings",
            "condition": {
              "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
            },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].urlON",
              "devices[].urlOFF",
              "devices[].urlStatus",
              "devices[].stateName",
              "devices[].onStatusValue",
              "devices[].offStatusValue",
              "devices[].urlLightBulbControl",
              "devices[].brightnessParamName",
              {
                "key": "devices[].rgbParamName",
                "condition": {
                  "functionBody": "return model.devices[arrayIndices].useRGB;"
                }
              },
              {
                "key": "devices[].saturationParamName",
                "condition": {
                  "functionBody": "return !model.devices[arrayIndices].useRGB;"
                }
              },
              {
                "key": "devices[].hueParamName",
                "condition": {
                  "functionBody": "return !model.devices[arrayIndices].useRGB;"
                }
              },
              "devices[].colorTemperatureParamName"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Light Bulb Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttSwitch",
              "devices[].mqttBrightness",
              {
                "key": "devices[].mqttRGB",
                "condition": {
                  "functionBody": "return model.devices[arrayIndices].useRGB;"
                }
              },
              {
                "key": "devices[].mqttHue",
                "condition": {
                  "functionBody": "return !model.devices[arrayIndices].useRGB;"
                }
              },
              {
                "key": "devices[].mqttSaturation",
                "condition": {
                  "functionBody": "return !model.devices[arrayIndices].useRGB;"
                }
              },
              "devices[].mqttColorTemperature"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Light Bulb Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Outlet Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Outlet';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].urlStatus",
              "devices[].urlON",
              "devices[].urlOFF",
              "devices[].stateName",
              "devices[].onStatusValue",
              "devices[].offStatusValue",
              "devices[].inUseStateName",
              "devices[].inUseOnStatusValue",
              "devices[].inUseOffStatusValue"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Outlet Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Outlet';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttSwitch",
              "devices[].mqttInUse"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Outlet Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Outlet';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Fan Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Fan';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].methodUpdate",
              "devices[].urlStatus",
              "devices[].urlDeviceControl",
              "devices[].paramNameStatusActive",
              "devices[].paramNameRotationSpeed",
              "devices[].paramNameRotationDirection",
              "devices[].paramNameSwingMode",
              "devices[].paramNameCurrentFanState",
              "devices[].paramNameTargetFanState"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Fan Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Fan';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttSwitch",
              "devices[].mqttRotationSpeed",
              "devices[].mqttRotationDirection",
              "devices[].mqttSwingMode",
              "devices[].mqttCurrentFanState",
              "devices[].mqttTargetFanState"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Fan Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Fan';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Garage Door Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'GarageDoorOpener';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].methodUpdate",
              "devices[].urlStatus",
              "devices[].urlDeviceControl",
              "devices[].paramNameTargetDoorState",
              "devices[].paramNameCurrentDoorState",
              "devices[].paramNameObstructionDetected",
              "devices[].paramNameStatusJammed"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Garage Door Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'GarageDoorOpener';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttTargetDoorState",
              "devices[].mqttCurrentDoorState",
              "devices[].mqttObstructionDetected",
              "devices[].mqttStatusJammed"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Garage Door Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'GarageDoorOpener';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Window Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Window';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].methodUpdate",
              "devices[].urlStatus",
              "devices[].urlDeviceControl",
              "devices[].paramNameTargetPosition",
              "devices[].paramNameCurrentPosition",
              "devices[].paramNamePositionState"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Window Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Window';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttTargetPosition",
              "devices[].mqttCurrentPosition",
              "devices[].mqttPositionState"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Window Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'Window';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "HTTP Window Covering Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'WindowCovering';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              {
                "type": "flex",
                "flex-flow": "row wrap",
                "items": [
                  "devices[].sharedPolling",
                  "devices[].sharedPollingId",
                  "devices[].sharedPollingInterval"
                ]
              },
              "devices[].methodUpdate",
              "devices[].urlStatus",
              "devices[].urlDeviceControl",
              "devices[].paramNameTargetPosition",
              "devices[].paramNameCurrentPosition",
              "devices[].paramNamePositionState",
              "devices[].paramNameHoldPosition",
              "devices[].paramNameStatusJammed"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "MQTT Window Covering Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'WindowCovering';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].mqttReconnectInterval",
              "devices[].mqttBroker",
              "devices[].mqttPort",
              "devices[].mqttUsername",
              "devices[].mqttPassword",
              "devices[].mqttTargetPosition",
              "devices[].mqttCurrentPosition",
              "devices[].mqttPositionState",
              "devices[].mqttHoldPosition",
              "devices[].mqttStatusJammed"
            ]
          },
          {
            "key": "devices[]",
            "type": "fieldset",
            "title": "Discord Webhook Window Covering Settings",
            "condition": {
                "functionBody": "return model.devices[arrayIndices].deviceType === 'WindowCovering';"
              },
            "expandable": true,
            "expanded": false,
            "items": [
              "devices[].discordWebhook",
              "devices[].discordUsername",
              "devices[].discordAvatar",
              "devices[].discordMessage"
            ]
          }    
        ]
      }
    ]
  }]
}