{
  "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"
      },
      "description": {
        "title": "Description",
        "type": "string"
      },
      "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":"Battery","enum":["Battery"]},
                {"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":"Door","enum":["DoorOpener"]},
                {"title":"Garage Door","enum":["GarageDoorOpener"]},
                {"title":"Window","enum":["Window"]},
                {"title":"Window Covering","enum":["WindowCovering"]},
                {"title":"Valve","enum":["Valve"]}
              ],
              "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
            },
            "ignoreHttpsCertErrors": {
              "title": "Ignore HTTPS Certificate Errors",
              "type": "boolean",
              "default": false,
              "description": "If enabled, the plugin will skip certificate validation when connecting to this device over HTTPS. Use only for trusted local devices with self-signed certificates.",
              "required": false
            },
            "trustedCert": {
              "title": "Trusted Certificate (PEM format)",
              "type": "string",
              "description": "Paste the full PEM-encoded certificate here to validate HTTPS connections without skipping verification.",
              "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
            },
            "paramNameStatusActive": {
              "title": "Parameter Name for Active",
              "description": "JSON Parameter Name for Active (on/off)",
              "type": "string",
              "required": false
            },
            "paramNameInUse": {
              "title": "Parameter Name for In Use",
              "description": "JSON Parameter Name for In Use (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
            },
            "paramNameCurrentAmbientLightLevel": {
              "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
            },
            "paramNameVOCDensity": {
              "title": "Parameter Name for VOC Level",
              "description": "JSON Parameter Name for Volatile Organic Compounds 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
            },
            "paramNameStatusChargingBattery": {
              "title": "Parameter Name for Charging Battery",
              "description": "JSON Parameter Name for Charging Battery",
              "type": "string",
              "required": false
            },
            "paramNameStatusTampered": {
              "title": "Parameter Name for Tampered",
              "description": "JSON Parameter Name Device is Tampered",
              "type": "string",
              "required": false
            },
            "paramNameValveType": {
              "type": "number",
              "title": "Valve Type",
              "oneOf":[
                {"title":"Generic valve","enum":[0]},
                {"title":"Irrigation","enum":[1]},
                {"title":"Shower head","enum":[2]},
                {"title":"Tap","enum":[3]}
              ],
              "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
            },
            "mqttVOCDensity": {
              "title": "MQTT Topic for VOC Level",
              "description": "MQTT Topic Name for Volatile Organic Compounds 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
            },
            "mqttBatteryLevel": {
              "title": "MQTT Topic for Battery Level",
              "description": "MQTT Topic Name for Battery Level",
              "type": "string",
              "required": false
            },
            "mqttBatteryChargingState": {
              "title": "MQTT Topic for Battery Charging State",
              "description": "MQTT Topic Name for Battery Charging State",
              "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",
        {
          "key": "devices[].paramNameValveType",
          "condition": {
            "functionBody": "return model.devices[arrayIndices].deviceType === 'Valve';"
          }
        },
        "devices[].deviceName",
        "devices[].deviceID",
        "devices[].deviceManufacturer",
        "devices[].deviceModel",
        "devices[].deviceSerialNumber",
        "devices[].deviceFirmwareVersion",
        {
          "key": "devices[]",
          "type": "fieldset",
          "title": "Settings",
          "items": [
            {
              "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 {{ value.deviceType }} Settings",
              "expandable": true,
              "expanded": false,
              "items": [
                {
                  "type": "flex",
                  "flex-flow": "row wrap",
                  "items": [
                    "devices[].sharedPolling",
                    "devices[].sharedPollingId",
                    "devices[].sharedPollingInterval"
                  ]
                },
                {
                  "title": "Security Settings",
                  "type": "section",
                  "expandable": true,
                  "expanded": false,
                  "items": [
                    "devices[].ignoreHttpsCertErrors",
                    {
                      "key": "devices[].trustedCert",
                      "type": "textarea",
                      "title": "Trusted Certificate (PEM format)",
                      "description": "Paste the full PEM-encoded certificate here to validate HTTPS connections without skipping verification.",
                      "rows": 5
                    }
                  ]
                },
                {
                  "title": "Battery Settings",
                  "type": "section",
                  "expandable": true,
                  "expanded": false,
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
                  },
                  "items": [
                    "devices[].paramNameBatteryLevel",
                    "devices[].paramNameStatusChargingBattery",
                    "devices[].paramNameStatusLowBattery"
                  ]
                },
                {
                  "type": "section",
                  "title": "-----------------------------------------"
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Switch';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].urlON",
                    "devices[].urlOFF",
                    "devices[].stateName",
                    "devices[].onStatusValue",
                    "devices[].offStatusValue"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Battery';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameBatteryLevel",
                    "devices[].paramNameStatusChargingBattery",
                    "devices[].paramNameStatusLowBattery"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
                  },
                  "items": [
                    "devices[].sensorUrl",
                    "devices[].updateInterval",
                    "devices[].temperatureName",
                    "devices[].humidityName"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'CarbonDioxideSensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameCO2Detected",
                    "devices[].paramNameCO2Level",
                    "devices[].paramNameCO2PeakLevel",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'MotionSensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameMotionDetected",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'ContactSensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameContactSensorState",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'LightSensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameCurrentAmbientLightLevel",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'SmokeSensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameSmokeDetected",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'AirQualitySensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameAirQuality",
                    "devices[].paramNamePM2_5Density",
                    "devices[].paramNamePM10Density",
                    "devices[].paramNameOzoneDensity",
                    "devices[].paramNameNitrogenDioxideDensity",
                    "devices[].paramNameSulphurDioxideDensity",
                    "devices[].paramNameCarbonMonoxideLevel",
                    "devices[].paramNameVOCDensity",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'OccupancySensor';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].updateInterval",
                    "devices[].paramNameOccupancyDetected",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameStatusFault",
                    "devices[].paramNameStatusLowBattery",
                    "devices[].paramNameStatusTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
                  },
                  "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"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Outlet';"
                  },
                  "items": [
                    "devices[].urlStatus",
                    "devices[].urlON",
                    "devices[].urlOFF",
                    "devices[].stateName",
                    "devices[].onStatusValue",
                    "devices[].offStatusValue",
                    "devices[].inUseStateName",
                    "devices[].inUseOnStatusValue",
                    "devices[].inUseOffStatusValue"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Fan';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameRotationSpeed",
                    "devices[].paramNameRotationDirection",
                    "devices[].paramNameSwingMode",
                    "devices[].paramNameCurrentFanState",
                    "devices[].paramNameTargetFanState"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'GarageDoorOpener';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameTargetDoorState",
                    "devices[].paramNameCurrentDoorState",
                    "devices[].paramNameObstructionDetected",
                    "devices[].paramNameStatusJammed"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'DoorOpener';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameTargetPosition",
                    "devices[].paramNameCurrentPosition",
                    "devices[].paramNamePositionState",
                    "devices[].paramNameObstructionDetected",
                    "devices[].paramNameStatusJammed"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Valve';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameStatusActive",
                    "devices[].paramNameInUse"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Window';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameTargetPosition",
                    "devices[].paramNameCurrentPosition",
                    "devices[].paramNamePositionState"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'WindowCovering';"
                  },
                  "items": [
                    "devices[].methodUpdate",
                    "devices[].urlStatus",
                    "devices[].urlDeviceControl",
                    "devices[].paramNameTargetPosition",
                    "devices[].paramNameCurrentPosition",
                    "devices[].paramNamePositionState",
                    "devices[].paramNameHoldPosition",
                    "devices[].paramNameStatusJammed"
                  ]
                }
              ]
            },
            {
              "key": "devices[]",
              "type": "fieldset",
              "title": "📡 MQTT {{ value.deviceType }} Settings",
              "expandable": true,
              "expanded": false,
              "items": [
                "devices[].mqttReconnectInterval",
                "devices[].mqttBroker",
                "devices[].mqttPort",
                "devices[].mqttUsername",
                "devices[].mqttPassword",
                {
                  "title": "Battery Settings",
                  "type": "section",
                  "expandable": true,
                  "expanded": false,
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
                  },
                  "items": [
                    "devices[].mqttBatteryLevel",
                    "devices[].mqttBatteryChargingState",
                    "devices[].mqttLowBattery"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Switch';"
                  },
                  "items": [
                    "devices[].mqttSwitch"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Sensor';"
                  },
                  "items": [
                    "devices[].mqttTemperature",
                    "devices[].mqttHumidity"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Battery';"
                  },
                  "items": [
                    "devices[].mqttLowBattery",
                    "devices[].mqttBatteryLevel",
                    "devices[].mqttBatteryChargingState"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'CarbonDioxideSensor';"
                  },
                  "items": [
                    "devices[].mqttCO2Detected",
                    "devices[].mqttCO2Level",
                    "devices[].mqttCO2PeakLevel",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'MotionSensor';"
                  },
                  "items": [
                    "devices[].mqttMotionDetected",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'ContactSensor';"
                  },
                  "items": [
                    "devices[].mqttContactSensorState",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'LightSensor';"
                  },
                  "items": [
                    "devices[].mqttCurrentAmbientLightLevel",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'SmokeSensor';"
                  },
                  "items": [
                    "devices[].mqttSmokeDetected",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'AirQualitySensor';"
                  },
                  "items": [
                    "devices[].mqttAirQuality",
                    "devices[].mqttPM2_5Density",
                    "devices[].mqttPM10Density",
                    "devices[].mqttOzoneDensity",
                    "devices[].mqttNitrogenDioxideDensity",
                    "devices[].mqttSulphurDioxideDensity",
                    "devices[].mqttCarbonMonoxideLevel",
                    "devices[].mqttVOCDensity",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'OccupancySensor';"
                  },
                  "items": [
                    "devices[].mqttOccupancyDetected",
                    "devices[].mqttActive",
                    "devices[].mqttFault",
                    "devices[].mqttLowBattery",
                    "devices[].mqttTampered"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'LightBulb';"
                  },
                  "items": [
                    "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"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Outlet';"
                  },
                  "items": [
                    "devices[].mqttSwitch",
                    "devices[].mqttInUse"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Fan';"
                  },
                  "items": [
                    "devices[].mqttSwitch",
                    "devices[].mqttRotationSpeed",
                    "devices[].mqttRotationDirection",
                    "devices[].mqttSwingMode",
                    "devices[].mqttCurrentFanState",
                    "devices[].mqttTargetFanState"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'GarageDoorOpener';"
                  },
                  "items": [
                    "devices[].mqttTargetDoorState",
                    "devices[].mqttCurrentDoorState",
                    "devices[].mqttObstructionDetected",
                    "devices[].mqttStatusJammed"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'DoorOpener';"
                  },
                  "items": [
                    "devices[].mqttTargetPosition",
                    "devices[].mqttCurrentPosition",
                    "devices[].mqttPositionState",
                    "devices[].mqttObstructionDetected",
                    "devices[].mqttStatusJammed"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Valve';"
                  },
                  "items": [
                    "devices[].mqttActive",
                    "devices[].mqttInUse"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'Window';"
                  },
                  "items": [
                    "devices[].mqttTargetPosition",
                    "devices[].mqttCurrentPosition",
                    "devices[].mqttPositionState"
                  ]
                },
                {
                  "type": "section",
                  "condition": {
                    "functionBody": "return model.devices[arrayIndices].deviceType === 'WindowCovering';"
                  },
                  "items": [
                    "devices[].mqttTargetPosition",
                    "devices[].mqttCurrentPosition",
                    "devices[].mqttPositionState",
                    "devices[].mqttHoldPosition",
                    "devices[].mqttStatusJammed"
                  ]
                }
              ]
            },
            {
              "key": "devices[]",
              "type": "fieldset",
              "title": "🗣️ Discord {{ value.deviceType }} Webhook Settings",
              "expandable": true,
              "expanded": false,
              "items": [
                "devices[].discordWebhook",
                "devices[].discordUsername",
                "devices[].discordAvatar",
                "devices[].discordMessage"
              ]
            }
          ]
        }
      ]
    }
  ]
}