@@ -298,13 +298,41 @@ def create_model_instance(model: Type[BaseModel], data: dict, target_unit: Optio
298298
299299 # Handle temperature unit conversion if applicable
300300 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
302312 elif field_name in data :
303313 # 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
305324 elif field_name .lower () in data :
306325 # 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
308336 else :
309337 # If neither the mongo_field nor the field_name exists, log an error
310338 logger .error (
0 commit comments