{
  "pluginAlias": "August",
  "pluginType": "platform",
  "singular": true,
  "customUi": true,
  "customUiPath": "./dist/homebridge-ui",
  "headerDisplay": "<p align='center'><img width='100px' src='https://user-images.githubusercontent.com/9875439/102681754-ac2eb800-4189-11eb-8e17-7c47c804484b.png'></p>\n\nThe **August** plugin allows you to control August Devices. \n\nTo get started link your August Account.\n\n1. Input your August E-mail/Phone Number into the August Account Info.\n\n2.Restart Homebridge to receive an August Validate Code.\n\n3. Input your Validate Code into the August Account Info.\n\n4. Finally Restart Homebridge.",
  "footerDisplay": "Please raise any issues on our [project page](https://github.com/donavanbecker/homebridge-august/issues).\n\nIf you would like to have other August Devices added to this plugin fill out [Feature Request Form](https://github.com/donavanbecker/homebridge-august/issues/new?assignees=&labels=&template=feature_request.md).",
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string",
        "title": "Name",
        "default": "August"
      },
      "credentials": {
        "type": "object",
        "properties": {
          "augustId": {
            "title": "August ID",
            "type": "string",
            "placeholder": "E-mail or Phone Number",
            "x-schema-form": {
              "type": "username"
            }
          },
          "password": {
            "title": "August Password",
            "type": "string",
            "placeholder": "Password",
            "x-schema-form": {
              "type": "password"
            },
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId);"
            }
          },
          "countryCode": {
            "type": "string",
            "title": "Country Code",
            "placeholder": "US",
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password);"
            },
            "pattern": "^[A-Z]{2}$",
            "patternErrorMessage": "Must be a valid country code",
            "minLength": 2,
            "maxLength": 2,
            "validation": "countryCode",
            "enum": [
              "US",
              "CA",
              "GB",
              "DE",
              "AT",
              "IE",
              "ES",
              "FR",
              "BE",
              "NL",
              "LU",
              "CH",
              "IT",
              "JP",
              "CN",
              "SG",
              "AU",
              "NZ",
              "HK",
              "KR",
              "TW",
              "MX",
              "BR",
              "AR",
              "CL",
              "CO",
              "PE",
              "UY",
              "CR",
              "EC",
              "SV",
              "GT",
              "HN",
              "NI",
              "PA",
              "PY",
              "PR",
              "VE",
              "IN",
              "AE",
              "QA",
              "SA",
              "KW",
              "BH",
              "OM",
              "EG",
              "ZA",
              "RU",
              "TR",
              "IL",
              "DK",
              "SE",
              "NO",
              "FI",
              "PL",
              "CZ",
              "SK",
              "PT",
              "GR",
              "HU",
              "RO",
              "BG",
              "HR",
              "SI",
              "RS",
              "LV",
              "LT",
              "EE",
              "IS",
              "MT",
              "CY"
            ],
            "x-schema-form": {
              "type": "select"
            }
          },
          "apiKey": {
            "type": "string",
            "title": "apiKey",
            "placeholder": "7f0dd80d-8531-4f8d-ba9b-3b0c9e6f8e4b",
            "x-schema-form": {
              "type": "apiKey"
            },
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password && model.credentials.countryCode);"
            }
          },
          "pnSubKey": {
            "type": "string",
            "title": "pnSubKey",
            "placeholder": "sub-c-91d9b2e2-8b48-11e9-8b87-0619f8945a4f",
            "x-schema-form": {
              "type": "pnSubKey"
            },
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password && model.credentials.countryCode);"
            }
          },
          "installId": {
            "title": "Install ID",
            "type": "string",
            "placeholder": "00000000-0000-0000-0000-000000000000",
            "x-schema-form": {
              "type": "installId"
            },
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password && model.credentials.countryCode && !model.credentials.isValidated);"
            },
            "pattern": "^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$",
            "patternErrorMessage": "Must be a valid UUID",
            "minLength": 36,
            "maxLength": 36,
            "validation": "uuid",
            "notitle": true,
            "description": "This is a unique identifier for your device. It is generated by the plugin and is not configurable."
          },
          "validateCode": {
            "title": "August  Verification Code",
            "type": "string",
            "x-schema-form": {
              "type": "one-time-code"
            },
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password && model.credentials.countryCode && !model.credentials.isValidated);"
            },
            "pattern": "^[0-9]{6}$",
            "patternErrorMessage": "Must be a valid verification code",
            "minLength": 6,
            "maxLength": 6,
            "validation": "verificationCode",
            "description": "This is a unique verification code that is sent to your Email or Phone on your August account. It is generated by the plugin."
          },
          "isValidated": {
            "title": "Validated",
            "type": "boolean",
            "default": false,
            "condition": {
              "functionBody": "return (model.credentials && model.credentials.augustId && model.credentials.password && model.credentials.countryCode);"
            },
            "description": "This indicates if the verification code has been validated. It is generated by the plugin and is not configurable.",
            "x-schema-form": {
              "type": "checkbox"
            }
          },
          "notice": {
            "title": "Notice",
            "type": "string",
            "default": "Keep your tokens a secret!"
          }
        },
        "required": [
          "augustId",
          "password",
          "countryCode",
          "validateCode",
          "notice"
        ]
      },
      "options": {
        "type": "object",
        "properties": {
          "devices": {
            "type": "array",
            "items": {
              "title": "Devices",
              "type": "object",
              "properties": {
                "lockId": {
                  "title": "Lock ID",
                  "type": "string",
                  "placeholder": "TSSQ97FRDMX7TPGU3Z2HWNRDPQXJ9YSM"
                },
                "configLockName": {
                  "title": "Device Name",
                  "type": "string",
                  "placeholder": "August",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId);"
                  }
                },
                "hide_device": {
                  "title": "Hide Device",
                  "type": "boolean",
                  "description": "If true then devices that are reported as offline will be shown as off in HomeKit.",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId);"
                  }
                },
                "lock": {
                  "type": "object",
                  "properties": {
                    "hide_lock": {
                      "title": "Hide Lock",
                      "description": "Allows you to hide the lock and only show the Contact Sensor. Useful for locks that already support HomeKit.",
                      "type": "boolean",
                      "condition": {
                        "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                      }
                    },
                    "hide_contactsensor": {
                      "title": "Hide Lock's Contact Sensor",
                      "type": "boolean",
                      "condition": {
                        "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                      }
                    }
                  }
                },
                "overrideHomeKitEnabled": {
                  "title": "Override HomeKit Enabled",
                  "type": "boolean",
                  "description": "By default, devices tht are HomeKit enabled will be shown in HomeKit. If you want to override this, set this to true and the device will display in the Home app.",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "firmware": {
                  "title": "Firmware Override",
                  "type": "string",
                  "placeholder": "1.2.8",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "refreshRate": {
                  "title": "Device Refresh Rate",
                  "type": "number",
                  "placeholder": 300,
                  "description": "Indicates the number of seconds between polls of August API.",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "updateRate": {
                  "title": "Device Update Rate",
                  "type": "number",
                  "placeholder": 1,
                  "description": "Indicates the number of seconds between pushes to August API.",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "pushRate": {
                  "title": "Device Push Rate",
                  "type": "number",
                  "placeholder": 1,
                  "description": "Indicates the number of seconds between pushes to August API.",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "external": {
                  "title": "External Accessory",
                  "type": "boolean",
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                },
                "logging": {
                  "title": "Device Logging Override Setting",
                  "type": "string",
                  "required": true,
                  "default": "",
                  "oneOf": [
                    {
                      "title": "Default Logging",
                      "enum": [
                        ""
                      ]
                    },
                    {
                      "title": "Standard Logging",
                      "enum": [
                        "standard"
                      ]
                    },
                    {
                      "title": "No Logging",
                      "enum": [
                        "none"
                      ]
                    },
                    {
                      "title": "Debug Logging",
                      "enum": [
                        "debug"
                      ]
                    }
                  ],
                  "condition": {
                    "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].lockId && !model.options.devices[arrayIndices].hide_device);"
                  }
                }
              },
              "required": [
                "lockId",
                "configLockName",
                "logging"
              ]
            },
            "uniqueItems": true
          },
          "refreshRate": {
            "title": "Refresh Rate",
            "type": "number",
            "placeholder": 360,
            "description": "Indicates the number of seconds between polls of August API."
          },
          "pushRate": {
            "title": "Push Rate",
            "type": "number",
            "placeholder": 1,
            "description": "Indicates the number of seconds between pushes to August API."
          },
          "logging": {
            "title": "Logging Setting",
            "type": "string",
            "required": true,
            "default": "",
            "oneOf": [
              {
                "title": "Default Logging",
                "enum": [
                  ""
                ]
              },
              {
                "title": "Standard Logging",
                "enum": [
                  "standard"
                ]
              },
              {
                "title": "No Logging",
                "enum": [
                  "none"
                ]
              },
              {
                "title": "Debug Logging",
                "enum": [
                  "debug"
                ]
              }
            ]
          }
        }
      }
    },
    "required": [
      "name",
      "credentials"
    ]
  },
  "layout": [
    {
      "type": "fieldset",
      "title": "August Account Info",
      "expandable": true,
      "expanded": false,
      "items": [
        "credentials.augustId",
        "credentials.password",
        "credentials.validateCode",
        {
          "type": "fieldset",
          "title": "Advanced August Account Settings",
          "expandable": true,
          "expanded": false,
          "items": [
            "credentials.countryCode",
            "credentials.isValidated",
            "credentials.installId"
          ]
        }
      ]
    },
    {
      "type": "fieldset",
      "title": "August Device Settings",
      "expandable": true,
      "expanded": false,
      "items": [
        {
          "key": "options.devices",
          "notitle": false,
          "type": "tabarray",
          "title": "{{ value.configLockName || value.lockId || 'New Lock Device' }}",
          "expandable": true,
          "expanded": false,
          "orderable": false,
          "items": [
            "options.devices[].configLockName",
            "options.devices[].lockId",
            "options.devices[].hide_device",
            "options.devices[].overrideHomeKitEnabled",
            "options.devices[].lock.hide_lock",
            "options.devices[].lock.hide_contactsensor",
            "options.devices[].firmware",
            {
              "key": "options.devices[].refreshRate",
              "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the August API. This interval applies only to this specific device. Set to </em>0<em class='primary-text'> if you would like to just receive updates from the August API</em>"
            },
            {
              "key": "options.devices[].pushRate",
              "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the August API for this specific device.</em>"
            },
            "options.devices[].external",
            "options.devices[].logging"
          ]
        }
      ]
    },
    {
      "type": "fieldset",
      "title": "Advanced Settings",
      "expandable": true,
      "expanded": false,
      "items": [
        {
          "key": "options.refreshRate",
          "description": "<em class='primary-text'>Specifies the interval, in seconds, for retrieving the latest device status from the August API.</em>"
        },
        {
          "key": "options.pushRate",
          "description": "<em class='primary-text'>Specifies the interval, in seconds, between pushes to the August API.</em>"
        },
        "options.logging"
      ]
    }
  ]
}