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

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


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

Сохранение данных с барометра в Node-RED

Это зависимое дополнение к потоку «Сохранение телеметрии в Node-RED», рассчитывающее барическую тенденцию и подготавливающую данные, поступающие с датчика BME680, к сохранению в базу SQLite.

:!: Для работы цепочки необходимо, чтобы название таблицы в узле «Подготовка запроса» совпадало с соответствующим названием, указанным в узле «Именование таблиц».

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

barometer-telemetry-saving.json
[
    {
        "id": "c23c9680.557e48",
        "type": "mqtt in",
        "z": "551f568e.e62c18",
        "name": "Датчик на балконе",
        "topic": "barometer_XXXXXX/tele/SENSOR",
        "qos": "2",
        "datatype": "json",
        "broker": "8745b931.133868",
        "x": 150,
        "y": 100,
        "wires": [
            [
                "bd9802f4.d7072"
            ]
        ]
    },
    {
        "id": "bd9802f4.d7072",
        "type": "change",
        "z": "551f568e.e62c18",
        "name": "Подготовка запроса",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "SELECT pressureSt FROM balcony WHERE timestamp <= datetime('now', '+10 hours', '-3 hours') ORDER BY timestamp DESC LIMIT 1",
                "tot": "str"
            },
            {
                "t": "move",
                "p": "payload",
                "pt": "msg",
                "to": "originalpayload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 420,
        "y": 100,
        "wires": [
            [
                "cfb7d3fb.f8c07"
            ]
        ],
        "info": "Запрашиваем из базы данных только одну запись, сделанную 3 часа назад -- отнимаем от текущего времени 3 часа.\n\nТ.к. данные в базу пишутся в UTC+10:00, необходимо эту разницу компенсировать -- для этого добавляем 10 часов."
    },
    {
        "id": "cfb7d3fb.f8c07",
        "type": "sqlite",
        "z": "551f568e.e62c18",
        "mydb": "dbb6e10a.23844",
        "sqlquery": "msg.topic",
        "sql": "",
        "name": "Запрос к базе данных",
        "x": 700,
        "y": 100,
        "wires": [
            [
                "d7825b78.bbf818"
            ]
        ]
    },
    {
        "id": "d7825b78.bbf818",
        "type": "change",
        "z": "551f568e.e62c18",
        "name": "Расчет тенденции",
        "rules": [
            {
                "t": "set",
                "p": "originalpayload.pressure_bt",
                "pt": "msg",
                "to": "( originalpayload.pressure_st - ( $type(payload[0].pressureSt) = \"number\" ? payload[0].pressureSt : originalpayload.pressure_st ) ) ~> $round(2)",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "_topic",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "_topic",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 150,
        "y": 160,
        "wires": [
            [
                "20b71be1.6e7934"
            ]
        ],
        "info": "Считаем барическую тенденцию за 3 предшествующих часа. Если данных нет, возвращаем 0."
    },
    {
        "id": "20b71be1.6e7934",
        "type": "link out",
        "z": "551f568e.e62c18",
        "name": "",
        "links": [
            "ec90713c.79299"
        ],
        "x": 305,
        "y": 160,
        "wires": []
    },
    {
        "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": ""
    },
    {
        "id": "dbb6e10a.23844",
        "type": "sqlitedb",
        "db": "c:\\noderedDB\\telemetry.db",
        "mode": "RWC"
    }
]

Дисклеймер

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

Обсуждение

Ваш комментарий:
Z E P Q I B C​ Y O P H I N F A L
 
Последнее изменение: 2022/02/28 19:15 — Николай Солошин