#!/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()