{
  "pluginAlias": "HomebridgeDummy",
  "pluginType": "platform",
  "singular": true,
  "customUi": true,
  "customUiPath": "./dist/homebridge-ui",
  "schema": {
    "type": "object",
    "definitions": {
      "units": {
        "type": "string",
        "title": "${config.title.units}",
        "enum": [ "MILLISECONDS", "SECONDS", "MINUTES", "HOURS"],
        "enumNames": ["${config.enumNames.milliseconds}", "${config.enumNames.seconds}", "${config.enumNames.minutes}", "${config.enumNames.hours}"]
      },
      "sensor": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "title": "${config.title.sensor}",
            "enum": ["CarbonDioxideSensor", "CarbonMonoxideSensor", "ContactSensor", "LeakSensor", "MotionSensor", "OccupancySensor", "SmokeSensor"],
            "enumNames": ["${config.enumNames.carbonDioxideSensor}", "${config.enumNames.carbonMonoxideSensor}", "${config.enumNames.contactSensor}", "${config.enumNames.leakSensor}", "${config.enumNames.motionSensor}", "${config.enumNames.occupancySensor}", "${config.enumNames.smokeSensor}"]
          },
          "behavior": {
            "type": "string",
            "title": "${config.title.sensorBehavior}",
            "enum": ["MIRROR", "TIMER"],
            "enumNames": ["${config.enumNames.sensorMirror}", "${config.enumNames.sensorTimer}"]
          }
        }
      },
      "notification": {
        "type": "object",
        "properties": {
          "api": {
            "type": "string",
            "title": "${config.title.api}",
            "enum": ["PINGIE_NOTIFY"],
            "enumNames": ["${config.enumNames.pingieNotify}"]
          },
          "token": {
            "type": "string",
            "title": "${config.title.pushToken}"
          },
          "id": {
            "type": "string",
            "title": "${config.title.pushId}"
          },
          "title": {
            "type": "string",
            "title": "${config.title.pushTitle}"
          },
          "text": {
            "type": "string",
            "title": "${config.title.pushText}"
          },
          "groupType": {
            "type": "string"
          },
          "iconURL": {
            "type": "string"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "api": {
                  "enum": ["PINGIE_NOTIFY"]
                }
              },
              "required": ["api"]
            },
            "then": {
              "required": ["token", "id", "text"]
            }
          },
          {
            "if": {
              "properties": {
                "token": {
                }
              },
              "required": ["token"]
            },
            "then": {
              "required": ["api", "id", "text"]
            }
          },
          {
            "if": {
              "properties": {
                "id": {
                }
              },
              "required": ["id"]
            },
            "then": {
              "required": ["token"]
            }
          },
          {
            "if": {
              "properties": {
                "title": {
                }
              },
              "required": ["title"]
            },
            "then": {
              "required": ["text"]
            }
          }
        ]
      },
      "schedule": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "title": "${config.title.type}",
            "enum": [ "TIMEOUT", "INTERVAL", "CRON", "SUNRISE", "SUNSET", "DAWN", "DUSK", "GOLDEN_HOUR", "NIGHT"],
            "enumNames": ["${config.enumNames.timeout}", "${config.enumNames.interval}", "${config.enumNames.cron}", "${config.enumNames.sunrise}", "${config.enumNames.sunset}", "${config.enumNames.dawn}", "${config.enumNames.dusk}", "${config.enumNames.goldenHour}", "${config.enumNames.night}"]
          },
          "time": {
            "type": "integer",
            "title": "${config.title.time}",
            "minimum": 1
          },
          "units": { "$ref": "#/definitions/units" },
          "random": {
            "type": "boolean",
            "title": "${config.title.random}",
            "description": "${config.description.random}"
          },
          "cron": {
            "type": "string",
            "title": "${config.title.preset}",
            "enum": [ "@secondly", "@minutely", "@hourly", "@daily", "@weekly", "@weekdays", "@weekends", "@monthly", "@yearly", "CRON_CUSTOM"],
            "enumNames": ["${config.enumNames.secondly}", "${config.enumNames.minutely}", "${config.enumNames.hourly}", "${config.enumNames.daily}", "${config.enumNames.weekly}", "${config.enumNames.weekdays}", "${config.enumNames.weekends}", "${config.enumNames.monthly}", "${config.enumNames.yearly}", "${config.enumNames.custom}"]
          },
          "cronCustom": {
            "type": "string",
            "title": "${config.title.cronCustom}",
            "placeholder": "* * * * * *",
            "pattern": "(^((\\*\\/)?([0-5]?[0-9])((,|-|\\/)([0-5]?[0-9]))*|\\*)\\s((\\*\\/)?((2[0-3]|1[0-9]|[0-9]|00))((,|-|\\/)(2[0-3]|1[0-9]|[0-9]|00))*|\\*)\\s((\\*\\/)?([1-9]|[12][0-9]|3[01])((,|-|\\/)([1-9]|[12][0-9]|3[01]))*|\\*)\\s((\\*\\/)?([1-9]|1[0-2])((,|-|\\/)([1-9]|1[0-2]))*|\\*|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec))\\s((\\*\\/)?[0-6]((,|-|\\/)[0-6])*|\\*|00|(sun|mon|tue|wed|thu|fri|sat))$)"
          },
          "offset": {
            "type": "number",
            "title": "${config.title.offset}",
            "enum": [-45, -30, -20, -15, -10, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 10, 15, 20, 30, 45],
            "enumNames": ["-45 ${config.enumNames.minutes}", "-30 ${config.enumNames.minutes}", "-20 ${config.enumNames.minutes}", "-15 ${config.enumNames.minutes}", "-10 ${config.enumNames.minutes}", "-5 ${config.enumNames.minutes}", "-4 ${config.enumNames.minutes}", "-3 ${config.enumNames.minutes}", "-2 ${config.enumNames.minutes}", "-1 ${config.enumNames.minutes}", "+1 ${config.enumNames.minutes}", "+2 ${config.enumNames.minutes}", "+3 ${config.enumNames.minutes}", "+4 ${config.enumNames.minutes}", "+5 ${config.enumNames.minutes}", "+10 ${config.enumNames.minutes}", "+15 ${config.enumNames.minutes}", "+20 ${config.enumNames.minutes}", "+30 ${config.enumNames.minutes}", "+45 ${config.enumNames.minutes}"]
          },
          "latitude": {
            "type": "number",
            "title": "${config.title.latitude}"
          },
          "longitude": {
            "type": "number",
            "title": "${config.title.longitude}"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "enum": ["TIMEOUT", "INTERVAL"]
                }
              }
            },
            "then": {
              "required": ["time", "units"]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "CRON"
                }
              }
            },
            "then": {
              "required": ["cron"]
            }
          },
          {
            "if": {
              "required": ["cron"],
              "properties": {
                "cron": {
                  "const": "CRON_CUSTOM"
                }
              }
            },
            "then": {
              "required": ["cronCustom"]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "enum": ["SUNRISE", "SUNSET", "DAWN", "DUSK", "GOLDEN_HOUR", "NIGHT"]
                }
              }
            },
            "then": {
              "required": ["latitude", "longitude"]
            }
          }
        ]
      },
      "limiter": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "title": "${config.title.limit}"
          },
          "units": {
            "type": "string",
            "title": "${config.title.units}",
            "enum": [ "SECONDS", "MINUTES", "HOURS"],
            "enumNames": ["${config.enumNames.seconds}", "${config.enumNames.minutes}", "${config.enumNames.hours}"],
            "required": true
          },
          "period": {
            "type": "string",
            "title": "${config.title.period}",
            "enum": [ "HOUR", "DAY", "WEEK", "MONTH"],
            "enumNames": ["${config.enumNames.hour}", "${config.enumNames.day}", "${config.enumNames.week}", "${config.enumNames.month}"],
            "required": true
          },
          "resetOnRestart": {
            "type": "boolean"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "limit": {
                }
              },
              "required": ["limit"]
            },
            "then": {
              "required": ["units", "period"]
            }
          },
          {
            "if": {
              "properties": {
                "units" : {
                }
              },
              "required": [ "units" ]
            },
            "then": {
              "required": [ "limit"]
            }
          },
          {
            "if": {
              "properties": {
                "period" : {
                }
              },
              "required": [ "period" ]
            },
            "then": {
              "required": [ "limit"]
            }
          }
        ]
      },
      "operand": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "title": "${config.title.type}",
            "enum": [ "ACCESSORY", "LOG", "PING" ],
            "enumNames": [ "${config.enumNames.accessory}", "${config.enumNames.log}", "${config.enumNames.ping}" ],
            "required": true
          },
          "accessoryId": {
            "type": "string",
            "title": "${config.title.accessory}"
          },
          "accessoryState": {
            "type": "string",
            "title": "${config.title.accessoryState}",
            "enum": [ "on", "off", "open", "closed", "locked", "unlocked" ],
            "enumNames": [ "${config.enumNames.on}", "${config.enumNames.off}", "${config.enumNames.open}", "${config.enumNames.closed}", "${config.enumNames.secured}", "${config.enumNames.unsecured}" ]
          },
          "pattern": {
            "type": "string",
            "title": "${config.title.pattern}"
          },
          "pingHost": {
            "type": "string",
            "title": "${config.title.pingHost}"
          },
          "pingAvailability": {
            "type": "string",
            "title": "${config.title.pingAvailability}",
            "enum": [ "AVAILABLE",  "NOT_AVAILABLE"],
            "enumNames": [ "${config.enumNames.available}", "${config.enumNames.notAvailable}" ]
          },
          "pingInterval": {
            "type": "integer",
            "title": "${config.title.pingInterval}",
            "minimum": 1
          },
          "pingUnits": {
            "$ref": "#/definitions/units"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ACCESSORY"
                }
              },
              "required": ["type"]
            },
            "then": {
              "required": ["accessoryId", "accessoryState"]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                    "const": "LOG"
                }
              },
              "required": ["type"]
            },
            "then": {
              "required": ["pattern"]
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                    "const": "PING"
                }
              },
              "required": ["type"]
            },
            "then": {
                "required": ["pingHost", "pingAvailability", "pingInterval", "pingUnits"]
            }
          }
        ]
      },
      "conditions": {
        "type": "object",
        "properties": {
          "operator": {
            "type": "string",
            "title": "${config.title.operator}",
            "enum": [ "and", "or"],
            "enumNames": ["${config.enumNames.operatorAnd}", "${config.enumNames.operatorOr}"]
          },
          "operands": {
            "type": "array",
            "minItems":1,
            "items": { "$ref": "#/definitions/operand" }
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "operator": {
                }
              },
              "required": ["operator"]
            },
            "then": {
              "required": ["operands"]
            }
          }
        ]
      },
      "simulation": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "time": {
            "type": "integer",
            "minimum": 1
          },
          "units": { "$ref": "#/definitions/units" }
        }
      },
      "fadeOut": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "title": "${config.title.type}",
            "enum": [ "INCREMENTAL", "FIXED"],
            "enumNames": ["${config.enumNames.incremental}", "${config.enumNames.fixed}"]
          },
          "time": {
            "title": "${config.title.time}",
            "type": "integer",
            "minimum": 1
          },
          "units": { "$ref": "#/definitions/units" }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                }
              },
              "required": ["type"]
            },
            "then": {
              "required": ["time", "units"]
            }
          },
          {
            "if": {
                "properties": {
                  "time": {
                  }
                },
                "required": ["time"]
            },
            "then": {
                "required": ["type"]
            }
          },
          {
            "if": {
                "properties": {
                  "units": {
                  }
                },
                "required": ["units"]
            },
            "then": {
                "required": ["type"]
            }
          }
        ]
      }
    },
    "properties": {
      "name": {
        "type": "string",
        "default": "Homebridge Dummy"
      },
      "accessories": {
        "type": "array",
        "items": {
          "type": "object",
          "required": ["name", "type"],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string",
              "title": "${config.title.name}"
            },
            "type": {
              "type": "string",
              "title": "${config.title.type}",
              "enum": ["Door", "GarageDoorOpener", "HumidifierDehumidifier", "HumiditySensor", "Lightbulb", "LockMechanism", "Outlet", "StatelessProgrammableSwitch", "Switch", "TemperatureSensor", "Thermostat", "Valve", "Window", "WindowCovering"],
              "enumNames": ["${config.enumNames.door}", "${config.enumNames.garageDoorOpener}", "${config.enumNames.humidifierDehumidifier}", "${config.enumNames.humiditySensor}", "${config.enumNames.lightbulb}", "${config.enumNames.lockMechanism}", "${config.enumNames.outlet}", "${config.enumNames.button}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}", "${config.enumNames.window}", "${config.enumNames.windowCovering}"]
            },
            "groupName": {
              "type": "string",
              "title": "${config.title.groupName}"
            },
            "sensor": { "$ref": "#/definitions/sensor" },
            "notification": { "$ref": "#/definitions/notification" },
            "schedule": { "$ref": "#/definitions/schedule" },
            "fadeOut": { "$ref": "#/definitions/fadeOut" },
            "autoReset": { "$ref": "#/definitions/schedule" },
            "limiter": { "$ref": "#/definitions/limiter" },
            "conditions": { "$ref": "#/definitions/conditions" },
            "simulation": { "$ref": "#/definitions/simulation" },
            "temperatureUnits": {
              "type": "string",
              "title": "${config.title.temperatureUnits}",
              "enum": ["C", "F"],
              "enumNames": ["${config.enumNames.celsius}", "${config.enumNames.fahrenheit}"]
            },
            "isDimmer": {
              "type": "boolean",
              "title": "${config.title.isDimmer}"
            },
            "defaultState": {
              "type": "string",
              "title": "${config.title.defaultState}",
              "enum": ["on", "off"],
              "enumNames": ["${config.enumNames.on}", "${config.enumNames.off}"]
            },
            "defaultLockState": {
              "type": "string",
              "title": "${config.title.defaultState}",
              "enum": ["locked", "unlocked"],
              "enumNames": ["${config.enumNames.secured}", "${config.enumNames.unsecured}"]
            },
            "defaultPosition": {
              "type": "string",
              "title": "${config.title.defaultPosition}",
              "enum": ["open", "closed"],
              "enumNames": ["${config.enumNames.open}", "${config.enumNames.closed}"]
            },
            "defaultThermostatState": {
              "type": "string",
              "title": "${config.title.defaultState}",
              "enum": ["auto", "heat", "cool", "off"],
              "enumNames": ["${config.enumNames.auto}", "${config.enumNames.heat}", "${config.enumNames.cool}", "${config.enumNames.off}"]
            },
            "defaultTemperature": {
              "type": "number",
              "title": "${config.title.defaultTemperature}"
            },
            "minimumTemperature": {
              "type": "number",
              "title": "${config.title.minimumTemperature}"
            },
            "maximumTemperature": {
              "type": "number",
              "title": "${config.title.maximumTemperature}"
            },
            "validStates": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "enum": ["off", "heat", "cool", "auto"]
              }
            },
            "humidifierType": {
              "type": "string",
              "title": "${config.title.humidifierType}",
              "enum": ["humidifier", "dehumidifier"],
              "enumNames": ["${config.enumNames.humidifier}", "${config.enumNames.dehumidifier}"]
            },
            "valveType": {
              "type": "string",
              "title": "${config.title.valveType}",
              "enum": ["generic", "faucet", "irrigation", "shower"],
              "enumNames": ["${config.enumNames.generic}", "${config.enumNames.faucet}", "${config.enumNames.irrigation}", "${config.enumNames.shower}"]
            },
            "commandOn": {
              "type": "string",
              "title": "${config.title.commandOn}"
            },
            "commandOff": {
              "type": "string",
              "title": "${config.title.commandOff}"
            },
            "commandLock": {
              "type": "string",
              "title": "${config.title.commandLock}"
            },
            "commandUnlock": {
              "type": "string",
              "title": "${config.title.commandUnlock}"
            },
            "commandOpen": {
              "type": "string",
              "title": "${config.title.commandOpen}"
            },
            "commandClose": {
              "type": "string",
              "title": "${config.title.commandClose}"
            },
            "commandHumidity": {
              "type": "string",
              "title": "${config.title.commandHumidity}"
            },
            "commandTemperature": {
              "type": "string",
              "title": "${config.title.commandTemperature}"
            },
            "commandSync": {
              "type": "string",
              "title": "${config.title.commandSync}"
            },
            "syncSchedule": { "$ref": "#/definitions/schedule" },
            "resetOnRestart": {
              "type": "boolean",
              "title": "${config.title.resetOnRestart}"
            },
            "enableWebhook": {
              "type": "boolean",
              "title": "${config.title.enableWebhook}"
            },
            "disableLogging": {
              "type": "boolean",
              "title": "${config.title.disableLogging}"
            },
            "enableHistory": {
              "type": "boolean",
              "title": "${config.title.enableHistory}"
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "commandSync": {
                  }
                },
                "required": ["commandSync"]
              },
              "then": {
                "required": ["syncSchedule"]
              }
            }
          ]
        }
      },
      "verbose": {
        "type": "boolean"
      },
      "webhookConfig": {
        "type": "object",
        "properties": {
          "port": {
            "type": "number"
          },
          "keyPath": {
            "type": "string"
          },
          "certPath": {
            "type": "string"
          },
          "passphrase": {
            "type": "string"
          }
        }
      }
    }
  },
    "layout": [
    {
      "type": "array",
      "key": "accessories",
      "notitle": true,
      "items": [
        {
          "type": "fieldset",
          "expandable": true,
          "title": "${config.title.accessory}",
          "items": [
            {
              "type": "div",
              "displayFlex": true,
              "flex-direction": "row",
              "notitle": true,
              "items": [
                {
                  "key": "accessories[].name",
                  "flex": "0 0 33%"
                },
                {
                  "key": "accessories[].type",
                  "flex": "0 0 33%"
                },
                {
                  "key": "accessories[].groupName",
                  "flex": "0 0 33%"
                }
              ]
            },
            {
              "type": "fieldset",
              "notitle": true,
              "condition": {
                "functionBody": "return model.accessories?.[arguments[1]]?.type;"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['Lightbulb','Outlet','Switch'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultState",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.type",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.behavior",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.sensor.type !== undefined;"
                      }
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['LockMechanism'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultLockState",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.type",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.behavior",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.sensor.type !== undefined;"
                      }
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['Door', 'GarageDoorOpener', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultPosition",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.type",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].sensor.behavior",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.sensor.type !== undefined;"
                      }
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].temperatureUnits",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return ['TemperatureSensor','Thermostat'].includes(model.accessories?.[arguments[1]]?.type);"
                      }
                    },
                    {
                      "key": "accessories[].defaultThermostatState",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return ['Thermostat'].includes(model.accessories?.[arguments[1]]?.type);"
                      }
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['Thermostat'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultTemperature",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].minimumTemperature",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].maximumTemperature",
                      "flex": "0 0 33%"
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['HumidifierDehumidifier'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultState",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].humidifierType",
                      "flex": "0 0 33%"
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return ['Valve'].includes(model.accessories?.[arguments[1]]?.type);"
                  },
                  "items": [
                    {
                      "key": "accessories[].defaultState",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].valveType",
                      "flex": "0 0 33%"
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].enableWebhook",
                      "flex": "0 0 auto"
                    },
                    {
                      "flex": "0 0 5%"
                    },
                    {
                      "key": "accessories[].enableHistory",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return ['Door', 'GarageDoorOpener', 'HumidifierDehumidifier', 'HumiditySensor', 'Outlet', 'Lightbulb', 'Switch', 'TemperatureSensor', 'Thermostat', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
                      }
                    },
                    {
                      "flex": "0 0 5%"
                    },
                    {
                      "key": "accessories[].simulation.enabled",
                      "title": "${config.title.simulateOpenClose}",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return ['Door', 'GarageDoorOpener', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
                      }
                    },
                    {
                      "key": "accessories[].isDimmer",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.type === 'Lightbulb';"
                      }
                    }
                  ]
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].disableLogging",
                      "flex": "0 0 auto"
                    },
                    {
                      "flex": "0 0 5%"
                    },
                    {
                      "key": "accessories[].resetOnRestart",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.type !== 'StatelessProgrammableSwitch';"
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.schedule}",
              "description": "${config.description.schedule}",
              "condition": {
                "functionBody": "const type = model.accessories?.[arguments[1]]?.type; return type && !['HumiditySensor','TemperatureSensor','Thermostat'].includes(type);"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].schedule.type",
                      "flex": "0 0 auto"
                    },
                    {
                      "key": "accessories[].schedule.time",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].schedule.units",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].schedule.cron",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.schedule?.type === 'CRON';"
                      }
                    },
                    {
                      "key": "accessories[].schedule.cronCustom",
                      "flex": "1 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.schedule?.cron === 'CRON_CUSTOM';"
                      }
                    },
                    {
                      "key": "accessories[].schedule.offset",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].schedule.latitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].schedule.longitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
                      }
                    }
                  ]
                },
                {
                  "key": "accessories[].schedule.random",
                  "condition": {
                      "functionBody": "const schedule = model.accessories?.[arguments[1]]?.schedule; return ['TIMEOUT', 'INTERVAL'].includes(schedule?.type) && schedule?.time;"
                  }
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.fadeOut}",
              "description": "${config.description.fadeOut}",
              "condition": {
                "functionBody": "const accessory = model.accessories?.[arguments[1]]; return accessory?.isDimmer === true && !accessory?.autoReset;"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].fadeOut.type",
                      "flex": "0 0 auto"
                    },
                    {
                      "key": "accessories[].fadeOut.time",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.fadeOut?.type;"
                      }
                    },
                    {
                      "key": "accessories[].fadeOut.units",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.fadeOut?.type;"
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.autoReset}",
              "description": "${config.description.autoReset}",
              "condition": {
                "functionBody": "const accessory = model.accessories?.[arguments[1]]; const type = accessory?.type; return !accessory?.fadeOut && type && !['HumiditySensor','StatelessProgrammableSwitch','TemperatureSensor','Thermostat'].includes(type);"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "items": [
                    {
                      "key": "accessories[].autoReset.type",
                      "flex": "0 0 auto"
                    },
                    {
                      "key": "accessories[].autoReset.time",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.autoReset?.type);"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.units",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.autoReset?.type);"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.cron",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.autoReset?.type === 'CRON';"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.cronCustom",
                      "flex": "1 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.autoReset?.cron === 'CRON_CUSTOM';"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.offset",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.autoReset?.type);"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.latitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.autoReset?.type);"
                      }
                    },
                    {
                      "key": "accessories[].autoReset.longitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.autoReset?.type);"
                      }
                    }
                  ]
                },
                {
                  "key": "accessories[].autoReset.random",
                  "condition": {
                      "functionBody": "const autoReset = model.accessories?.[arguments[1]]?.autoReset; return ['TIMEOUT', 'INTERVAL'].includes(autoReset?.type) && autoReset?.time;"
                  }
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.notification}",
              "description": "${config.description.notification}",
              "condition": {
                "functionBody": "const type = model.accessories?.[arguments[1]]?.type; return type && !['HumiditySensor','TemperatureSensor','Thermostat'].includes(type);"
              },
              "items": [
                {
                  "type": "fieldset",
                  "items": [
                    {
                      "type": "div",
                      "displayFlex": true,
                      "flex-direction": "row",
                      "notitle": true,
                      "items": [
                        {
                          "key": "accessories[].notification.api",
                          "flex": "0 0 auto"
                        },
                        {
                          "key": "accessories[].notification.token",
                          "flex": "0 0 auto",
                          "condition": {
                            "functionBody": "return model.accessories?.[arguments[1]]?.notification?.api;"
                          }
                        },
                        {
                          "key": "accessories[].notification.id",
                          "flex": "0 0 auto",
                          "condition": {
                            "functionBody": "return model.accessories?.[arguments[1]]?.notification?.api;"
                          }
                        }
                      ]
                    },
                    {
                      "type": "div",
                      "displayFlex": true,
                      "flex-direction": "row",
                      "notitle": true,
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.notification?.token || model.accessories?.[arguments[1]]?.notification?.id;"
                      },
                      "items": [
                        {
                          "key": "accessories[].notification.title",
                          "flex": "0 0 30%"
                        },
                        {
                          "key": "accessories[].notification.text",
                          "flex": "0 0 70%"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.limiter}",
              "description": "${config.description.limiter}",
              "condition": {
                "functionBody": "const type = model.accessories?.[arguments[1]]?.type; return type && !['HumiditySensor','StatelessProgrammableSwitch','TemperatureSensor','Thermostat'].includes(type);"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "items": [
                    {
                      "key": "accessories[].limiter.limit",
                      "flex": "0 0 33%"
                    },
                    {
                      "key": "accessories[].limiter.units",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.limiter?.limit;"
                      }
                    },
                    {
                      "key": "accessories[].limiter.period",
                      "flex": "0 0 33%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1]]?.limiter?.limit;"
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.conditions}",
              "description": "${config.description.conditions}",
              "condition": {
                "functionBody": "const type = model.accessories?.[arguments[1]]?.type; return type && !['HumiditySensor','TemperatureSensor','Thermostat'].includes(type);"
              },
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "items": [
                    {
                      "key": "accessories[].conditions.operator",
                      "flex": "0 0 auto"
                    }
                  ]
                }
              ]
            },
            {
              "type": "array",
              "title": "${config.title.condition}",
              "notitle": true,
              "condition": {
                "functionBody": "return model.accessories?.[arguments[1]]?.conditions?.operator;"
              },
              "key": "accessories[].conditions.operands",
              "items": [
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "items": [
                    {
                      "key": "accessories[].conditions.operands[].type",
                      "flex": "0 0 auto"
                    },
                    {
                      "key": "accessories[].conditions.operands[].accessoryId",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'ACCESSORY';"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].accessoryState",
                      "flex": "0 0 auto",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.accessoryId;"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].pattern",
                      "flex": "1 0 auto",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'LOG';"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].pingHost",
                      "flex": "0 0 28%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'PING';"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].pingAvailability",
                      "flex": "0 0 22%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'PING';"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].pingInterval",
                      "flex": "0 0 10%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'PING';"
                      }
                    },
                    {
                      "key": "accessories[].conditions.operands[].pingUnits",
                      "flex": "0 0 20%",
                      "condition": {
                        "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'PING';"
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "fieldset",
              "title": "${config.title.commands}",
              "description": "${config.description.commands}",
              "condition": {
                "functionBody": "return model.accessories?.[arguments[1]]?.type;"
              },
              "items": [
                {
                  "key": "accessories[].commandOn",
                  "condition": {
                    "functionBody": "return ['HumidifierDehumidifier','Lightbulb','Outlet','StatelessProgrammableSwitch','Switch','Thermostat','Valve'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandOff",
                  "condition": {
                    "functionBody": "return ['HumidifierDehumidifier','Lightbulb','Outlet','Switch','Thermostat','Valve'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandLock",
                  "condition": {
                    "functionBody": "return ['LockMechanism'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandUnlock",
                  "condition": {
                    "functionBody": "return ['LockMechanism'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandOpen",
                  "condition": {
                    "functionBody": "return ['Door', 'GarageDoorOpener', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandClose",
                  "condition": {
                    "functionBody": "return ['Door', 'GarageDoorOpener', 'Window', 'WindowCovering'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandHumidity",
                  "condition": {
                    "functionBody": "return ['HumiditySensor'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandTemperature",
                  "condition": {
                    "functionBody": "return ['TemperatureSensor','Thermostat'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "key": "accessories[].commandSync",
                  "condition": {
                    "functionBody": "return !['StatelessProgrammableSwitch'].includes(model.accessories?.[arguments[1]]?.type);"
                  }
                },
                {
                  "type": "div",
                  "displayFlex": true,
                  "flex-direction": "row",
                  "notitle": true,
                  "condition": {
                    "functionBody": "return model.accessories?.[arguments[1]]?.commandSync !== undefined"
                  },
                  "items": [
                    {
                      "key": "accessories[].syncSchedule.type",
                      "title": "${config.title.syncSchedule}",
                      "flex": "0 0 auto"
                    },
                    {
                      "key": "accessories[].syncSchedule.time",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.syncSchedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.units",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return ['TIMEOUT', 'INTERVAL'].includes(model.accessories?.[arguments[1]]?.syncSchedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.cron",
                      "flex": "0 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.syncSchedule?.type === 'CRON';"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.cronCustom",
                      "flex": "1 0 auto",
                      "condition": {
                          "functionBody": "return model.accessories?.[arguments[1]]?.syncSchedule?.cron === 'CRON_CUSTOM';"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.offset",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.syncSchedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.latitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.syncSchedule?.type);"
                      }
                    },
                    {
                      "key": "accessories[].syncSchedule.longitude",
                      "flex": "0 1 auto",
                      "condition": {
                          "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.syncSchedule?.type);"
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}