Node-red - отправка данных в influenxdb через http - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь отправить данные в Influxdb через Node-red. Через CURL я могу опубликовать это:

curl -i -XPOST 'http://localhost:8086/write?db=waterlevel' --data-binary 'vattenstand,lake=siljan,region=dalarna value=160.80'

и данные помещаются в InfluxDb.

Когда я пытаюсь отправить сообщение через Node-red и запрос HTTP, я получаю сообщение об ошибке:

{"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;

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Почему вы не используете специальный узел притока? https://flows.nodered.org/node/node-red-contrib-influxdb Преимущество: не нужно создавать заголовок http. Вы можете повторно использовать указанное соединение для других данных.

0 голосов
/ 28 апреля 2018

Справка боковой панели для узла содержит подробные сведения о свойствах msg, которые вы должны установить для настройки узла.

Вы передаете URL, метод и тело как свойства msg.payload. Это не правильно.

Они должны быть установлены как msg.url, msg.method для первых двух, а msg.payload должен быть телом запроса.

В этом случае вы уже настроили узел с URL-адресом и методом напрямую, поэтому нет необходимости передавать их вместе с сообщением. Фактически, поскольку вы настроили URL в узле, вы обнаружите, что вы не можете переопределить его с помощью msg.url. если вы хотите установить URL для каждого сообщения, вы должны оставить поле URL узла пустым в редакторе.

Вам также может понадобиться установить заголовок типа контента.

Предполагая, что вы счастливы оставить в узле 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;
...