Schemas

Treat dispenser

Treat-dispenser state and a bounded portions-based dispense action.

https://hometruth.ai/schemas/treat-dispenser · TreatDispenser

Instances

No devices currently use this schema.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://hometruth.ai/schemas/treat-dispenser",
  "title": "Treat dispenser",
  "description": "A treat dispenser's observable state and bounded dispensing actions.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "state": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "availability": {
          "enum": [
            "online",
            "offline",
            "degraded",
            "unknown"
          ]
        },
        "observedAt": {
          "type": "string",
          "format": "date-time"
        },
        "foodLevelPercent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "lowFood": {
          "type": "boolean"
        },
        "jammed": {
          "type": "boolean"
        },
        "lastDispensedAt": {
          "type": "string",
          "format": "date-time"
        },
        "lastPortions": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        }
      },
      "required": [
        "availability"
      ]
    },
    "actions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "dispense": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "minimumPortions": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "maximumPortions": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "step": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            },
            "portionSizeGrams": {
              "type": "number",
              "exclusiveMinimum": 0,
              "maximum": 10000
            },
            "confirmation": {
              "enum": [
                "none",
                "confirm"
              ]
            }
          },
          "required": [
            "minimumPortions",
            "maximumPortions",
            "step"
          ]
        },
        "playCall": {
          "type": "object",
          "additionalProperties": false,
          "properties": {}
        },
        "setSchedule": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "maxEntries": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000
            }
          },
          "required": [
            "maxEntries"
          ]
        }
      },
      "required": [
        "dispense"
      ]
    }
  },
  "required": [
    "id",
    "actions"
  ]
}