Automation/Database/Conditions: различия между версиями

Материал из HOMEd Wiki
 
(не показана 1 промежуточная версия этого же участника)
Строка 112: Строка 112:
=== <code>property</code> ===
=== <code>property</code> ===
Если это поле присутствует и заполнено, сервис будет ждать в сообщении JSON-объект и искать в нем соответсвующее свойство. В противном случае в качестве свойства будет использовано само сообщение.
Если это поле присутствует и заполнено, сервис будет ждать в сообщении JSON-объект и искать в нем соответсвующее свойство. В противном случае в качестве свойства будет использовано само сообщение.
В качестве имени свойства может быть использована составная строка, например, строка <code class="value">"buildings[3].address"</code> получит значение поля <code class="value">"address"</code> из элемента массива <code class="value">"buildings"</code> c индексом <code class="value">3</code>.


=== <code>...</code> ===
=== <code>...</code> ===

Текущая версия от 11:57, 8 ноября 2024


Условие "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-объект и искать в нем соответсвующее свойство. В противном случае в качестве свойства будет использовано само сообщение.

В качестве имени свойства может быть использована составная строка, например, строка "buildings[3].address" получит значение поля "address" из элемента массива "buildings" c индексом 3.

...

Поля "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

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