main.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import datetime
  2. import json,pymysql
  3. import os
  4. import time
  5. from MyUtils.ZillionUtil import ZillionUtil
  6. from MyUtils.MysqlUtils import MysqlUtils
  7. from MyUtils.Dingtalk import send_message_markdown
  8. import pytz
  9. def datetime_now():
  10. # datetime_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
  11. #容器时间
  12. # tz = pytz.timezone('Asia/Shanghai') # 东八区
  13. datetime_now = datetime.datetime.fromtimestamp(int(time.time()),
  14. pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S')
  15. return datetime_now
  16. # 获取能耗数据
  17. def get_data_time(zillionUtil,hbase_database, hbase_table, building,meters,funcid):
  18. Criteria = {
  19. "building": building,
  20. "meter": {
  21. "in":meters
  22. },
  23. "funcid": funcid
  24. }
  25. datas = zillionUtil.select(hbase_database, hbase_table, Criteria)
  26. return datas
  27. # with open("config.json", "r",encoding="utf-8") as f:
  28. # data = json.load(f)
  29. # hbase_database = data["metadata"]["database"]
  30. # url = data["metadata"]["url"]
  31. # building = data["building"]
  32. # funcid = data["funcid"]
  33. # points = data["points"]
  34. # dingding = data["dingding"]
  35. hbase_database = os.getenv("hbase_database")
  36. url = os.getenv("url")
  37. building = os.getenv("building")
  38. dingding = os.getenv("dingding")
  39. funcid = os.getenv("dingding")
  40. points = os.getenv("dingding")
  41. #存报警
  42. alarm = {}
  43. zillionUtil = ZillionUtil(url)
  44. meters = [i for i in points]
  45. #存发送钉钉报警内容
  46. while True:
  47. messages = []
  48. datas = get_data_time(zillionUtil,hbase_database,"original_present",building,meters,funcid)
  49. for i in datas:
  50. value = i["data"]
  51. meter = i["meter"]
  52. receivetime = i["receivetime"]
  53. name = points[meter]
  54. if value == 1:
  55. #如果表之前未产生报警,直接发送报警,并将点位存在报警池中
  56. #如果之前已经有报警,不重复发送
  57. if meter not in alarm:
  58. message = (" - **空间名称:** %s \n" + " - **设备类名称:** 水浸传感器 \n" + " - **报警值:** %s \n" + " - **状态:** <font color=#FF0000>请及时查看处理</font> \n")%(name, value)
  59. messages.append(message)
  60. messages.append("___")
  61. alarm[meter] = value
  62. else:
  63. #如果报警恢复,删除报警池内容,发送恢复报警
  64. if meter in alarm:
  65. if alarm[meter] == 1:
  66. alarm.pop(meter)
  67. message = (" - **空间名称:** %s \n" + " - **设备类名称:** 水浸传感器 \n" + " - **报警值:** %s \n" + " - **状态:** 报警已恢复 \n") % (name, value)
  68. messages.append(message)
  69. messages.append("___")
  70. if messages:
  71. messages_info = "\n".join(messages)
  72. #如果有报警,发送钉钉
  73. title = "## <font color=#FF0000>【中海财富中心】位移传感器报警</font> "
  74. messages_info = title +"\n" + messages_info
  75. print(messages_info)
  76. send_message_markdown(title,messages_info,dingding)
  77. messages.clear()
  78. time.sleep(60)