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

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


iot:software:node-red:flows:breakers_control

Это старая версия документа!


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

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

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

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

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

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

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».

Обсуждение

Ваш комментарий:
I B Y P Q E M​ W S M Y P G J K᠎ O
 
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)