Инструменты пользователя

Инструменты сайта


iot:software:node-red:flows:breakers_control

Подключение Zigbee выключателей через Node-RED

Этот простой и универсальный поток соединяет Zigbee-выключатели1) на базе чипа Tuya ZS3L2), добавленные в систему, с оконечными устройствами3).

Описание работы цепочки

Настройки каждого выключателя и оконечного устройства вводятся в соответствующем узле в формате JSON4) и автоматически5) загружаются в потоковый контекст при запуске Node-RED. Также, для каждого выключателя необходимо добавить свой узел «mqtt in».

Далее ожидается появление сообщений на этих узлах, поле чего следующий узел формирует исходящее сообщение, опираясь на входящее сообщение и настройки и… это, собственно, все. =)

Пример конфигурации

Путь сохранения конфигурации выключателя settings.switches.zigbee2mqtt/0x604a11f4fe532d916) в потоковый контекст.

{
    "1_single": {
        "module": "bedroomlighting/nightlight_FB4F02",
        "message": "TOGGLE",
        "postfix": "cmnd/POWER"
    },
    "2_single": {
        "module": "bedroomlighting/warmlight_FB4476",
        "message": "TOGGLE",
        "postfix": "cmnd/POWER"
    },
    "3_single": {
        "module": "bedroomlighting/coldlight_583C3D",
        "message": "TOGGLE",
        "postfix": "cmnd/POWER"
    },
    "1_double": {
        "module": "bedroomlighting/floorlamp_E96B5E",
        "message": "TOGGLE",
        "postfix": "cmnd/POWER"
    },
    "2_hold": {
        "module": "bedroomlighting/tasmotas",
        "message": "OFF",
        "postfix": "cmnd/POWER"
    },
    "3_double": {
        "module": "bedroomlighting/tablelamp_EA2D25",
        "message": "TOGGLE",
        "postfix": "cmnd/POWER"
    }
}

Код для загрузки

breakers-control.json
[
    {
        "id": "1615a524.4ebbdb",
        "type": "tab",
        "label": "Дополнительные выключатели",
        "disabled": false,
        "info": ""
    },
    {
        "id": "f365a280.f3f13",
        "type": "mqtt in",
        "z": "1615a524.4ebbdb",
        "name": "Вентиляция в ванной",
        "topic": "zigbee2mqtt/0x60a423f5fe45ff1d",
        "qos": "2",
        "datatype": "json",
        "broker": "8745b931.133868",
        "x": 160,
        "y": 100,
        "wires": [
            [
                "9b443b93.1934b8"
            ]
        ]
    },
    {
        "id": "8d36f3a1.0a167",
        "type": "mqtt out",
        "z": "1615a524.4ebbdb",
        "name": "Публикация сообщения",
        "topic": "",
        "qos": "",
        "retain": "",
        "broker": "8745b931.133868",
        "x": 690,
        "y": 220,
        "wires": []
    },
    {
        "id": "9b443b93.1934b8",
        "type": "change",
        "z": "1615a524.4ebbdb",
        "name": "Подготовка сообщения",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "($lookup($flowContext(\"settings.\" & _topic & \".\" & payload.action), \"module\")) & \"/\" & ($lookup($flowContext(\"settings.\" & _topic & \".\" & payload.action), \"postfix\"))",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$lookup($flowContext(\"settings.\" & _topic & \".\" & payload.action), \"message\")",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 410,
        "y": 160,
        "wires": [
            [
                "cbef88b2.f266f8"
            ]
        ]
    },
    {
        "id": "a9d83933.901e08",
        "type": "mqtt in",
        "z": "1615a524.4ebbdb",
        "name": "Освещение в спальне",
        "topic": "zigbee2mqtt/0x60a423f5fe532d91",
        "qos": "2",
        "datatype": "json",
        "broker": "8745b931.133868",
        "x": 160,
        "y": 160,
        "wires": [
            [
                "9b443b93.1934b8"
            ]
        ]
    },
    {
        "id": "758f372c.34b8c8",
        "type": "inject",
        "z": "1615a524.4ebbdb",
        "name": "Инициализация потока",
        "props": [],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "x": 170,
        "y": 40,
        "wires": [
            [
                "7f7d8664.2a9768"
            ]
        ]
    },
    {
        "id": "7f7d8664.2a9768",
        "type": "change",
        "z": "1615a524.4ebbdb",
        "name": "Ввод настроек выключателей",
        "rules": [
            {
                "t": "set",
                "p": "settings.zigbee2mqtt/0x60a423f5fe45ff1d",
                "pt": "flow",
                "to": "{\"single\":{\"module\":\"ventilation_000457\",\"message\":\"TOGGLE\",\"postfix\":\"cmnd/POWER1\"},\"hold\":{\"module\":\"ventilation_000457\",\"message\":\"TOGGLE\",\"postfix\":\"cmnd/POWER3\"}}",
                "tot": "json"
            },
            {
                "t": "set",
                "p": "settings.zigbee2mqtt/0x60a423f5fe532d8",
                "pt": "flow",
                "to": "{\"1_single\":{\"module\":\"ventilation_000457\",\"message\":\"TOGGLE\",\"postfix\":\"cmnd/POWER1\"},\"2_hold\":{\"module\":\"ventilation_000457\",\"message\":\"TOGGLE\",\"postfix\":\"cmnd/POWER3\"}}",
                "tot": "json"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 670,
        "y": 40,
        "wires": [
            []
        ]
    },
    {
        "id": "cbef88b2.f266f8",
        "type": "switch",
        "z": "1615a524.4ebbdb",
        "name": "Отсечка пустых сообщений",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "nempty"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 680,
        "y": 160,
        "wires": [
            [
                "8d36f3a1.0a167"
            ]
        ]
    },
    {
        "id": "8745b931.133868",
        "type": "mqtt-broker",
        "name": "localhost",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    }
]

Дисклеймер

  • Использование материалов данной базы знаний разрешено на условиях лицензии, указанной внизу каждой страницы! При использовании материалов активная гиперссылка на соответствующую страницу данной базы знаний обязательна!
  • Автор не несет и не может нести какую либо ответственность за последствия использования материалов, размещенных в данной базе знаний. Все материалы предоставляются по принципу «как есть». Используйте их исключительно на свой страх и риск.
  • Все высказывания, мысли или идеи автора, размещенные в материалах данной базе знаний, являются исключительно его личным субъективным мнением и могут не совпадать с мнением читателей!
  • При размещении ссылок в данной базе знаний на интернет-страницы третьих лиц автор не несет ответственности за их техническую функциональность (особенно отсутствие вирусов) и содержание! При обнаружении таких ссылок, можно и желательно сообщить о них в комментариях к соответствующей статье.
1)
К примеру такие.
2)
Возможно и на других – не проверял.
4)
Пример ниже и в свойствах узла.
5)
Ну или вручную, если запустить узел «inject».
6)
Жирным выделен MQTT-топик выключателя, откуда поступают команды.

Обсуждение

Ваш комментарий:
Q X​ P A R P B E Q J C Y W D E F
 
Последнее изменение: 2022/02/16 21:26 — Николай Солошин