Commit 02bd1f21 authored by Takhir Fakhrutdinov's avatar Takhir Fakhrutdinov

allsky camera

parent 42c89cd2
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -166,6 +166,10 @@ def _create_m2mFile(): ...@@ -166,6 +166,10 @@ def _create_m2mFile():
from .meteoFile import eop2mFile from .meteoFile import eop2mFile
return eop2mFile return eop2mFile
def _create_allskyFile():
from .meteoFile import allskyFile
return allskyFile
def _create_reqFile(): def _create_reqFile():
from .reqFile import reqFile from .reqFile import reqFile
return reqFile return reqFile
...@@ -485,4 +489,48 @@ meteo = { ...@@ -485,4 +489,48 @@ meteo = {
} }
factory.register_file('M2M', _create_m2mFile, schema=meteo) factory.register_file('M2M', _create_m2mFile, schema=meteo)
allsky = {
"type": "array",
"items": {
"allOf": [
{
"type": "object",
"required": ["header","meteo"],
"properties": {
"header": {
"type": "object",
"required": ["originator","message_type","message_id"],
"properties": {
"creation_date":{"$ref": "#/$defs/timestamp"},
"originator": {"type": "string"},
"message_type": {"type": "string","enum":["meteo"]},
"message_id": {"type": "string"},
"time_system": {"type": "string","enum":["UTC"]},
"comment": {"type": "string"}
}
},
"meteo":{
"type":"object",
"required": ["metadata","allsky"],
"properties": {
"allsky":{"$ref": "#/$defs/base64"},
"metadata":{
"type": "object",
"required": ["station","serial_number"],
"properties": {
"station": {"type": "string"},
"serial_number": {"type": "string"}
}
}
}
}
}
}
]
},
"$defs": {
"timestamp": {"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})([T ](\\d{2}):(\\d{2})(:(\\d{2}(?:\\.\\d+)?))?)?$"},
"base64": {"type":"string","pattern":"^(?=(.{4})*$)[A-Za-z0-9+\\/]*={0,2}$"}
}
}
factory.register_file('ASKY', _create_allskyFile, schema=allsky)
...@@ -67,12 +67,12 @@ class meteoBaseFile(baseFile): ...@@ -67,12 +67,12 @@ class meteoBaseFile(baseFile):
select a.dev,l.v model select a.dev,l.v model
from main.t_devattr a from main.t_devattr a
join main.t_attrtypelist l using(atype) join main.t_attrtypelist l using(atype)
where atype in (40002,50002) where atype in (40002,50002,60002)
and l.rec = (a.v)::integer and l.rec = (a.v)::integer
) r0 join ( ) r0 join (
select a.dev,a.v serial_number select a.dev,a.v serial_number
from main.t_devattr a from main.t_devattr a
where atype in (40003,50003) where atype in (40003,50003,60003)
) r1 using(dev) ) r1 using(dev)
where model=$1 and serial_number=$2 where model=$1 and serial_number=$2
""",model,serial_number) """,model,serial_number)
...@@ -217,8 +217,6 @@ class eop2mFile(meteoBaseFile): ...@@ -217,8 +217,6 @@ class eop2mFile(meteoBaseFile):
:linenos: :linenos:
:caption: load_data :caption: load_data
""" """
from collections import namedtuple
logger.info('Загрузка файла...') logger.info('Загрузка файла...')
await super().load(fd,args) await super().load(fd,args)
data = json.load(fd) data = json.load(fd)
...@@ -248,3 +246,55 @@ class eop2mFile(meteoBaseFile): ...@@ -248,3 +246,55 @@ class eop2mFile(meteoBaseFile):
await self.copy_to_table('t_devmetrix',source=fo,schema_name='xd',delimiter='\t') await self.copy_to_table('t_devmetrix',source=fo,schema_name='xd',delimiter='\t')
class allskyFile(meteoBaseFile):
""" Загрузка данных ЭОП 2М
"""
def __init__(self,*args,**kwargs):
""" Конструктор.
.. literalinclude:: ../../../../fte/lib/libpy/rrdFile.py
:language: python
:lines: 229,238-240
:linenos:
:caption: __init__
"""
super().__init__(*args,**kwargs)
self.dbtype = 'asky'
async def load(self,fd,args):
""" Метод. Загрузка файла.
.. literalinclude:: ../../../../fte/lib/libpy/weaFile.py
:language: python
:lines: 27,36-
:linenos:
:caption: load_data
"""
import base64
logger.info('Загрузка файла...')
await super().load(fd,args)
data = json.load(fd)
fo,devs = io.BytesIO(), set()
self.fid = await self.getfid()
async with self.transaction():
for m in data:
r = m.get('meteo')
if r:
crops = base64.b64decode(r['allsky'])
model,serial_number = r['metadata']['station'],r['metadata']['serial_number']
tm = datetime.fromisoformat(m['header']['creation_date']).replace(microsecond=0)
self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm)
dev = await self.get_device(model,serial_number)
await self.check_priv_device(dev)
devs.add(dev)
night = await self.fetchval("select * from main.devget_night($1,$2)",dev,tm)
await self.execute("select * from template.partition_table('xd.t_allsky'::regclass,$1)",tm)
await self.execute("insert into xd.t_allsky values($1,$2,$3,$4,$5)",self.fid,dev,tm,night,crops)
self.fileattr = dict(devs=list(devs))
self.create_doc()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment