File size: 3,384 Bytes
0cd8655 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | """BMS connection, discovery, and canonical point mapping. No secrets."""
from datetime import datetime
from sqlalchemy import Boolean, Column, DateTime, Float, ForeignKey, Index, Integer, JSON, String, UniqueConstraint
from database.base import Base
class BmsConnectionDB(Base):
__tablename__ = "bms_connections"
id = Column(String, primary_key=True)
building_id = Column(String, nullable=True, index=True)
protocol = Column(String, nullable=False)
host = Column(String, nullable=True)
port = Column(Integer, nullable=True)
enabled = Column(Boolean, default=True)
connected = Column(Boolean, default=False)
last_connected_at = Column(DateTime, nullable=True)
last_error = Column(String, nullable=True)
write_enabled = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow)
__table_args__ = (Index("ix_bms_conn_bldg", "building_id", "protocol"),)
class BmsDeviceDB(Base):
__tablename__ = "bms_devices"
id = Column(String, primary_key=True)
connection_id = Column(String, ForeignKey("bms_connections.id"), nullable=False, index=True)
device_identifier = Column(String, nullable=False)
name = Column(String, nullable=True)
device_type = Column(String, nullable=True)
status = Column(String, nullable=True)
metadata_json = Column(JSON, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow)
__table_args__ = (UniqueConstraint("connection_id", "device_identifier", name="uq_bms_device_ident"),)
class BmsPointDB(Base):
__tablename__ = "bms_points"
id = Column(String, primary_key=True)
device_id = Column(String, ForeignKey("bms_devices.id"), nullable=False, index=True)
point_identifier = Column(String, nullable=False)
name = Column(String, nullable=True)
object_type = Column(String, nullable=True)
object_instance = Column(String, nullable=True)
register = Column(String, nullable=True)
unit = Column(String, nullable=True)
data_type = Column(String, nullable=True)
readable = Column(Boolean, default=True)
writable = Column(Boolean, default=False)
min_value = Column(Float, nullable=True)
max_value = Column(Float, nullable=True)
enabled = Column(Boolean, default=True)
metadata_json = Column(JSON, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow)
__table_args__ = (UniqueConstraint("device_id", "point_identifier", name="uq_bms_point_ident"),)
class EquipmentPointMappingDB(Base):
__tablename__ = "equipment_point_mappings"
id = Column(String, primary_key=True)
equipment_id = Column(String, nullable=False, index=True)
canonical_point = Column(String, nullable=False)
bms_point_id = Column(String, ForeignKey("bms_points.id"), nullable=False, index=True)
direction = Column(String, nullable=False)
safety_enabled = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow)
__table_args__ = (UniqueConstraint("equipment_id", "canonical_point", name="uq_eq_canonical"),)
|