record_pic.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. demeter service
  5. name:record_pic.py 处理摄像头的图片数据
  6. author:rabin
  7. key:pic/图片名_图片总数_当前序号/gateway/device
  8. """
  9. import time
  10. import json
  11. import uuid
  12. from datetime import *
  13. from demeter.core import *
  14. class Record_pic(object):
  15. pic = {}
  16. def handle(self, config, value):
  17. method = config['type'].split('_')
  18. name = method[0] + '.jpg'
  19. if name not in self.pic:
  20. self.pic[name] = {}
  21. total = int(method[1])
  22. index = int(method[2])
  23. self.pic[name][index] = value
  24. picLen = len(self.pic[name])
  25. if picLen >= total:
  26. self.create(name, config)
  27. def create(self, name, config):
  28. pic = sorted(self.pic[name].items(), key=lambda e:e[0], reverse=False)
  29. data = []
  30. day = str(date.today())
  31. day = day.split('-')
  32. file_name = str(uuid.uuid5(uuid.uuid1(), 'file'))
  33. file_path = day[0] + '/' + day[1] + '/' + day[2]
  34. file_path = File.mkdirs(os.path.join(Demeter.path, 'runtime','camera', file_path)) + '/' + Demeter.md5(file_name) + '.jpg'
  35. for value in pic:
  36. data.append(value[1])
  37. with open(file_path, 'wb') as f:
  38. f.writelines(data)
  39. del self.pic[name]
  40. file_path = file_path.replace(Demeter.path + 'runtime', '')
  41. self.write(file_path, name, config)
  42. def write(self, file, name, config):
  43. show_value = file
  44. value = 0
  45. model = Demeter.model('device_gateway')
  46. model.hardware_id = config['parent']
  47. gateway = model.select(type='fetchone')
  48. if gateway:
  49. model.id = gateway['id']
  50. model.update(status=True,farm_id=gateway['farm_id'])
  51. model = Demeter.model('device_info')
  52. model.hardware_id = config['child']
  53. device = model.select(type='fetchone')
  54. model_type = Demeter.model('hardware_type')
  55. model_type.key = config['method']
  56. hard = model_type.select(type='fetchone')
  57. if device:
  58. #update
  59. model.id = device['id']
  60. id = device['id']
  61. model.update(farm_id=gateway['farm_id'], num=value,show=show_value,status=True,cdate='time')
  62. else:
  63. #insert
  64. model.hardware_id = config['child']
  65. model.farm_id = gateway['farm_id']
  66. model.name = name
  67. model.hardware_type = hard['id']
  68. model.gateway_id = gateway['id']
  69. model.num = value
  70. model.show = show_value
  71. model.status = True
  72. id = model.insert()
  73. self.hardware(id, config['child'], gateway['farm_id'],gateway['id'], hard['id'])
  74. model_pic = Demeter.model('device_pic')
  75. model_pic.farm_id = gateway['farm_id']
  76. model_pic.gateway_id = gateway['id']
  77. model_pic.device_id = id
  78. model_pic.pic = file
  79. model_pic.insert()
  80. def hardware(self, id, hardware_id, farm, gateway, hard):
  81. if hardware_id and id > 0:
  82. model = Demeter.model('hardware')
  83. model.hardware_id = hardware_id
  84. info = model.select(type='fetchone')
  85. if not info:
  86. model.farm_id = farm
  87. model.hardware_id = hardware_id
  88. model.gateway_id = gateway
  89. model.device_id = id
  90. model.hardware_type = hard
  91. model.insert()