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

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