@@ -188,12 +188,6 @@ def get_vpd_pipeline(
188
188
):
189
189
sampling_interval = timedelta (minutes = resolution )
190
190
match_clause = get_initial_match_clause (device_ids , device_name , start_date , end_date )
191
- project_projection = {
192
- "_id" : False ,
193
- "timestamp" : "$timestamp" ,
194
- "vpd" : "$vpd" ,
195
- }
196
- # We ensure both temperature and humidity exist for the calculation of VPD
197
191
match_clause ["temp" ] = {"$exists" : True }
198
192
match_clause ["rh" ] = {"$exists" : True }
199
193
@@ -202,6 +196,26 @@ def get_vpd_pipeline(
202
196
{"$match" : match_clause },
203
197
{"$addFields" : {"tempAsFloat" : {"$toDouble" : "$temp" }}},
204
198
{"$addFields" : {"rhAsFloat" : {"$toDouble" : "$rh" }}},
199
+ {
200
+ "$addFields" : {
201
+ "group" : {
202
+ "$floor" : {
203
+ "$divide" : [
204
+ {"$subtract" : ["$timestamp" , start_date ]},
205
+ sampling_interval .total_seconds () * 1000 ,
206
+ ]
207
+ }
208
+ }
209
+ }
210
+ },
211
+ {
212
+ "$group" : {
213
+ "_id" : "$group" ,
214
+ "averageTemp" : {"$avg" : "$tempAsFloat" },
215
+ "averageRH" : {"$avg" : "$rhAsFloat" },
216
+ "timestamp" : {"$first" : "$timestamp" },
217
+ }
218
+ },
205
219
{
206
220
"$addFields" : {
207
221
"satvp" : {
@@ -210,8 +224,8 @@ def get_vpd_pipeline(
210
224
{
211
225
"$exp" : {
212
226
"$multiply" : [
213
- {"$divide" : [17.27 , {"$add" : ["$tempAsFloat " , 237.3 ]}]},
214
- "$tempAsFloat " ,
227
+ {"$divide" : [17.27 , {"$add" : ["$averageTemp " , 237.3 ]}]},
228
+ "$averageTemp " ,
215
229
]
216
230
}
217
231
},
@@ -224,29 +238,20 @@ def get_vpd_pipeline(
224
238
"vpd" : {
225
239
"$multiply" : [
226
240
"$satvp" ,
227
- {"$subtract" : [1.0 , {"$divide" : ["$rhAsFloat " , 100.0 ]}]},
241
+ {"$subtract" : [1.0 , {"$divide" : ["$averageRH " , 100.0 ]}]},
228
242
]
229
243
}
230
244
}
231
245
},
232
246
{
233
- "$addFields" : {
234
- "group" : {
235
- "$floor" : {
236
- "$divide" : [
237
- {"$subtract" : ["$timestamp" , start_date ]},
238
- sampling_interval .total_seconds () * 1000 ,
239
- ]
240
- }
241
- }
247
+ "$project" : {
248
+ "_id" : False ,
249
+ "timestamp" : "$timestamp" ,
250
+ "vpd" : "$vpd" ,
242
251
}
243
252
},
244
253
{"$sort" : {"timestamp" : 1 }},
245
- {"$group" : {"_id" : "$group" , "doc" : {"$first" : "$$ROOT" }}},
246
- {"$replaceRoot" : {"newRoot" : "$doc" }},
247
- {"$project" : project_projection },
248
254
]
249
-
250
255
return pipeline
251
256
252
257
0 commit comments