Skip to content

Instantly share code, notes, and snippets.

@jannylund
Last active January 15, 2017 20:28
Show Gist options
  • Save jannylund/3801e283ac5fb2e424c75f00a961b6d0 to your computer and use it in GitHub Desktop.
Save jannylund/3801e283ac5fb2e424c75f00a961b6d0 to your computer and use it in GitHub Desktop.
node-red flow for Ilmatieteenlaitos.

node-red flow for fetching future data from Ilmatieteenlaitos.

Inspired by https://gist.github.com/el2ro/f11f9c488df72286fbe4fe62f070e273

Basically, this does the same thing, but using node-red functions and storing to influx.

Steps in node-red:

  1. Timer that triggers once per x minutes.
  2. Function node generating url (01-generate-fmi-url.js)
  3. node-red http request node (default config)
  4. node-red xml to json node.
  5. Function node with 6 outputs generating data suitable for influx (02-format-data-for-influx.js)
  6. node-red http request node (POST) for storing content in influx.

TODO:

  • Simplify flow to use influxdb nodes instead of http interface.
// Generate url for http request.
var FMI_APIKEY = "<insert-key>";
var LOCATION_LAT_LON = "<insert-coordinates>";
var TIMESTEP_IN_MINUTES = "60";
var d = new Date();
d.setHours(d.getHours() + 13);
var endtime = d.toISOString();
msg.url = "http://data.fmi.fi/fmi-apikey/" + FMI_APIKEY + "/wfs" +
"?request=getFeature" +
"&storedquery_id=fmi::forecast::hirlam::surface::point::simple" +
"&latlon=" + LOCATION_LAT_LON +
"&endtime=" + endtime +
"&timestep=" + TIMESTEP_IN_MINUTES +
"&parameters=temperature";
return msg;
var influxurl = "http://localhost:8086/write?db=nodered";
var members = msg.payload['wfs:FeatureCollection']['wfs:member'];
var temp0 = members[0]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var temp1 = members[1]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var temp2 = members[2]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var temp4 = members[4]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var temp8 = members[8]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var temp12 = members[12]['BsWfs:BsWfsElement'][0]['BsWfs:ParameterValue'];
var msg0 = { url: influxurl, payload:"temperature,device=fmi value=" + temp0 };
var msg1 = { url: influxurl, payload:"temperature,device=fmi_1h value=" + temp1 };
var msg2 = { url: influxurl, payload:"temperature,device=fmi_2h value=" + temp2 };
var msg4 = { url: influxurl, payload:"temperature,device=fmi_4h value=" + temp4 };
var msg8 = { url: influxurl, payload:"temperature,device=fmi_8h value=" + temp8 };
var msg12 = { url: influxurl, payload:"temperature,device=fmi_12h value=" + temp12 };
return [ msg0, msg1, msg2, msg4, msg8, msg12 ];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment