mysql - 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。
提前致谢!
解决方案
在 mqtt 之后放置一个调试节点 - 然后您可以在“调试消息”中看到 json,然后从那里您可以看到原始有效负载的 json 中的路径。
推荐阅读
- android - setGradientCenter (gradientDrawable.setGradientCenter) 在 GradientDrawable 中不起作用
- vue.js - 在循环中绑定类项
- java - Mockito.when thenReturn 基于输入参数
- reactjs - 对 FieldArray 中的 Formik 字段使用自定义输入时,输入失去焦点
- excel - 将单元格值拆分为多行而不从其他单元格复制数据
- python - 找到熊猫时间序列之间的相关性
- sql - 使用 D365 中另一个表中的字段过滤父数据源
- css - 为什么这个固定元素不水平居中?
- google-cloud-firestore - AngularFire - 如何设置日志记录级别?
- java - 遍历集合的arraylist