Node-red - 通过 http 将数据发布到 influxdb
Node-red - Posting data to influxdb via http
我正在尝试通过 Node-red post 将数据发送到 Influxdb。
通过 CURL 我可以 post 这个:
curl -i -XPOST 'http://localhost:8086/write?db=waterlevel' --data-binary 'vattenstand,lake=siljan,region=dalarna value=160.80'
并将数据放入 InfluxDb。
当我尝试通过 Node-red 和 HTTP 请求 post 时,出现错误:
{"error":"unable to parse '{\"url\":\"http://192.168.1.116:8086/write?db=waterlevel\",\"method\":\"POST\",\"body\":\"vattenstand,lake=siljan,region=dalarna value=160.80\",}': missing tag value"}
我在 Node-red 的函数中使用这段代码并将其传递给 HTTP 请求:
var dataString = 'vattenstand,lake=siljan,region=dalarna value=160.80';
msg.payload = {
'url': 'http://192.168.1.116:8086/write?db=waterlevel',
'method': 'POST',
'body': dataString,
};
msg.headers = {
Accept: "application/json"
};
return msg;
节点的边栏帮助详细说明了配置节点时应设置的消息属性。
您正在传入 URL、方法和 body 作为 msg.payload 的属性。这是不正确的。
前两个应该设置为msg.url,msg.method,msg.payload应该是请求的body。
在这种情况下,您已经直接使用 URL 和方法配置了节点,因此无需将它们与消息一起传递。事实上,当您在节点中配置 URL 时,您会发现无法使用 msg.url 覆盖它。如果要为每条消息设置 URL,则必须在编辑器中将节点的 URL 字段留空。
您可能还需要设置 content-type header。
假设您愿意将 URL 和方法硬编码在节点中,您的函数应该类似于:
msg.payload = 'vattenstand,lake=siljan,region=dalarna value=160.80';
msg.headers = {
Accept: "application/json"
};
msg.headers['Content-type'] = 'application/x-www-form-urlencoded';
return msg;
为什么不使用特殊的 influxdb 节点?
https://flows.nodered.org/node/node-red-contrib-influxdb
优点:不需要创建http header。您可以为其他数据重用已定义的连接。
我正在尝试通过 Node-red post 将数据发送到 Influxdb。 通过 CURL 我可以 post 这个:
curl -i -XPOST 'http://localhost:8086/write?db=waterlevel' --data-binary 'vattenstand,lake=siljan,region=dalarna value=160.80'
并将数据放入 InfluxDb。
当我尝试通过 Node-red 和 HTTP 请求 post 时,出现错误:
{"error":"unable to parse '{\"url\":\"http://192.168.1.116:8086/write?db=waterlevel\",\"method\":\"POST\",\"body\":\"vattenstand,lake=siljan,region=dalarna value=160.80\",}': missing tag value"}
我在 Node-red 的函数中使用这段代码并将其传递给 HTTP 请求:
var dataString = 'vattenstand,lake=siljan,region=dalarna value=160.80';
msg.payload = {
'url': 'http://192.168.1.116:8086/write?db=waterlevel',
'method': 'POST',
'body': dataString,
};
msg.headers = {
Accept: "application/json"
};
return msg;
节点的边栏帮助详细说明了配置节点时应设置的消息属性。
您正在传入 URL、方法和 body 作为 msg.payload 的属性。这是不正确的。
前两个应该设置为msg.url,msg.method,msg.payload应该是请求的body。
在这种情况下,您已经直接使用 URL 和方法配置了节点,因此无需将它们与消息一起传递。事实上,当您在节点中配置 URL 时,您会发现无法使用 msg.url 覆盖它。如果要为每条消息设置 URL,则必须在编辑器中将节点的 URL 字段留空。
您可能还需要设置 content-type header。
假设您愿意将 URL 和方法硬编码在节点中,您的函数应该类似于:
msg.payload = 'vattenstand,lake=siljan,region=dalarna value=160.80';
msg.headers = {
Accept: "application/json"
};
msg.headers['Content-type'] = 'application/x-www-form-urlencoded';
return msg;
为什么不使用特殊的 influxdb 节点? https://flows.nodered.org/node/node-red-contrib-influxdb 优点:不需要创建http header。您可以为其他数据重用已定义的连接。