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

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


iot:software:node-red:flows:telemetry_saving:narodmon:mqtt

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


Передача данных через MQTT

Это нативный для Node-RED вариант передачи данных в проект «Народный мониторинг», т.к. для его реализации не требуются дополнительные узлы. Однако, с виду он немного более туманный, ибо в официальной инструкции написано что-то не до конца понятное… Но это только так кажется… если разобраться, что к чему. :-\

:!: Пример использования специального узла и более подробное описание цепочки узлов тут. В этой же статье рассмотрены только изменения относительно первого варианта.

Описание изменений в цепочке

Относительно вышеуказанного варианта, изменились узлы «Подготовка данных» и «Отправка данных».

Подготовка данных

Теперь в поле «Шаблон» сообщение отформатировано в виде JSON-строки, тогда как раньше был простой текст, а параметр «Вывести как», соответственно, изменен на JSON.

Отправка данных

Теперь, вместо «node-red-narodmon», используется родной узел «mqtt out» со следующими настройками:

Путь до параметра Значение
Сервер → Соединение → Сервер: narodmon.ru
ID клиента: XX:XX:XX:XX:XX:XX1)
Безопасность → Имя пользователя: <логин в проекте>
Пароль: <личный код>2)
Тема: <логин в проекте>/<название устройства>/json3)

Никаких других обязательных данных указывать или менять не нужно! Не знаю, почему такое расхождение с инструкцией на сайте проекта…

Изменение в настройках устройства

Если до этого использовали какой-либо другой вариант передачи данных на сервер, то после внесения изменений в поток, необходимо на сайте в свойствах устройства изменить протокол на MQTT, иначе данные будут игнорироваться!

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

narodmon-mqtt.json
[
    {
        "id": "f279413e.d2c8e",
        "type": "delay",
        "z": "551f568e.e62c18",
        "name": "Ограничение 5 минут",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "5",
        "rateUnits": "minute",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "x": 160,
        "y": 580,
        "wires": [
            [
                "ef5cb94a.abad08",
                "15515561.bf4ccb"
            ]
        ]
    },
    {
        "id": "ef5cb94a.abad08",
        "type": "template",
        "z": "551f568e.e62c18",
        "name": "Подготовка данных",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "{ \"T1\": {{{payload.temperature}}}, \"H1\": {{{payload.humidity}}} }",
        "output": "json",
        "x": 440,
        "y": 580,
        "wires": [
            [
                "8332b0ad.531ea"
            ]
        ]
    },
    {
        "id": "d8544fd0.c205f",
        "type": "link in",
        "z": "551f568e.e62c18",
        "name": "С MQTT",
        "links": [
            "c8c40256.0249b"
        ],
        "x": 75,
        "y": 640,
        "wires": [
            [
                "f279413e.d2c8e"
            ]
        ]
    },
    {
        "id": "15515561.bf4ccb",
        "type": "trigger",
        "z": "551f568e.e62c18",
        "name": "Вброс последнего сообщения",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "28",
        "extend": true,
        "overrideDelay": false,
        "units": "min",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 290,
        "y": 640,
        "wires": [
            [
                "ef5cb94a.abad08",
                "c54dc60b.a15a28"
            ]
        ],
        "info": "Народный мониторинг требует передачи данных не реже раза в 30 мин, иначе выставляет санкции!.. а Sonoff SNZB-02, почему-то, периодически не передает данные дольше... Тут, либо у меня косяк какой-то, либо реально данные не меняются и он молчит.\n\nПоэтому был добавлен этот триггер - если данные не отправляются больше установленной задержки (меньше 30 мин), он вбрасывает последнее поступившее сообщение.\n\nПока данные периодические передаются, он постоянно продлевает таймер."
    },
    {
        "id": "c54dc60b.a15a28",
        "type": "change",
        "z": "551f568e.e62c18",
        "name": "Подготовка письма",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "\"Данные телеметрии были вброшены в \" & $now('[H01]:[m01]:[s01] [D01].[M01].[Y0001]', '+1000') & \"!\"",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "\"Для соответствия правилам портала \\\"Народный мониторинг\\\", были вброшены следующие данные из последнего сообщения:\\n\\n1) температура: \" & payload.temperature & \";\\n2) влажность: \" & payload.humidity & \".\"",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 640,
        "wires": [
            [
                "63bb51cd.8a1fc"
            ]
        ]
    },
    {
        "id": "63bb51cd.8a1fc",
        "type": "link out",
        "z": "551f568e.e62c18",
        "name": "Отправка почты",
        "links": [
            "7c896fde.621af"
        ],
        "x": 775,
        "y": 640,
        "wires": []
    },
    {
        "id": "8332b0ad.531ea",
        "type": "mqtt out",
        "z": "551f568e.e62c18",
        "name": "Передача данных",
        "topic": "user/device/json",
        "qos": "",
        "retain": "",
        "broker": "72c3b2f6.2ae94c",
        "x": 710,
        "y": 580,
        "wires": []
    },
    {
        "id": "72c3b2f6.2ae94c",
        "type": "mqtt-broker",
        "name": "narodmon",
        "broker": "narodmon.ru",
        "port": "1883",
        "clientid": "XX:XX:XX:XX:XX:XX",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    }
]
1)
MAC-адрес устройства.
2)
4 цифры, указанные тут в соответствующем разделе.
3)
К примеру «nikolays/Sonoff SNZB-02/json». Можно с пробелами.

Обсуждение

Ваш комментарий:
W A X N G U P E V M N G W D O U
 
Последнее изменение: 2022/02/16 21:20 — Николай Солошин