citizenwatt-refactor/base/libcitizenwatt/database.py

66 lines
2.1 KiB
Python

#!/usr/bin/env python3
from sqlalchemy import Column, Float
from sqlalchemy import ForeignKey, Integer, Text, VARCHAR
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Sensor(Base):
__tablename__ = "sensors"
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(255), unique=True)
type_id = Column(Integer,
ForeignKey("measures_types.id", ondelete="CASCADE"),
nullable=False)
measures = relationship("Measures", passive_deletes=True)
last_timer = Column(Integer)
type = relationship("MeasureType", lazy="joined")
aes_key = Column(VARCHAR(255))
base_address = Column(VARCHAR(30))
class Measures(Base):
__tablename__ = "measures"
id = Column(Integer, primary_key=True)
sensor_id = Column(Integer,
ForeignKey("sensors.id", ondelete="CASCADE"),
nullable=False)
value = Column(Float)
timestamp = Column(Integer, index=True)
night_rate = Column(Integer) # Boolean, 1 if night_rate
class Provider(Base):
__tablename__ = "providers"
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(length=255), unique=True)
type_id = Column(Integer,
ForeignKey("measures_types.id", ondelete="CASCADE"),
nullable=False)
day_slope_watt_euros = Column(Float)
day_constant_watt_euros = Column(Float)
night_slope_watt_euros = Column(Float)
night_constant_watt_euros = Column(Float)
current = Column(Integer)
threshold = Column(Integer)
class MeasureType(Base):
__tablename__ = "measures_types"
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(255), unique=True)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
login = Column(VARCHAR(length=255), unique=True)
password = Column(Text)
is_admin = Column(Integer)
# Stored as seconds since beginning of day
start_night_rate = Column(Integer)
end_night_rate = Column(Integer)