Automation: Условия

Материал из HOMEd Wiki

Условие "property"

Это условие считается выполненным, если значение выбранного свойства соответствует заданным критериям. Примеры описания условия:

...
"conditions":
[
  {
    "type": "property",
    "endpoint": "zigbee/hallLight",
    "property": "status",
    "equals": "off"
  },
  {
    "type": "property",
    "endpoint": "zigbee/outdoorLight",
    "property": "status",
    "differs": "off"
  },
  {
    "type": "property",
    "endpoint": "zigbee/kitchenTemperature",
    "property": "temperature",
    "above": 20
  },
  {
    "type": "property",
    "endpoint": "zigbee/roomHumidity",
    "property": "humidity",
    "below": 40
  },
  {
    "type": "property",
    "endpoint": "zigbee/kitchenCurtain",
    "property": "position",
    "between": [50, 80]
  }
]
...

Поля "equals", "differs", "above", "below" и "between" не могут использоваться в одном условии одновременно.

endpoint

Конечная точка, свойство которой проверяется в условии, описанная в формате "сервис/устройство" или "сервис/устройство/N", где N это номер конечной точки для многоканальных устройств.

По сути, значение этого поля идентично части MQTT-топика с данными от устройства после homed/fd/.

property

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

equals

Условие считается выполненным, если значение свойства равно значению этого поля.

differs

Условие считается выполненным, если значение свойства отлично от значения этого поля.

above

Условие считается выполненным, если числовое значение свойства превышает значение этого поля.

below

Условие считается выполненным, если числовое значение свойства ниже значения этого поля.

between

Условие считается выполненным, если числовое значение свойства находится в диапазоне, описанном в этом поле.

Условие "mqtt"

Это условие считается выполненным, если данные в определенном MQTT-топике соответствуют заданным критериям. Данные топиков, используемых в условиях, кешируются. Примеры описания условия:

...
"conditions":
[
  {
    "type": "mqtt",
    "topic": "some/sensor",
    "equals": false
  },
  {
    "type": "mqtt",
    "topic": "my/topic",
    "property": "number",
    "differs": 13
  },
  {
    "type": "mqtt",
    "topic": "another/sensor",
    "above": 200
  },
  {
    "type": "mqtt",
    "topic": "red/sensor",
    "property": "color",
    "below": 4.4
  },
  {
    "type": "mqtt",
    "topic": "numeric/value",
    "property": "value",
    "between": [1000, 2000]
  }
]
...

Поля "equals", "differs", "above", "below" и "between" не могут использоваться в одном условии одновременно.

topic

MQTT-топик.

property

Если это поле присутствует и заполнено, сервис будет ждать в сообщении JSON-объект и искать в нем соответсвующее свойство. В противном случае в качестве свойства будет использовано само сообщение.

...

Поля "equals", "differs", "above", "below" и "between" работают так же, как в условии "property".

Условие "state"

Это условие считается выполненным, если определенное состояние соответствует заданным критериям. Примеры описания условия:

...
"conditions":
[
  {
    "type": "state",
    "name": "booleanState",
    "equals": false
  },
  {
    "type": "state",
    "name": "someNumber",
    "differs": 42
  },
  {
    "type": "state",
    "name": "otherNumber",
    "above": 100
  },
  {
    "type": "state",
    "name": "customValue",
    "below": 2.5
  },
  {
    "type": "state",
    "name": "bigNumber",
    "between": [300000, 500000]
  }
]
...

Поля "equals", "differs", "above", "below" и "between" не могут использоваться в одном условии одновременно.

name

Название состояния.

...

Поля "equals", "differs", "above", "below" и "between" работают так же, как в условии "property".

Условие "date"

Это условие считается выполненным, если текущая дата соответствует заданным критериям. Даты необходимо указывать в формате "dd.MM". При проверке условия учитывается наступление нового года. Примеры описания условия:

...
"conditions":
[
  {
    "type": "date",
    "equals": "08.03"
  },
  {
    "type": "date",
    "differs": "31.12"
  },
  {
    "type": "date",
    "above": "01.04"
  },
  {
    "type": "date",
    "below": "31.12"
  },
  {
    "type": "date",
    "between": ["01.06", "31.08"]
  }
]
...

Поля "equals", "differs", "above", "below" и "between" не могут использоваться в одном условии одновременно.

equals

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

differs

Условие считается выполненным, если текущая дата отлична от значения этого поля.

above

Условие считается выполненным, если текущая дата находится между значением этого поля и началом нового года.

below

Условие считается выполненным, если текущая дата находится между началом текущего года и значением этого поля.

between

Условие считается выполненным, если текущая дата находится в диапазоне, описанном в этом поле.

Условие "time"

Это условие считается выполненным, если текущее время суток соответствует заданным критериям. Время необходимо указывать в формате "hh:mm". Вместо указания конкретного времени можно использовать ключевые слова sunrise и sunset, которые будут инерпретироваться как время рассвета и заката соответственно, а так же можно корректировать эти значения, добавив и или отняв необходимое число минут, например sunset - 10 (за 10 минут до рассвета). При проверке условия учитывается наступление новых суток. Примеры описания условия:

...
"conditions":
[
  {
    "type": "time",
    "equals": "14:30"
  },
  {
    "type": "time",
    "differs": "04:20"
  },
  {
    "type": "time",
    "above": "sunset"
  },
  {
    "type": "time",
    "below": "18:20"
  },
  {
    "type": "time",
    "between": ["09:45", "17:15"]
  }
]
...

Поля "equals", "differs", "above", "below" и "between" не могут использоваться в одном условии одновременно.

equals

Условие считается выполненным, если текущее время суток равно значению этого поля.

differs

Условие считается выполненным, если текущее время суток отлично от значения этого поля.

above

Условие считается выполненным, если текущее время суток находится между значением этого поля и началом новых суток.

below

Условие считается выполненным, если текущее время суток находится между началом текущих суток и значением этого поля.

between

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

Условие "week"

Это условие считается выполненным, если текущий день недели соответсвует одному из назанченных. Примеры описания условия:

...
"conditions":
[
  {
    "type": "week",
    "days": [1, 2, 3, 7]
  }
]
...

days

Массив номеров дней недели, в которые условие будет выполнено, где 1 сответствует понедельнику, а 7 - воскресенью.

Условия "AND", "OR" и "NOT"

Эти условия являются контейнерами для других условий. Условие "AND" будет считаться выполенным, если все вложенные условия будут выполены. Условие "OR" будет считаться выполенным, если хотя бы одно из вложенных условий будет выполено. Условие "NOT" будет считаться выполенным, если ни одно вложенное условие не будет выполено. Условия могут быть вложены друг в друга рекурсивно, сколько угодно раз. Примеры описания условий:

...
"conditions":
[
  {
    "type": "AND",
    "conditions":
    [
      {
        "type": "date",
        ...
      },
      {
        "type": "time",
        ...
      }
    ]
  },
  {
    "type": "OR",
    "conditions":
    [
      {
        "type": "property",
        ...
      },
      {
        "type": "AND",
        "conditions":
        [
          ...
        ]
      }
    ]
  },
  {
    "type": "NOT",
    "conditions":
    [
      {
        "type": "state",
        ...
      },
      {
        "type": "property",
        ...
      }
    ]
  }
]
...

conditions

Массив вложенных условий.