config_reader.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from typing import Union
  2. from datetime import datetime
  3. import numpy as np
  4. import pandas as pd
  5. from ..DHU.config_reader import ConfigReader as ConfigReader_DHU
  6. class ConfigReader:
  7. def __init__(
  8. self,
  9. path,
  10. DHU_AB_config:ConfigReader_DHU = None
  11. ):
  12. self.path = path
  13. self.room = pd.read_excel(self.path,sheet_name='房间')
  14. self.app = pd.read_excel(self.path,sheet_name='程序')
  15. self.all_room_dew = set(self.room.loc[:,'房间露点温度'].to_list())
  16. self.DHU_AB_config:ConfigReader_DHU = DHU_AB_config
  17. def get_room_info(self,room_dew,info_name) -> str:
  18. info = self.room.loc[lambda dt:dt.房间露点温度==room_dew,info_name].to_list()[0]
  19. return info
  20. def get_point(self,room_dew) -> dict:
  21. if room_dew not in self.all_room_dew:
  22. raise ValueError('房间露点温度不存在')
  23. point = {'Droom':room_dew}
  24. if self.DHU_AB_config is not None:
  25. equp_name = self.get_room_info(room_dew,'设备编号')
  26. equp_point = self.DHU_AB_config.get_equp_point(
  27. equp_name = equp_name,
  28. equp_type = self.get_room_info(room_dew,'设备类型'),
  29. equp_class = 'B'
  30. )
  31. point['Dout'] = equp_name + '_' + equp_point['wheel_2_DoutP']
  32. return point
  33. def get_app_info(
  34. self,
  35. equp_name: str,
  36. app_type : str,
  37. key : str,
  38. info_type: str = None
  39. ) -> str:
  40. value = self.app.loc[lambda dt:(dt.程序类型==app_type) & (dt.项目==key)]
  41. if value.shape[0] != 1:
  42. raise Exception(f'程序类型({app_type})下不存在唯一的的项目({key})')
  43. info_value = value.loc[:,'全局配置'].iat[0]
  44. # 更新全局配置
  45. if equp_name in value.columns:
  46. equp_value = value.loc[:,equp_name].iat[0]
  47. if isinstance(equp_value,(str,float)) and not np.isnan(equp_value):
  48. info_value = equp_value
  49. # 调整数据类型
  50. info_value = convert_info_type(info_value,info_type)
  51. return info_value
  52. def convert_info_type(info_value,info_type):
  53. if info_type == 'int':
  54. info_value = int(info_value)
  55. elif info_type == 'float':
  56. info_value = float(info_value)
  57. elif info_type == 'bool':
  58. info_value = bool(info_value)
  59. elif info_type == 'datetime':
  60. if info_value == 'NOW':
  61. info_value = datetime.now()
  62. elif not isinstance(info_value,datetime):
  63. info_value = datetime.strptime(info_value,'%Y/%m/%d %H:%M:%S')
  64. elif info_type == 'str':
  65. info_value = str(info_value)
  66. elif info_type is None:
  67. pass
  68. else:
  69. raise ValueError(f"{info_type} type error!")
  70. return info_value