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

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


iot:software:node-red:flows:telemetry_saving:humidifier

Цепочка узлов для увлажнителя Proscenic 808c

Небольшое дополнение к потоку Сохранение телеметрии в Node-RED, позволяющее сохранять телеметрию с комнатного увлажнителя воздуха в базу данных SQLite.

:!: Для работы цепочки, помимо основного потока, необходимо прошить под Tasmota и соответствующе настроить увлажнитель.

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

Первый узел подключается к MQTT-брокеру и следит за данными, поступающими с датчика, следующий узел отбирает только сообщения, содержащие в себе полный набор данных. т.к. увлажнитель периодически передает данные частично1). Далее узел проверяет, чтобы данные отличались от предыдущих и пропускает только изменившиеся. Последний узел форматирует данные.

Цепочка подключается к узлу «Перемещение топика и данных». Также нужно добавить название таблицы в узел «Определение названий таблиц».

Дополнение

Если в потоке есть сторожевой таймер, нужно заменить узел «rbe»2) на «delay»3) и установить в нем желаемую периодичность записи показаний4). Это необходимо в виду того, что, с одной стороны, увлажнитель передает телеметрию каждые 30 секунд, а с другой – фактические показания могут не меняться достаточно долгое время из-за чего «rbe» не пропускает сообщения и ложно срабатывает watchdog. При замене на «delay» данные будут поступать стабильно, пока увлажнитель в сети, а watchdog будет срабатывать только при действительной неполадке.

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

Основной

humidifier-telemetry-saving.json
[
    {
        "id": "eaecb7e3.ffea28",
        "type": "mqtt in",
        "z": "551f568e.e62c18",
        "name": "Датчик в увлажнителе",
        "topic": "humidifier_00896D/tele/SENSOR",
        "qos": "2",
        "datatype": "json",
        "broker": "8745b931.133868",
        "x": 160,
        "y": 100,
        "wires": [
            [
                "b3347c22.52002"
            ]
        ]
    },
    {
        "id": "b3347c22.52002",
        "type": "switch",
        "z": "551f568e.e62c18",
        "name": "Отбор полных сообщений",
        "property": "payload.Time",
        "propertyType": "msg",
        "rules": [
            {
                "t": "nnull"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 180,
        "y": 160,
        "wires": [
            [
                "a1e4d9f0.d69908"
            ]
        ]
    },
    {
        "id": "a1e4d9f0.d69908",
        "type": "rbe",
        "z": "551f568e.e62c18",
        "name": "Ограничение потока",
        "func": "rbe",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload.TuyaSNS",
        "x": 160,
        "y": 220,
        "wires": [
            [
                "df98b79a.b09d58"
            ]
        ],
        "info": "Пропускает только, если данные изменились."
    },
    {
        "id": "df98b79a.b09d58",
        "type": "template",
        "z": "551f568e.e62c18",
        "name": "Форматирование нагрузки",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "{\n\"battery\": null,\n\"humidity\": {{{payload.TuyaSNS.Humidity}}},\n\"linkquality\": null,\n\"temperature\": {{{payload.TuyaSNS.Temperature}}},\n\"pressure\": null\n}",
        "output": "json",
        "x": 180,
        "y": 280,
        "wires": [
            [
                "d6aeb8ba.178f68"
            ]
        ]
    },
    {
        "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": ""
    }
]

Дополнительный

humidifier-telemetry-saving-addon.json
[
    {
        "id": "8708b0ca.dd485",
        "type": "delay",
        "z": "551f568e.e62c18",
        "name": "Ограничение потока",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "15",
        "rateUnits": "minute",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "x": 160,
        "y": 220,
        "wires": [
            [
                "df98b79a.b09d58"
            ]
        ]
    }
]
1)
К примеру, только температуру или только влажность
2)
В примере называется «Ограничение потока».
3)
Код узла тут.
4)
15 минут, мне кажется, вполне достаточно.

Обсуждение

Ваш комментарий:
P A C X J C P V U W Q N S X K V
 
Последнее изменение: 2022/02/28 18:52 — Николай Солошин