@@ -298,13 +298,41 @@ def create_model_instance(model: Type[BaseModel], data: dict, target_unit: Optio
298
298
299
299
# Handle temperature unit conversion if applicable
300
300
if mongo_field in data :
301
- data [field_name ] = data [mongo_field ]
301
+ # Convert string values back to appropriate types for numeric fields
302
+ value = data [mongo_field ]
303
+ if field_name in ["temp" , "rh" , "pressure" , "lux" , "ppm" , "pH" , "vpd" ] and isinstance (
304
+ value , str
305
+ ):
306
+ try :
307
+ data [field_name ] = float (value )
308
+ except (ValueError , TypeError ):
309
+ data [field_name ] = value
310
+ else :
311
+ data [field_name ] = value
302
312
elif field_name in data :
303
313
# If the field_name exists in data, use it
304
- data [field_name ] = data [field_name ]
314
+ value = data [field_name ]
315
+ if field_name in ["temp" , "rh" , "pressure" , "lux" , "ppm" , "pH" , "vpd" ] and isinstance (
316
+ value , str
317
+ ):
318
+ try :
319
+ data [field_name ] = float (value )
320
+ except (ValueError , TypeError ):
321
+ data [field_name ] = value
322
+ else :
323
+ data [field_name ] = value
305
324
elif field_name .lower () in data :
306
325
# If the field_name (lowercase) exists in data, use it
307
- data [field_name ] = data [field_name .lower ()]
326
+ value = data [field_name .lower ()]
327
+ if field_name in ["temp" , "rh" , "pressure" , "lux" , "ppm" , "pH" , "vpd" ] and isinstance (
328
+ value , str
329
+ ):
330
+ try :
331
+ data [field_name ] = float (value )
332
+ except (ValueError , TypeError ):
333
+ data [field_name ] = value
334
+ else :
335
+ data [field_name ] = value
308
336
else :
309
337
# If neither the mongo_field nor the field_name exists, log an error
310
338
logger .error (
0 commit comments