123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- demeter service
- name:record_pic.py 处理摄像头的图片数据
- author:rabin
- key:pic/图片名_图片总数_当前序号/gateway/device
- """
- import time
- import json
- import uuid
- from datetime import *
- from demeter.core import *
- class Record_pic(object):
- pic = {}
- def handle(self, config, value):
- method = config['type'].split('_')
- name = method[0] + '.jpg'
- if name not in self.pic:
- self.pic[name] = {}
- total = int(method[1])
- index = int(method[2])
- self.pic[name][index] = value
- picLen = len(self.pic[name])
- if picLen >= total:
- self.create(name, config)
- def create(self, name, config):
- pic = sorted(self.pic[name].items(), key=lambda e:e[0], reverse=False)
- data = []
- day = str(date.today())
- day = day.split('-')
- file_name = str(uuid.uuid5(uuid.uuid1(), 'file'))
- file_path = day[0] + '/' + day[1] + '/' + day[2]
- file_path = File.mkdirs(os.path.join(Demeter.path, 'runtime','camera', file_path)) + '/' + Demeter.md5(file_name) + '.jpg'
- for value in pic:
- data.append(value[1])
- with open(file_path, 'wb') as f:
- f.writelines(data)
- del self.pic[name]
- file_path = file_path.replace(Demeter.path + 'runtime', '')
- self.write(file_path, name, config)
- def write(self, file, name, config):
- show_value = file
- value = 0
- model = Demeter.model('device_gateway')
- model.hardware_id = config['parent']
- gateway = model.select(type='fetchone')
- if gateway:
- model.id = gateway['id']
- model.update(status=True,farm_id=gateway['farm_id'])
- model = Demeter.model('device_info')
- model.hardware_id = config['child']
- device = model.select(type='fetchone')
- model_type = Demeter.model('hardware_type')
- model_type.key = config['method']
- hard = model_type.select(type='fetchone')
- if device:
- #update
- model.id = device['id']
- id = device['id']
- model.update(farm_id=gateway['farm_id'], num=value,show=show_value,status=True,cdate='time')
- else:
- #insert
- model.hardware_id = config['child']
- model.farm_id = gateway['farm_id']
- model.name = name
- model.hardware_type = hard['id']
- model.gateway_id = gateway['id']
- model.num = value
- model.show = show_value
- model.status = True
- id = model.insert()
- self.hardware(id, config['child'], gateway['farm_id'],gateway['id'], hard['id'])
- model_pic = Demeter.model('device_pic')
- model_pic.farm_id = gateway['farm_id']
- model_pic.gateway_id = gateway['id']
- model_pic.device_id = id
- model_pic.pic = file
- model_pic.insert()
- def hardware(self, id, hardware_id, farm, gateway, hard):
- if hardware_id and id > 0:
- model = Demeter.model('hardware')
- model.hardware_id = hardware_id
- info = model.select(type='fetchone')
- if not info:
- model.farm_id = farm
- model.hardware_id = hardware_id
- model.gateway_id = gateway
- model.device_id = id
- model.hardware_type = hard
- model.insert()
|