Эта цепочка узлов является частью потока «Сохранение телеметрии», но может использоваться отдельно, если заменить узел «link in» узлом «mqtt in».
Помимо Node-RED, в процессе участвует датчик температуры и влажности Sonoff SNZB-02, Zigbee-анализатор CC2531, локальная служба Zigbee2MQTT и некий дополнительный софт, о котором упомянуто в этих статьях.
Если хотите использовать для передачи данных протокол MQTT, дополнительно смотрите эту статью.
Если использовать эту цепочку отдельно от основного потока, указанный выше подпоток не входит в состав кода ниже и его нужно загрузить и подключить отдельно вместо узла «link out»!
Соответствующий узел подключается к MQTT-брокеру и следит за данными, поступающими с наружного датчика. Следующий узел ограничивает поток сообщений 1 в 5 минут1). Далее, данные подготавливаются и последним узлом отправляются в сервис.
Помимо этого, есть триггер, который следит за потоком сообщений и, если нет сообщений больше установленного промежутка2), вбрасывает последнее полученное и отправляет уведомление на почту. Если сообщения есть, каждый раз продлевает таймер. Это сделано, чтобы при непредвиденных ситуациях иметь чуть больше времени для разбора ситуации. В общем, небольшая страховка.
[ { "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": "T={{{payload.temperature}}}&H={{{payload.humidity}}}", "output": "str", "x": 440, "y": 580, "wires": [ [ "b005735a.91059" ] ] }, { "id": "b005735a.91059", "type": "narodmon", "z": "551f568e.e62c18", "name": "Передача данных", "narodmonServer": "9043fac.1f7e308", "nodegroup": "", "x": 710, "y": 580, "wires": [] }, { "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": "9043fac.1f7e308", "type": "narodmon-server", "server": "http://narodmon.ru/", "name": "user" } ]
Обсуждение