Красный узел получает JSON или CSV-фид в InfluxDB

Версии

  • Node-RED v0.16.2
  • InfluxDB v1.2.2
  • Графана v4.2.0
  • Ubuntu 16.04.2

Я хочу получить некоторые метеорологические наблюдения от моей местной официальной метеорологической станции. Я могу выбрать между CSV и JSON

  • Я пытаюсь получить канал JSON с помощью Node-RED.
  • Я использовал узел HTTP-запроса, который возвращает проанализированный объект JSON

Возвращает этот вложенный массив:

объект

  • наблюдения: объект
    • уведомление: массив [1]
    • 0: объект
      • copyright: "Copyright Commonwealth of Australia 2017, Бюро метеорологии. Для получения дополнительной информации см.: urlhere urlhere"
      • copyright_url: "urlhere"
      • disclaimer_url: "urlhere"
      • feedback_url: "urlhere"
    • заголовок: массив [1]
    • 0: объект
      • refresh_message: "Выпущено в 21:32 EST вторник, 2 мая 2017 года"
      • ID: "IDV60801"
      • main_ID: "IDV60800"
      • название: "Аэропорт Мураббин"
      • state_time_zone: "VIC"
      • часовой пояс: "EST"
      • product_name: "Наблюдения за погодой"
      • Состояние: "Виктория"
    • данные: массив [155]
    • [0… 9]
      • 0: объект
      • sort_order: 0
      • wmo: 94870
      • название: "Аэропорт Мураббин"
      • history_product: "IDV60801"
      • local_date_time: "02/09: 30 вечера"
      • local_date_time_full: "20170502213000"
      • aifstime_utc: "20170502113000"
      • широта: -38
      • долг: 145,1
      • visible_t: 5.4
      • облако: "-"
      • cloud_base_m: null
      • cloud_oktas: null
      • cloud_type: "-"
      • cloud_type_id: null
      • delta_t: 2,5
      • gust_kmh: 19
      • gust_kt: 10
      • air_temp: 9
      • росы: 3,2
      • нажмите: 1025,8
      • press_msl: 1025,8
      • press_qnh: 1025,8
      • press_tend: "-"
      • rain_trace: "1.0"
      • rel_hum: 67
      • sea_state: "-"
      • swell_dir_worded: "-"
      • swell_height: null
      • swell_period: null
      • vis_km: "10"
      • погода: "-"
      • wind_dir: "ESE"
      • wind_spd_kmh: 11
      • * wind_spd_kt: ** 6

Мне нужен был только массив data: поэтому я использовал функциональный узел "Извлечение значения" со следующим кодом:

msg.payload = msg.payload.observations.data[0] return msg;

Вышеуказанная функция вернула этот объект:

  • sort_order: 0
  • wmo: 94870
  • название: "Аэропорт Мураббин"
  • history_product: "IDV60801"
  • local_date_time: "02/09: 30 вечера"
  • local_date_time_full: "20170502213000"
  • aifstime_utc: "20170502113000"
  • широта: -38
  • долг: 145,1
  • visible_t: 5.4
  • облако: "-"
  • cloud_base_m: null
  • cloud_oktas: null
  • cloud_type: "-"
  • cloud_type_id: null
  • delta_t: 2,5
  • gust_kmh: 19
  • gust_kt: 10
  • air_temp: 9
  • росы: 3,2
  • нажмите: 1025,8
  • press_msl: 1025,8
  • press_qnh: 1025,8
  • press_tend: "-"
  • rain_trace: "1.0"
  • rel_hum: 67
  • sea_state: "-"
  • swell_dir_worded: "-"
  • swell_height: null
  • swell_period: null
  • vis_km: "10"
  • погода: "-"
  • wind_dir: "ESE"
  • wind_spd_kmh: 11
  • wind_spd_kt: 6

Если я помещаю это в InfluxDB через узел хранения, я получаю эту ошибку:

Ошибка: Произошла ошибка 400 Bad Request: {"error":"невозможно проанализировать 'bom-obs-moorabbin-airport aifstime_utc=\"20170513070000\",air_temp=13.6, Очевидный_t=10,6, облако =\"-\",cloud_base_m= NULL,cloud_oktas= NULL,cloud_type=\"-\",cloud_type_id= нуль,delta_t=2,9,dewpt=7,6,gust_kmh=17,gust_kt=9,history_product=\"IDV60801\", ш =-38,local_date_time=\"13/05:00pm\",local_date_time_full=\"20170513170000\",lon=145.1,name=\"Аэропорт Мураббин \", нажмите =1023.5,press_msl=1023.5, нажмите_qnh=1023.5, нажмите_тенд =\"-\",rain_trace=\"0.0\",rel_hum=67,sea_state=\"-\", порядок_сортировки =0,swell_dir_worded=\"-\",swell_height= NULL,swell_period= NULL,vis_km=\"10\",weather=\"-\",wind_dir=\"SSW\",wind_spd_kmh=13,wind_spd_kt=7,wmo=94870': недопустимый номер "}

Если вместо этого я вставлю узел JSON между "Извлечь значение" и узлом хранения InfluxDB, то получу отладочный вывод:

"{" sort_order ": 0," wmo ": 94870," name ":" Moorabbin Airport "," history_product ":" IDV60801 "," local_date_time ":" 13/05: 00pm "," local_date_time_full ":" 20170513170000 " "aifstime_utc":"20170513070000","ш":-38,"долгота":145,1, "apparent_t": 10,6,"облако":"-","cloud_base_m": нулевой,"cloud_oktas": нулевой,"cloud_type":"-" "cloud_type_id": NULL,"delta_t":2.9,"gust_kmh":17,"gust_kt":9,"air_temp":13,6,"dewpt":7.6,"нажмите":1023,5,"press_msl":1023,5,"press_qnh":1023,5,"press_tend":"-" "rain_trace":"0.0","rel_hum":67,"sea_state":"-","swell_dir_worded":"-","swell_height": нулевой," swell_period ": нулевой,"vis_km":"10","погода":"-","wind_dir":"SSW","wind_spd_kmh":13,"wind_spd_kt":7}"

Когда я присоединяю этот узел JSON к узлу хранения InfluxDB, не выдается никаких ошибок, но нет никаких значений в InfluxDB, которые я мог бы просмотреть, отобразить на графике или представить в виде таблицы в Grafana.

Каков наилучший способ взять вышеуказанный канал с этого сайта и поместить его в InfluxDB, чтобы я мог просматривать его графически в Grafana?

1 ответ

Вы можете попробовать это:

return {
  payload: {
    data : msg.payload.observations.data[0]
  }
};
Другие вопросы по тегам