42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from sqlalchemy import Column, String, Float, DateTime, Integer, ForeignKey, JSON, Boolean
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.db.session import Base
|
|
|
|
|
|
class Telemetry(Base):
|
|
__tablename__ = "telemetry"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
device_id = Column(String, ForeignKey("devices.id", ondelete="CASCADE"), nullable=False)
|
|
|
|
# GPS data
|
|
latitude = Column(Float, nullable=True)
|
|
longitude = Column(Float, nullable=True)
|
|
altitude = Column(Float, nullable=True)
|
|
speed = Column(Float, nullable=True)
|
|
heading = Column(Float, nullable=True)
|
|
satellites = Column(Integer, nullable=True)
|
|
gps_fixed = Column(Boolean, default=False) # GPS fix status
|
|
|
|
# Device status
|
|
battery_level = Column(Float, nullable=True) # Battery percentage (0-100)
|
|
battery_voltage = Column(Float, nullable=True) # Actual battery voltage
|
|
signal_strength = Column(Integer, nullable=True) # RSSI value
|
|
temperature = Column(Float, nullable=True)
|
|
humidity = Column(Float, nullable=True) # Humidity percentage
|
|
|
|
# Power monitoring
|
|
solar_voltage = Column(Float, nullable=True) # Solar panel voltage
|
|
|
|
# Additional data
|
|
extra_data = Column(JSON, nullable=True)
|
|
|
|
# Timestamps
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now()) # Server timestamp
|
|
device_timestamp = Column(DateTime(timezone=True), nullable=True) # Device timestamp
|
|
|
|
# Relationship
|
|
device = relationship("Device", back_populates="telemetry")
|