Skip to content

Instantly share code, notes, and snippets.

@binarybucks
Created March 2, 2014 10:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binarybucks/fb1bffe7a0dd0c5a478f to your computer and use it in GitHub Desktop.
Save binarybucks/fb1bffe7a0dd0c5a478f to your computer and use it in GitHub Desktop.
Daily weather forecast based on OwnTracks location

Publishes weather forecast messages based on the last known location provided by OwnTracks. The default location if none is provided by OwnTracks is injected on startup by the 'default location' node.

The forecast messages are published to the MQTT topic notifications/weather where they can be pushed to a mobile device by mqttwarn.

Multiple users are not yet supported, the location is stored in global.location.$username as {lat: "xx.xxxx", lon: "yy.yyyyy"} JSON object.

[{"id":"35c57467.ca3a8c","type":"mqtt-broker","broker":"localhost","port":"1883","clientid":"nodered"},{"id":"c4b992a2.3b467","type":"mqtt in","name":"Location input","topic":"owntracks/#","broker":"35c57467.ca3a8c","x":550,"y":488.57142448425293,"z":"27070cfe.d8f8f4","wires":[["ee93c6ed.116c38"]]},{"id":"e3fa4bc6.1c05b8","type":"mqtt out","name":"","topic":"notifications/weather","broker":"35c57467.ca3a8c","x":1305.0142974853516,"y":661.0142822265625,"z":"27070cfe.d8f8f4","wires":[]},{"id":"ee93c6ed.116c38","type":"switch","name":"filter location messages","property":"payload","rules":[{"t":"cont","v":"\"location\""}],"checkall":"true","outputs":1,"x":732.5142936706543,"y":488.6571378707886,"z":"27070cfe.d8f8f4","wires":[["8169ee94.7e961"]]},{"id":"6a4311f3.95bcf","type":"inject","name":"forecast","topic":"","payload":"","payloadType":"string","repeat":"","crontab":"20 6 * * *","once":false,"x":575.0143089294434,"y":664.0142784118652,"z":"27070cfe.d8f8f4","wires":[["21254595.dedaba"]]},{"id":"1ae87ce2.e51783","type":"httpget","name":"forecast","baseurl":"http://api.openweathermap.org/data/2.5/forecast/daily?lang=de&units=metric&","append":"","x":916.5142364501953,"y":662.7643432617188,"z":"27070cfe.d8f8f4","wires":[["a78962d2.5876a"]]},{"id":"a78962d2.5876a","type":"function","name":"to text","func":"var weather = JSON.parse(msg.payload);\nvar temps = weather['list'][0]['temp'];\nvar d = weather['list'][0]['weather'][0]['description'];\nvar desc = d[0].toUpperCase() + d.slice(1)\n\nvar min = temps['min'];\nvar max = temps['max'];\n\nreturn {payload: desc + \" \" + min + \"°C - \" +max + \"°C \"};","outputs":"1","x":1113.2642364501953,"y":662.0142822265625,"z":"27070cfe.d8f8f4","wires":[["e3fa4bc6.1c05b8"]]},{"id":"8169ee94.7e961","type":"function","name":"store location in global scope","func":"context.global.createNestedObject( context, [\"global\", \"location\", \"bucks\"]);\n\nvar json = JSON.parse(msg.payload);\ncontext['global']['location']['bucks'] = {lat: json['lat'], lon: json['lon']};\nreturn {payload: context['global']['location']['bucks']};","outputs":1,"x":1035.764289855957,"y":563.764274597168,"z":"27070cfe.d8f8f4","wires":[["567f5272.a980ac"]]},{"id":"567f5272.a980ac","type":"debug","name":"","active":false,"complete":"false","x":1227.014289855957,"y":564.514274597168,"z":"27070cfe.d8f8f4","wires":[]},{"id":"23347757.dccb88","type":"inject","name":"insert helper functions","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":598.5142974853516,"y":793.7642822265625,"z":"27070cfe.d8f8f4","wires":[["dad21131.252df"]]},{"id":"dad21131.252df","type":"function","name":"createNestedObject","func":"context.global.createNestedObject = function( base, names ) {\n for( var i = 0; i < names.length; i++ ) {\n base = base[ names[i] ] = base[ names[i] ] || {};\n }\n};","outputs":1,"x":801.3714485168457,"y":794.7642593383789,"z":"27070cfe.d8f8f4","wires":[[]]},{"id":"3162e06b.ce9d2","type":"inject","name":"default location","topic":"","payload":"{\"lat\": \"52.0000000\", \"lon\": \"9.000000\"}","payloadType":"string","repeat":"","crontab":"","once":true,"x":555.5142688751221,"y":564.3714237213135,"z":"27070cfe.d8f8f4","wires":[["8169ee94.7e961"]]},{"id":"21254595.dedaba","type":"function","name":"get location","func":"return {payload: \"lat=\" +context.global.location.bucks.lat + \"&lon=\" +context.global.location.bucks.lon};","outputs":1,"x":764.5142974853516,"y":662.7642822265625,"z":"27070cfe.d8f8f4","wires":[["1ae87ce2.e51783"]]}]
@Majorproject2014
Copy link

Hi may I know which part of the flow do I need to edit in order to get it working?
I had owntrack installed but after importing this flow to clipboard, nothing seem to be working.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment