Схема распределения умного дома

action.devices.traits.Dispense — эта особенность принадлежит устройствам, поддерживающим выдачу определенного количества одного или нескольких физических предметов.

Эта функция также поддерживает выдачу заданных настроек, например, «миски для кошачьего корма» для кормушки для домашних животных или «стакана» для крана.

АТРИБУТЫ устройства

Устройства с этой характеристикой могут сообщать следующие атрибуты в рамках операции SYNC . Дополнительные сведения об обработке намерений SYNC см. в разделе Выполнение намерений .

Атрибуты Тип Описание
supportedDispenseItems Множество

Содержит информацию обо всех предметах, которые может выдавать устройство.

[ item, ... ] Объект

Незаменимый предмет.

item_name Нить

Необходимый.

Внутреннее имя выдаваемого товара. Это может быть неудобно для пользователя и используется на всех языках.

item_name_synonyms Множество

Необходимый.

Синонимы названий диспенсеров на каждом поддерживаемом языке.

[ item, ... ] Объект

Синонимы названий выдаваемого товара на данном языке.

synonyms Множество

Необходимый.

Имена-синонимы выдаваемого товара. Синомимы должны включать формы как единственного, так и множественного числа, если это применимо. Первая строка в этом списке должна представлять собой форму множественного числа элемента на этом языке.

[ item, ... ] Нить

Название синонима

lang Нить

Необходимый.

Код языка (ISO 639-1). См. поддерживаемые языки .

supported_units Множество

Необходимый.

Набор единиц измерения, поддерживаемых устройством для этого элемента.

[ item, ... ] Нить

Поддерживаемые единицы.

Поддерживаемые значения:

CENTIMETERS
CUPS
DECILITERS
FLUID_OUNCES
GALLONS
GRAMS
KILOGRAMS
LITERS
MILLIGRAMS
MILLILITERS
MILLIMETERS
NO_UNITS
OUNCES
PINCH
PINTS
PORTION
POUNDS
QUARTS
TABLESPOONS
TEASPOONS
default_portion Объект

Необходимый.

Типичное количество товара, которое может быть выдано.

amount Целое число

Необходимый.

Выданная сумма.

unit Нить

Необходимый.

Раздаточная единица.

supportedDispensePresets Множество

Пресеты, поддерживаемые устройством.

[ item, ... ] Объект

Предустановка.

preset_name Нить

Необходимый.

Внутреннее имя пресета. Это имя может быть неудобным для пользователя и используется на всех языках.

preset_name_synonyms Множество

Необходимый.

Имена-синонимы для предустановок на каждом поддерживаемом языке.

[ item, ... ] Объект

Имена-синонимы для предустановок на данном языке.

synonyms Множество

Необходимый.

Имена-синонимы для предустановки. Синонимы должны включать формы как единственного, так и множественного числа, если это применимо.

[ item, ... ] Нить

Название синонима

lang Нить

Необходимый.

Код языка (ISO 639-1). См. поддерживаемые языки .

Примеры

Диспенсер для воды, поддерживающий устройства для жидкостей с предустановками.

{
  "supportedDispenseItems": [
    {
      "item_name": "Water",
      "item_name_synonyms": [
        {
          "lang": "en",
          "synonyms": [
            "Water"
          ]
        }
      ],
      "supported_units": [
        "TEASPOONS",
        "TABLESPOONS",
        "FLUID_OUNCES",
        "CUPS",
        "PINTS",
        "QUARTS",
        "GALLONS",
        "MILLILITERS",
        "LITERS",
        "DECILITERS"
      ],
      "default_portion": {
        "amount": 2,
        "unit": "CUPS"
      }
    }
  ],
  "supportedDispensePresets": [
    {
      "preset_name": "cat_bowl",
      "preset_name_synonyms": [
        {
          "lang": "en",
          "synonyms": [
            "Cat water bowl",
            "Cat water dish",
            "Cat water cup"
          ]
        }
      ]
    },
    {
      "preset_name": "glass_1",
      "preset_name_synonyms": [
        {
          "lang": "en",
          "synonyms": [
            "Glass of water",
            "Glass"
          ]
        }
      ]
    }
  ]
}

Дозатор корма для домашних животных без предустановок.

{
  "supportedDispenseItems": [
    {
      "item_name": "Treat",
      "item_name_synonyms": [
        {
          "lang": "en",
          "synonyms": [
            "Treats",
            "Dog treats",
            "Treat",
            "Dog treat"
          ]
        }
      ],
      "supported_units": [
        "NO_UNITS"
      ],
      "default_portion": {
        "amount": 1,
        "unit": "NO_UNITS"
      }
    }
  ]
}

СОСТОЯНИЯ устройства

Сущности с этим признаком могут сообщать о следующих состояниях как часть операции QUERY . Дополнительные сведения об обработке намерений QUERY см. в разделе Выполнение намерений .

Штаты Тип Описание
dispenseItems Множество

Состояния предметов, которые может выдавать устройство.

[ item, ... ] Объект

Состояние данного элемента.

itemName Нить

Имя элемента из атрибута item_name .

amountRemaining Объект

Количество этого предмета, оставшегося в устройстве. Если устройство в данный момент выполняет выдачу, здесь сообщается оставшаяся сумма или какая сумма будет после того, как устройство завершит выдачу.

amount Число

Оставшаяся сумма

unit Нить

Единица измерения amount из атрибута supported_units .

amountLastDispensed Объект

Количество предмета, выданного устройством в последний раз. Если устройство в данный момент осуществляет выдачу, оно должно сообщать о количестве, которое оно выдало до текущего количества выдачи.

amount Число

Оставшаяся сумма

unit Нить

Единица измерения amount из атрибута supported_units .

isCurrentlyDispensing логическое значение

Указывает, выдает ли устройство этот предмет в данный момент.

Примеры

Сколько лакомств для собак осталось в моем дозаторе?

{
  "dispenseItems": [
    {
      "itemName": "Dog treats",
      "amountRemaining": {
        "amount": 83,
        "unit": "NO_UNITS"
      },
      "amountLastDispensed": {
        "amount": 2,
        "unit": "NO_UNITS"
      },
      "isCurrentlyDispensing": false
    }
  ]
}

Сколько воды осталось в моем кулере для воды?

{
  "dispenseItems": [
    {
      "itemName": "Water",
      "amountRemaining": {
        "amount": 6.2,
        "unit": "GALLONS"
      },
      "amountLastDispensed": {
        "amount": 1,
        "unit": "CUPS"
      },
      "isCurrentlyDispensing": false
    }
  ]
}

Сколько корма для кошек я давала раньше?

{
  "dispenseItems": [
    {
      "itemName": "cat_food",
      "amountRemaining": {
        "amount": 16.5,
        "unit": "CUPS"
      },
      "amountLastDispensed": {
        "amount": 2.5,
        "unit": "CUPS"
      },
      "isCurrentlyDispensing": false
    }
  ]
}

Кран все еще подает воду?

{
  "dispenseItems": [
    {
      "itemName": "Water",
      "isCurrentlyDispensing": true
    }
  ]
}

amountRemaining и amountLastDispensed должны сообщаться только с использованием одной единицы измерения.

В массиве dispenseItems можно указать несколько элементов. Имя каждого элемента должно быть уникальным и соответствовать элементу в атрибуте supportedDispenseItems .

КОМАНДЫ устройства

Устройства с этой особенностью могут реагировать на следующие команды в рамках операции EXECUTE . Дополнительные сведения об обработке намерений EXECUTE см. в разделе Выполнение намерения .

action.devices.commands.Dispense

Раздать предметы.

Параметры

Полезная нагрузка содержит одно из следующего:

Распределение по количеству.

Параметры Тип Описание
item Нить

Имя выдаваемого предмета из атрибута item_name .

amount Число

Необходимый.

Сумма для выдачи.

unit Нить

Необходимый.

Единица измерения amount из атрибута supported_units .

Распределение по предварительной настройке.

Параметры Тип Описание
presetName Нить

Необходимый.

Имя предустановки для выдачи из атрибута preset_name .

Выдача без параметров.

Параметры Тип Описание

Нет свойств

Примеры

Дайте мне 1 стакан воды.

{
  "command": "action.devices.commands.Dispense",
  "params": {
    "amount": 1,
    "unit": "CUPS",
    "item": "Water"
  }
}

Наполните кошачью миску водой.

{
  "command": "action.devices.commands.Dispense",
  "params": {
    "presetName": "cat_bowl"
  }
}

Раздать воду.

{
  "command": "action.devices.commands.Dispense",
  "params": {}
}

ОШИБКИ устройства

Полный список ошибок и исключений смотрите .
  • dispenseAmountRemainingExceeded : пользователь пытался выдать предмет или сумму с устройства, на котором осталось недостаточно суммы.
  • dispenseAmountAboveLimit : пользователь попытался выдать сумму, выходящую за пределы того, что он может запросить в одном запросе. Это необходимо для предотвращения случайной выдачи чрезмерного количества воды (например, 500 000 чашек воды).
  • dispenseAmountBelowLimit : пользователь попытался выдать предмет или сумму с устройства, которая ниже минимальной суммы, которую оно может выдать.
  • dispenseFractionalAmountNotSupported : пользователь попытался выдать дробное количество предмета, который устройство не может разделить (например, счетные предметы, такие как лакомства для собак, могут не делиться устройством).
  • genericDispenseNotSupported : пользователь пытается выполнить выдачу с устройства, не указав элемент или предустановку, но устройство не поддерживает такую ​​функциональность (например, действие выдачи по умолчанию).
  • dispenseUnitNotSupported : пользователь пытается выдать товар с устройства с единицей измерения, не поддерживаемой в этом случае (например, элемент не предоставлен, поэтому supported_unit validation была пропущена).
  • dispenseFractionalUnitNotSupported : пользователь попытался выдать дробное количество предмета, которое можно разделить, но не для конкретной указанной единицы (например, кран может выдавать 2,7 чашек, но не 2,7 мл).
  • deviceCurrentlyDispensing : пользователи пытаются выдать предмет, но устройство уже выдает.
  • deviceClogged : пользователь пытается выдать предмет, но устройство засорено.
  • deviceBusy : пользователи пытаются выдать элемент, но устройство занято (общее).

ИСКЛЮЧЕНИЯ для устройств

Об этих исключениях можно сообщить как exceptionCode в объекте states вашего ответа:

  • amountRemainingLow — пользователь выдает предмет или сумму с устройства, в результате чего оставшаяся сумма снижается до низкого уровня. Вы несете ответственность за определение «низкого» уровня.
  • userNeedsToWait — когда пользователю приходится ждать, прежде чем запрошенный элемент или сумма будет успешно выдана (например, кран будет подавать горячую воду, но пользователю нужно дождаться, пока вода нагреется, прежде чем она начнет подачу).