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

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

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

АТРИБУТЫ УСТРОЙСТВА

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

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

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

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

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

item_name Нить

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

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

item_name_synonyms Множество

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

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

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

Синонимы для выдаваемого товара на заданном языке. Для обеспечения резервного языка требуется хотя бы один товар со значением параметра lang , равным en .

synonyms Множество

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

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

[ item, ... ] Нить

Имя-синоним. Для обеспечения резервного языка требуется хотя бы один элемент со lang en .

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 — когда пользователю приходится ждать, прежде чем запрошенный товар или сумма будут успешно выданы (например, кран будет подавать горячую воду, но пользователю необходимо дождаться, пока вода нагреется, прежде чем начнется подача).