@@ -85,24 +85,24 @@ var init = function (apiKey, language, locationGeo, l, d) {
85
85
} ) ;
86
86
} ;
87
87
88
- var update = function ( callback ) {
88
+ var update = function ( callback , requestedForecastDays ) {
89
89
let weather = { } ;
90
90
weather . forecasts = [ ] ;
91
91
let that = this ;
92
92
93
- updateCache ( this . darkskyTimeMachine , function ( ) {
93
+ updateCache ( this . darkskyTimeMachine , requestedForecastDays , function ( ) {
94
94
debug ( "Updating weather with dark sky" ) ;
95
95
that . darksky . get ( )
96
96
. then ( function ( response ) {
97
97
98
98
// Current weather report
99
- response [ ' currently' ] [ ' rainDay' ] = cache . report . rainDay ; // Load rainDay from cache
100
- weather . report = parseReport ( response [ ' currently' ] , response [ ' timezone' ] ) ;
99
+ response . currently . rainDay = cache . report . rainDay ; // Load rainDay from cache
100
+ weather . report = parseReport ( response . currently , response . timezone ) ;
101
101
102
102
// Forecasts for today and next 6 days
103
103
for ( let i = 0 ; i <= 6 ; i ++ ) {
104
- response [ ' daily' ] [ ' data' ] [ i ] [ ' rainDay' ] = cache . forecast [ 'day' + i ] . rainDay ; // Load rainDay from cache
105
- weather . forecasts . push ( parseForecast ( response [ ' daily' ] [ ' data' ] [ i ] , response [ ' timezone' ] ) ) ;
104
+ response . daily . data [ i ] . rainDay = cache . forecast [ 'day' + i ] . rainDay ; // Load rainDay from cache
105
+ weather . forecasts . push ( parseForecast ( response . daily . data [ i ] , response . timezone ) ) ;
106
106
}
107
107
108
108
callback ( null , weather ) ;
@@ -118,57 +118,57 @@ var update = function (callback) {
118
118
var parseReport = function ( values , timezone ) {
119
119
let report = { } ;
120
120
121
- report . AirPressure = parseInt ( values [ ' pressure' ] ) ;
122
- report . CloudCover = parseInt ( values [ ' cloudCover' ] * 100 ) ;
123
- report . Condition = values [ ' summary' ] ;
124
- report . ConditionCategory = converter . getConditionCategory ( values [ ' icon' ] ) ;
125
- report . DewPoint = parseInt ( values [ ' dewPoint' ] ) ;
126
- report . Humidity = parseInt ( values [ ' humidity' ] * 100 ) ;
127
- report . ObservationTime = moment . unix ( values [ ' time' ] ) . tz ( timezone ) . format ( 'HH:mm:ss' ) ;
128
- report . Ozone = parseInt ( values [ ' ozone' ] ) ;
129
- report . Rain1h = isNaN ( parseInt ( values [ ' precipIntensity' ] ) ) ? 0 : parseInt ( values [ ' precipIntensity' ] ) ;
130
- report . RainDay = values [ ' rainDay' ]
131
- report . Temperature = values [ ' temperature' ] ;
132
- report . UVIndex = isNaN ( parseInt ( values [ ' uvIndex' ] ) ) ? 0 : parseInt ( values [ ' uvIndex' ] ) ;
133
- report . Visibility = isNaN ( parseInt ( values [ ' visibility' ] ) ) ? 0 : parseInt ( values [ ' visibility' ] ) ;
134
- report . WindDirection = converter . getWindDirection ( values [ ' windBearing' ] ) ;
135
- report . WindSpeed = parseFloat ( values [ ' windSpeed' ] ) ;
136
- report . WindSpeedMax = parseFloat ( values [ ' windGust' ] ) ;
121
+ report . AirPressure = parseInt ( values . pressure ) ;
122
+ report . CloudCover = parseInt ( values . cloudCover * 100 ) ;
123
+ report . Condition = values . summary ;
124
+ report . ConditionCategory = converter . getConditionCategory ( values . icon ) ;
125
+ report . DewPoint = parseInt ( values . dewPoint ) ;
126
+ report . Humidity = parseInt ( values . humidity * 100 ) ;
127
+ report . ObservationTime = moment . unix ( values . time ) . tz ( timezone ) . format ( 'HH:mm:ss' ) ;
128
+ report . Ozone = parseInt ( values . ozone ) ;
129
+ report . Rain1h = isNaN ( parseInt ( values . precipIntensity ) ) ? 0 : parseInt ( values . precipIntensity ) ;
130
+ report . RainDay = values . rainDay ;
131
+ report . Temperature = values . temperature ;
132
+ report . UVIndex = isNaN ( parseInt ( values . uvIndex ) ) ? 0 : parseInt ( values . uvIndex ) ;
133
+ report . Visibility = isNaN ( parseInt ( values . visibility ) ) ? 0 : parseInt ( values . visibility ) ;
134
+ report . WindDirection = converter . getWindDirection ( values . windBearing ) ;
135
+ report . WindSpeed = parseFloat ( values . windSpeed ) ;
136
+ report . WindSpeedMax = parseFloat ( values . windGust ) ;
137
137
138
138
return report ;
139
139
} ;
140
140
141
141
var parseForecast = function ( values , timezone , i ) {
142
142
let forecast = { } ;
143
143
144
- forecast . AirPressure = parseInt ( values [ ' pressure' ] ) ;
145
- forecast . CloudCover = parseInt ( values [ ' cloudCover' ] * 100 ) ;
146
- forecast . Condition = values [ ' summary' ] ;
147
- forecast . ConditionCategory = converter . getConditionCategory ( values [ ' icon' ] ) ;
148
- forecast . DewPoint = parseInt ( values [ ' dewPoint' ] ) ;
149
- forecast . ForecastDay = moment . unix ( values [ ' time' ] ) . tz ( timezone ) . format ( 'dddd' ) ;
150
- forecast . Humidity = parseInt ( values [ ' humidity' ] * 100 ) ;
151
- forecast . Ozone = parseInt ( values [ ' ozone' ] ) ;
152
- forecast . RainChance = parseInt ( values [ ' precipProbability' ] * 100 ) ;
153
- forecast . RainDay = values [ ' rainDay' ]
154
- forecast . Temperature = values [ ' temperatureHigh' ] ;
155
- forecast . TemperatureMin = values [ ' temperatureLow' ] ;
156
- forecast . UVIndex = isNaN ( parseInt ( values [ ' uvIndex' ] ) ) ? 0 : parseInt ( values [ ' uvIndex' ] ) ;
157
- forecast . Visibility = isNaN ( parseInt ( values [ ' visibility' ] ) ) ? 0 : parseInt ( values [ ' visibility' ] ) ;
158
- forecast . WindDirection = converter . getWindDirection ( values [ ' windBearing' ] ) ;
159
- forecast . WindSpeed = parseFloat ( values [ ' windSpeed' ] ) ;
160
- forecast . WindSpeedMax = parseFloat ( values [ ' windGust' ] ) ;
144
+ forecast . AirPressure = parseInt ( values . pressure ) ;
145
+ forecast . CloudCover = parseInt ( values . cloudCover * 100 ) ;
146
+ forecast . Condition = values . summary ;
147
+ forecast . ConditionCategory = converter . getConditionCategory ( values . icon ) ;
148
+ forecast . DewPoint = parseInt ( values . dewPoint ) ;
149
+ forecast . ForecastDay = moment . unix ( values . time ) . tz ( timezone ) . format ( 'dddd' ) ;
150
+ forecast . Humidity = parseInt ( values . humidity * 100 ) ;
151
+ forecast . Ozone = parseInt ( values . ozone ) ;
152
+ forecast . RainChance = parseInt ( values . precipProbability * 100 ) ;
153
+ forecast . RainDay = values . rainDay ;
154
+ forecast . Temperature = values . temperatureHigh ;
155
+ forecast . TemperatureMin = values . temperatureLow ;
156
+ forecast . UVIndex = isNaN ( parseInt ( values . uvIndex ) ) ? 0 : parseInt ( values . uvIndex ) ;
157
+ forecast . Visibility = isNaN ( parseInt ( values . visibility ) ) ? 0 : parseInt ( values . visibility ) ;
158
+ forecast . WindDirection = converter . getWindDirection ( values . windBearing ) ;
159
+ forecast . WindSpeed = parseFloat ( values . windSpeed ) ;
160
+ forecast . WindSpeedMax = parseFloat ( values . windGust ) ;
161
161
162
162
return forecast ;
163
163
} ;
164
164
165
- var updateCache = function ( api , callback ) {
165
+ var updateCache = function ( api , requestedForecastDays , callback ) {
166
166
if ( typeof cache . lastUpdate === 'undefined' || new Date ( ) - cache . lastUpdate > 3600000 ) {
167
167
debug ( "Called hourly update of rain data" ) ;
168
168
cache . lastUpdate = new Date ( ) ;
169
169
170
170
let now = moment ( ) ;
171
- let callbacks = 8 ;
171
+ let callbacks = requestedForecastDays + 1 ;
172
172
173
173
doTimeMachineRequest ( api , now , function ( result ) {
174
174
cache . report . rainDay = result ;
@@ -178,7 +178,7 @@ var updateCache = function (api, callback) {
178
178
}
179
179
} , true ) ;
180
180
181
- for ( let i = 0 ; i <= 6 ; i ++ ) {
181
+ for ( let i = 0 ; i < requestedForecastDays ; i ++ ) {
182
182
doTimeMachineRequest ( api , now . clone ( ) . add ( i , 'd' ) , function ( result ) {
183
183
cache . forecast [ 'day' + i ] . rainDay = result ;
184
184
callbacks -- ;
@@ -201,12 +201,12 @@ var doTimeMachineRequest = function (api, now, callback, limit = false) {
201
201
// Current hour in time zone of weather location
202
202
let hour = 24 ;
203
203
if ( limit ) {
204
- hour = now . tz ( response [ ' timezone' ] ) . format ( 'H' ) ;
204
+ hour = now . tz ( response . timezone ) . format ( 'H' ) ;
205
205
}
206
206
207
207
// Sum all values for the requested day
208
- debug ( "Accumulate rain for " + now . tz ( response [ ' timezone' ] ) . format ( 'dddd' ) + ( limit ? ( ' until ' + hour + ':00' ) : '' ) ) ;
209
- let result = converter . getRainAccumulated ( response [ ' hourly' ] [ ' data' ] . slice ( 0 , hour ) , 'precipIntensity' ) ;
208
+ debug ( "Accumulate rain for " + now . tz ( response . timezone ) . format ( 'dddd' ) + ( limit ? ( ' until ' + hour + ':00' ) : '' ) ) ;
209
+ let result = converter . getRainAccumulated ( response . hourly . data . slice ( 0 , hour ) , 'precipIntensity' ) ;
210
210
debug ( "Accumulated rain: " + result ) ;
211
211
callback ( result ) ;
212
212
} )
0 commit comments