Skip to content
Snippets Groups Projects
Commit f7d48cbe authored by Stefano Di Frischia's avatar Stefano Di Frischia
Browse files

L2SS-234: Add mapper classes to archiving base

parent e953c311
No related branches found
No related tags found
1 merge request!59L2SS-234: Inspect archive from python
......@@ -112,8 +112,6 @@ def get_attribute_value_by_hours(attribute_fqname: str, hours: float = 1.0):
join(Attribute,Attribute.att_conf_id==base_class.att_conf_id).\
filter(and_(Attribute.att_conf_id == attr_id,base_class.data_time >= time_delta_db, \
base_class.data_time <= time_now_db)).order_by(base_class.data_time).all()
#timestamp = [item[0].strftime("%Y-%m-%d %X:%f") for item in result]
#value = [item[1] for item in result]
return result
def get_attribute_value_by_interval(attribute_fqname: str, start_time: datetime, stop_time: datetime):
......@@ -132,6 +130,4 @@ def get_attribute_value_by_interval(attribute_fqname: str, start_time: datetime,
join(Attribute,Attribute.att_conf_id==base_class.att_conf_id).\
filter(and_(Attribute.att_conf_id == attr_id,base_class.data_time >= str(start_time), \
base_class.data_time <= str(stop_time))).order_by(base_class.data_time).all()
#timestamp = [item[0].strftime("%Y-%m-%d %X:%f") for item in result]
#value = [item[1] for item in result]
return result
#! /usr/bin/env python3
from sqlalchemy.dialects.mysql.types import INTEGER
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.dialects.mysql import DOUBLE,TIMESTAMP
from sqlalchemy.dialects.mysql import DOUBLE,TIMESTAMP,BLOB, FLOAT, BIGINT
from sqlalchemy.sql.expression import table
#Declarative system used to define classes mapped to relational DB tables
Base = declarative_base()
class Attribute(Base):
'''
"""
Class that represents a Tango Attribute mapped to table 'att_conf'
'''
"""
__tablename__ = 'att_conf'
__table_args__ = {'extend_existing': True}
......@@ -31,9 +32,9 @@ class Attribute(Base):
% (self.att_name,self.att_conf_data_type_id,self.att_ttl,self.facility,self.domain,self.family,self.member,self.name)
class DataType(Base):
'''
"""
Class that represents a Tango Data Type mapped to table 'att_conf_data_type'
'''
"""
__tablename__ = 'att_conf_data_type'
__table_args__ = {'extend_existing': True}
......@@ -44,28 +45,322 @@ class DataType(Base):
return "<DataType(type='%s')>" \
% (self.data_type)
class Scalar_Double_RO(Base):
'''
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devdouble_ro'
'''
__tablename__ = 'att_scalar_devdouble_ro'
__table_args__ = {'extend_existing': True}
# Primary key is not defined for this kind of tables, but SQLAlchemy requires a mandatory
class Scalar(Base):
"""
Abstract class that represents Super-class of Scalar mapper classes
"""
__abstract__ = True
# Primary key is not defined for tables which store values, but SQLAlchemy requires a mandatory
# primary key definition. Anyway, this definition is on Python-side and does not compromise
# DBMS architecture
att_conf_id = Column(Integer, primary_key=True)
data_time = Column(TIMESTAMP)
recv_time = Column(TIMESTAMP)
insert_time = Column(TIMESTAMP, primary_key=True)
value_r = Column(DOUBLE, primary_key=True)
quality = Column(Integer)
att_error_desc_id = Column(Integer)
class Scalar_Boolean(Scalar):
"""
Abstract class that represents Parent class of Scalar Boolean mapper classes
"""
__abstract__ = True
value_r = Column(Integer)
class Scalar_Boolean_RO(Scalar_Boolean):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devdouble_ro'
"""
__tablename__ = 'att_scalar_devboolean_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Boolean_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Boolean_RW(Scalar_Boolean):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devdouble_rw'
"""
__tablename__ = 'att_scalar_devboolean_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(Integer)
def __repr__(self):
return "<Scalar_Boolean_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Double(Scalar):
"""
Abstract class that represents Parent class of Scalar Double mapper classes
"""
__abstract__ = True
value_r = Column(DOUBLE)
class Scalar_Double_RO(Scalar_Double):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devdouble_ro'
"""
__tablename__ = 'att_scalar_devdouble_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Double_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Double_RW(Scalar_Double):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devdouble_rw'
"""
__tablename__ = 'att_scalar_devdouble_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(DOUBLE)
def __repr__(self):
return "<Scalar_Double_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Encoded(Scalar):
"""
Abstract class that represents Parent class of Scalar Encoded mapper classes
"""
__abstract__ = True
value_r = Column(BLOB)
class Scalar_Encoded_RO(Scalar_Encoded):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devencoded_ro'
"""
__tablename__ = 'att_scalar_devencoded_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Encoded_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Encoded_RW(Scalar_Encoded):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devencoded_rw'
"""
__tablename__ = 'att_scalar_devencoded_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(BLOB)
def __repr__(self):
return "<Scalar_Encoded_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Enum(Scalar):
"""
Abstract class that represents Parent class of Scalar Enum mapper classes
"""
__abstract__ = True
value_r = Column(Integer)
class Scalar_Enum_RO(Scalar_Enum):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devenum_ro'
"""
__tablename__ = 'att_scalar_devenum_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Enum_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Enum_RW(Scalar_Enum):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devenum_rw'
"""
__tablename__ = 'att_scalar_devenum_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(Integer)
def __repr__(self):
return "<Scalar_Enum_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Float(Scalar):
"""
Abstract class that represents Parent class of Scalar Float mapper classes
"""
__abstract__ = True
value_r = Column(FLOAT)
class Scalar_Float_RO(Scalar_Float):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devfloat_ro'
"""
__tablename__ = 'att_scalar_devfloat_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Float_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Float_RW(Scalar_Float):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devfloat_rw'
"""
__tablename__ = 'att_scalar_devfloat_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(FLOAT)
def __repr__(self):
return "<Scalar_Float_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Long64(Scalar):
"""
Abstract class that represents Parent class of Scalar Long64 mapper classes
"""
__abstract__ = True
value_r = Column(BIGINT)
class Scalar_Long64_RO(Scalar_Long64):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devlong64_ro'
"""
__tablename__ = 'att_scalar_devlong64_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Long64_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Long64_RW(Scalar_Long64):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devlong64_rw'
"""
__tablename__ = 'att_scalar_devlong64_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(BIGINT)
def __repr__(self):
return "<Scalar_Long64_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Long(Scalar):
"""
Abstract class that represents Parent class of Scalar Long mapper classes
"""
__abstract__ = True
value_r = Column(INTEGER)
class Scalar_Long_RO(Scalar_Long):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devlong_ro'
"""
__tablename__ = 'att_scalar_devlong_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Long_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Long_RW(Scalar_Long):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devlong_rw'
"""
__tablename__ = 'att_scalar_devlong_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(INTEGER)
def __repr__(self):
return "<Scalar_Long_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_Short(Scalar):
"""
Abstract class that represents Parent class of Scalar Short mapper classes
"""
__abstract__ = True
value_r = Column(Integer)
class Scalar_Short_RO(Scalar_Short):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devshort_ro'
"""
__tablename__ = 'att_scalar_devshort_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_Short_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_Short_RW(Scalar_Short):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devshort_rw'
"""
__tablename__ = 'att_scalar_devshort_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(Integer)
def __repr__(self):
return "<Scalar_Short_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_State(Scalar):
"""
Abstract class that represents Parent class of Scalar State mapper classes
"""
__abstract__ = True
value_r = Column(Integer)
class Scalar_State_RO(Scalar_State):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devstate_ro'
"""
__tablename__ = 'att_scalar_devstate_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_State_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_State_RW(Scalar_State):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devstate_rw'
"""
__tablename__ = 'att_scalar_devstate_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(Integer)
def __repr__(self):
return "<Scalar_State_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
class Scalar_String(Scalar):
"""
Abstract class that represents Parent class of Scalar String mapper classes
"""
__abstract__ = True
value_r = Column(String)
class Scalar_String_RO(Scalar_String):
"""
Class that represents a Tango Scalar Read-Only Value mapped to table 'att_scalar_devstring_ro'
"""
__tablename__ = 'att_scalar_devstring_ro'
__table_args__ = {'extend_existing': True}
def __repr__(self):
return "<Scalar_String_RO(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.quality,self.att_error_desc_id)
class Scalar_String_RW(Scalar_String):
"""
Class that represents a Tango Scalar Read-Write Value mapped to table 'att_scalar_devstring_rw'
"""
__tablename__ = 'att_scalar_devstring_rw'
__table_args__ = {'extend_existing': True}
value_w = Column(String)
def __repr__(self):
return "<Scalar_String_RW(att_conf_id='%s',data_time='%s',recv_time='%s',insert_time='%s',value_r='%s',value_w='%s',quality='%s',att_error_desc_id='%s')>" \
% (self.att_conf_id,self.data_time,self.recv_time,self.insert_time,self.value_r,self.value_w,self.quality,self.att_error_desc_id)
def get_class_by_tablename(tablename: str):
"""
Returns class reference mapped to a table.
......
%% Cell type:code id:c7dd05cd tags:
``` python
import sys
sys.path.append('/hosthome/tango/devices')
from util.archiver import *
from util.archiver_base import *
from toolkit.archiver import *
from toolkit.archiver_base import *
import mysql.connector
```
%% Cell type:code id:57834b5e tags:
``` python
dev_rand = DeviceProxy("LTS/RandomData/1")
dev_rand.get_attribute_list()
```
%% Output
['rnd1', 'rnd2', 'rnd3', 'rnd4', 'rnd5', 'rnd6', 'rnd7', 'rnd8', 'rnd9', 'rnd10', 'rnd11', 'rnd12', 'rnd13', 'rnd14', 'rnd15', 'rnd16', 'rnd17', 'rnd18', 'rnd19', 'rnd20', 'State', 'Status']
%% Cell type:code id:6816f78f tags:
``` python
cm = DeviceProxy("archiving/hdbpp/confmanager01")
```
%% Cell type:code id:7bda559b tags:
``` python
get_all_archived_attributes()
```
%% Output
[<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd1',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd1')>,
<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd3',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd3')>]
%% Cell type:code id:f0ef38a4 tags:
``` python
add_attribute_to_archiver('lts/randomdata/1/rnd7',3000,1000)
attr_fullname = 'lts/randomdata/1/rnd5'
add_attribute_to_archiver(attr_fullname,1000,1000)
```
%% Cell type:code id:7d0746e7 tags:
``` python
remove_attribute_from_archiver('lts/randomdata/1/rnd7')
remove_attribute_from_archiver(attr_fullname)
```
%% Cell type:code id:129a75c6 tags:
``` python
get_all_archived_attributes()
```
%% Output
[<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd2',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd2')>,
[<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd1',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd1')>,
<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd3',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd3')>,
<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd15',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd15')>,
<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd7',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd7')>]
<Attribute(fullname='tango://databaseds:10000/lts/randomdata/1/rnd5',data_type ='37',ttl='0',facility ='tango://databaseds:10000',domain ='lts',family ='randomdata',member ='1',name ='rnd5')>]
%% Cell type:code id:5f9865ee tags:
``` python
main_att = 'lts/randomdata/1/rnd7'
main_att = 'lts/randomdata/1/rnd5'
get_attribute_id(main_att)
```
%% Output
4
3
%% Cell type:code id:2a3707a3 tags:
``` python
get_attribute_datatype(main_att)
```
%% Output
'scalar_devdouble_ro'
%% Cell type:code id:18100623 tags:
``` python
get_attribute_value_by_hours(main_att,24)
```
%% Output
[<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:21.892781',recv_time='2021-06-23 15:00:23.040862',insert_time='2021-06-23 15:00:23.042065',value_r='0.9263038657',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:24.909897',recv_time='2021-06-23 15:00:24.911329',insert_time='2021-06-23 15:00:24.912696',value_r='0.6869173892',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:27.909636',recv_time='2021-06-23 15:00:27.910767',insert_time='2021-06-23 15:00:27.912330',value_r='0.1070759253',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:30.909940',recv_time='2021-06-23 15:00:30.911529',insert_time='2021-06-23 15:00:30.913542',value_r='0.2699634793',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:33.910365',recv_time='2021-06-23 15:00:33.910897',insert_time='2021-06-23 15:00:33.911735',value_r='0.8323236082',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:36.910232',recv_time='2021-06-23 15:00:36.911389',insert_time='2021-06-23 15:00:36.912912',value_r='0.7979368397',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:39.909182',recv_time='2021-06-23 15:00:39.909785',insert_time='2021-06-23 15:00:39.910372',value_r='0.2178505902',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:42.909868',recv_time='2021-06-23 15:00:42.911390',insert_time='2021-06-23 15:00:42.913124',value_r='0.6949464171',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:45.909946',recv_time='2021-06-23 15:00:45.911036',insert_time='2021-06-23 15:00:45.912787',value_r='0.1093199257',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:48.909615',recv_time='2021-06-23 15:00:48.910722',insert_time='2021-06-23 15:00:48.912259',value_r='0.9768430390',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:51.909200',recv_time='2021-06-23 15:00:51.910290',insert_time='2021-06-23 15:00:51.911793',value_r='0.8888621550',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:54.909296',recv_time='2021-06-23 15:00:54.910679',insert_time='2021-06-23 15:00:54.912332',value_r='0.3799629383',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='4',data_time='2021-06-23 15:00:57.909804',recv_time='2021-06-23 15:00:57.910850',insert_time='2021-06-23 15:00:57.912311',value_r='0.7681945847',quality='2',att_error_desc_id='None')>]
[<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:07.119788',recv_time='2021-06-25 15:24:07.930917',insert_time='2021-06-25 15:24:07.932652',value_r='0.2033680434',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:08.120465',recv_time='2021-06-25 15:24:08.124548',insert_time='2021-06-25 15:24:08.127058',value_r='0.9330212368',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:09.120343',recv_time='2021-06-25 15:24:09.123946',insert_time='2021-06-25 15:24:09.126367',value_r='0.1619766261',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:10.120398',recv_time='2021-06-25 15:24:10.123090',insert_time='2021-06-25 15:24:10.125112',value_r='0.1600708165',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:11.120518',recv_time='2021-06-25 15:24:11.123866',insert_time='2021-06-25 15:24:11.125772',value_r='0.1953627874',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:12.120626',recv_time='2021-06-25 15:24:12.123934',insert_time='2021-06-25 15:24:12.126119',value_r='0.4233485985',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:13.120682',recv_time='2021-06-25 15:24:13.123542',insert_time='2021-06-25 15:24:13.125435',value_r='0.1744663070',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:14.120714',recv_time='2021-06-25 15:24:14.123980',insert_time='2021-06-25 15:24:14.126306',value_r='0.9820536486',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:15.120239',recv_time='2021-06-25 15:24:15.122162',insert_time='2021-06-25 15:24:15.123428',value_r='0.9547788992',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:16.120990',recv_time='2021-06-25 15:24:16.124006',insert_time='2021-06-25 15:24:16.126385',value_r='0.1627633385',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-25 15:24:17.120261',recv_time='2021-06-25 15:24:17.124313',insert_time='2021-06-25 15:24:17.126494',value_r='0.2554102953',quality='2',att_error_desc_id='None')>]
%% Cell type:code id:ab476d57 tags:
``` python
get_attribute_value_by_interval('lts/randomdata/1/rnd15', '2021-06-21 13:20:00', '2021-06-23 15:21:00')
get_attribute_value_by_interval(main_att, '2021-06-21 13:20:00', '2021-06-23 15:21:00')
```
%% Output
[<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-21 14:50:06.179562',recv_time='2021-06-21 14:50:07.180444',insert_time='2021-06-21 14:50:07.204869',value_r='0.1400088842',quality='2',att_error_desc_id='None')>,
<Scalar_Double_RO(att_conf_id='3',data_time='2021-06-21 14:50:10.213110',recv_time='2021-06-21 14:50:10.214549',insert_time='2021-06-21 14:50:10.216117',value_r='0.6627579896',quality='2',att_error_desc_id='None')>]
[]
%% Cell type:code id:21c9b91b tags:
``` python
rows = get_attribute_value_by_hours(main_att,2)
a = rows[0]
a.value_r
```
%% Output
Decimal('0.2033680434')
%% Cell type:code id:762ea947 tags:
``` python
a.__class__.__bases__
```
%% Output
(toolkit.archiver_base.Scalar_Double,)
%% Cell type:code id:56b31348 tags:
``` python
values = [float(item.value_r) for item in rows]
print(values)
```
%% Output
[0.2033680434, 0.9330212368, 0.1619766261, 0.1600708165, 0.1953627874, 0.4233485985, 0.174466307, 0.9820536486, 0.9547788992, 0.1627633385, 0.2554102953]
%% Cell type:code id:a26aa8f0 tags:
``` python
timestamps = [item.recv_time.strftime("%Y-%m-%d %X:%f") for item in rows]
print(timestamps)
```
%% Output
['2021-06-25 15:24:07:930917', '2021-06-25 15:24:08:124548', '2021-06-25 15:24:09:123946', '2021-06-25 15:24:10:123090', '2021-06-25 15:24:11:123866', '2021-06-25 15:24:12:123934', '2021-06-25 15:24:13:123542', '2021-06-25 15:24:14:123980', '2021-06-25 15:24:15:122162', '2021-06-25 15:24:16:124006', '2021-06-25 15:24:17:124313']
%% Cell type:code id:c2ad3416 tags:
``` python
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment