首页 > 解决方案 > NODE RED - 如何从 MQTT 获取 payload_raw 值并保存到 MySql

问题描述

我是 NODE RED 的新手,我正在尝试从 MQTT 获取 payload_raw 值并将其保存到 MySql。这是从 MQTT 上的传感器读取的:

rg186/devices/thingsnode/up {"app_id":"rg186","dev_id":"thingsnode","hardware_serial":"0004A30B001BDBBD","port":2,"counter":3792,"payload_raw":"DiwA2wcO","payload_fields":{"battery":3628,"event":"interval","light":219,"temperature":18.06},"metadata":{"time":"2020-01-20T09:24:01.609075061Z","frequency":868.5,"modulation":"LORA","data_rate":"SF7BW125","airtime":51456000,"coding_rate":"4/5","gateways":[{"gtw_id":"eui-c0ee40ffff296d5b","timestamp":3574037131,"time":"","channel":2,"rssi":-51,"snr":7.8,"rf_chain":1,"latitude":51.320107,"longitude":-0.55894303,"location_source":"registry"}]}}

我在 NODE-RED 上与 MySQl 建立了连接,并且我的 MQTT 连接也正常工作,我的问题是我应该如何检索该 payload_raw 值并保存到 MySQL 也很高兴知道如何获取 payload_fields。

我知道如何插入到 mysql 中。我需要的是从 MQTT 获取 payload_raw 值(DiwA2wcO)到字符串:我的函数是:

var Data = msg.payload;
s = Data;
var payload_raw = s.payload_raw;
var t = s.metadata.time;
msg.topic = "INSERT INTO LoraTest (Bettery) VALUES ('"+payload_raw+"')"; 
msg.payload = [payload_raw]; return msg;

“mqtt in”节点中的主题是 - rg186/devices/thingsnode/#

我认为“mqtt in”中的主题是错误的,如果MQTT上有新的阅读,它会自动使用该功能保存到数据库吗?

更新:

我使用 TTN 将设备读数分给 mqtt,然后使用以下命令以上述格式获取它:

mosquitto_sub -h eu.thethings.network -t "+/devices/+/up" -u "rg186" -P "ttn-account-v2.xxxxxxxxxxxxxxxxxxxxxxx" -v

我希望 NODE-RED 获得 payload_raw 的值。

什么不起作用:

我不知道如何正确设置(MQTT 连接正常,但我不知道如何访问我从 NODE-RED 在 MQTT 中接收的数据):在此处输入图像描述如果此流程和功能正确并允许发送值在 ttn 之后将 payload_raw 发送到数据库将新的读数发送到 MQTT。

提前致谢!

标签: mysqlmqttnode-red

解决方案


在 mqtt 之后放置一个调试节点 - 然后您可以在“调试消息”中看到 json,然后从那里您可以看到原始有效负载的 json 中的路径。


推荐阅读