mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-16 22:10:31 +00:00
61 lines
1.6 KiB
CoffeeScript
61 lines
1.6 KiB
CoffeeScript
###
|
|
OpenWeather EVENT POLLER
|
|
------------------------
|
|
|
|
This module requires user-specific parameters:
|
|
- openweatherKey
|
|
- tempThreshold
|
|
- city
|
|
- eventTime ( hh:mm of the day )
|
|
###
|
|
urlService = 'http://api.openweathermap.org/data/2.5/weather'
|
|
lastEvent = new Date 0
|
|
twentyFourHoursInms = 24 * 60 * 60 * 1000
|
|
dayTimeInMin = 0
|
|
|
|
calcEventDayTimeInMin = ( et ) ->
|
|
arrTime = et.split ':'
|
|
hrs = parseInt arrTime[ 0 ]
|
|
mins = parseInt arrTime[ 1 ]
|
|
dayTimeInMin = hrs * 60 + mins
|
|
if isNaN dayTimeInMin
|
|
log 'Wrong temperature input! ' + et
|
|
|
|
try
|
|
calcEventDayTimeInMin params.eventTime
|
|
catch err
|
|
log 'Unable to parse the eventTime parameter'
|
|
|
|
|
|
###
|
|
Fetches the temperature
|
|
###
|
|
getTemperature = ( cb ) ->
|
|
url = urlService + '?APPID=' + params.openweatherKey + '&q=' + params.city
|
|
needle.request 'get', url, null, null, cb
|
|
|
|
###
|
|
Emits one event per day if the temperature today raises above user defined threshold
|
|
###
|
|
exports.temperatureOverThreshold = ( pushEvent ) ->
|
|
getTemperature ( err, resp, body ) ->
|
|
timeNow = new Date()
|
|
|
|
if err or resp.statusCode isnt 200
|
|
debug body
|
|
else
|
|
#If temperature is above threshold
|
|
if body.main.temp_max - 272.15 > params.tempThreshold and
|
|
|
|
# If last event was more than 24 hours ago
|
|
timeNow - lastEvent > twentyFourHoursInms and
|
|
|
|
# If we are past the time the user wants to get the information
|
|
timeNow.getHours() * 60 + timeNow.getMinutes() > dayTimeInMin
|
|
|
|
lastEvent = timeNow
|
|
pushEvent
|
|
threshold: params.tempThreshold
|
|
measured: body.main.temp_max - 272.15
|
|
content: "The temperature will be #{ body.main.temp_max - 272.15 } today!"
|
|
|