Beispiel #1
0
class Device(StandardModel):
    __tablename__ = 'devices'

    uuid = db.Column(UUID(as_uuid=True), nullable=True)
    address = db.Column(db.String(100), nullable=True)
    poll_rate = db.Column(db.String(100), nullable=True)
    module_id = db.Column(UUID(as_uuid=True), db.ForeignKey('modules.id'))

    module = db.relationship("Module", back_populates="devices")

    def get_device_datapoints(self) -> typing.List:
        return self.module.module_device_type.device_type_datapoints

    def summary(self) -> dict:
        return dict(id=str(self.id),
                    module_id=str(self.module_id) if self.module_id else None,
                    uuid=str(self.uuid),
                    address=self.address,
                    poll_rate=self.poll_rate,
                    datapoints=[
                        datapoint.summary()
                        for datapoint in self.get_device_datapoints()
                    ])

    def module_summary(self) -> dict:
        return dict(
            id=str(self.id),
            uuid=str(self.uuid),
            address=self.address,
            poll_rate=self.poll_rate,
        )
class DeviceTypeDatapoint(StandardModel):
    __tablename__ = 'device_type_datapoints'

    name = db.Column(db.String(100), nullable=True)
    units = db.Column(db.String(100), nullable=True)
    code = db.Column(db.String(100), nullable=True)
    legend = db.Column(db.String(100), nullable=True)
    writable = db.Column(db.Boolean, nullable=True)
    module_device_type_id = db.Column(UUID(as_uuid=True),
                                      db.ForeignKey('module_device_types.id'))

    module_device_type = db.relationship(
        "ModuleDeviceType", back_populates="device_type_datapoints")

    def summary(self) -> dict:
        return dict(
            id=str(self.id),
            module_device_type_id=str(self.module_device_type_id)
            if self.module_device_type else None,
            name=self.name,
            units=self.units,
            code=self.code,
            legend=self.legend,
            writable=self.writable,
        )
class Protocol(StandardModel):
    __tablename__ = 'protocols'

    name = db.Column(db.String(100), nullable=True)
    datatype_id = db.Column(UUID(as_uuid=True), db.ForeignKey('data_types.id'))

    module_device_types = db.relationship("ModuleDeviceType",
                                          back_populates="protocol")
    datatype = db.relationship("DataType", back_populates="protocols")

    def summary(self) -> dict:
        return dict(
            id=str(self.id),
            datatype_id=str(self.datatype_id),
            name=self.name,
        )
Beispiel #4
0
class ModuleDeviceType(StandardModel):
    __tablename__ = 'module_device_types'

    manufacturer = db.Column(db.String(100), nullable=True)
    model = db.Column(db.String(100), nullable=True)
    code = db.Column(db.String(100), nullable=True)
    protocol_id = db.Column(UUID(as_uuid=True), db.ForeignKey('protocols.id'))

    device_type_datapoints = db.relationship("DeviceTypeDatapoint", lazy='dynamic', back_populates="module_device_type")
    protocol = db.relationship("Protocol", back_populates="module_device_types")
    modules = db.relationship("Module", back_populates="module_device_type")

    def summary(self) -> dict:
        return dict(
            id=str(self.id),
            protocol_id=str(self.protocol_id),
            code=self.code,
            model=self.model,
            manufacturer=self.manufacturer,
        )
Beispiel #5
0
class DataType(StandardModel):
    __tablename__ = 'data_types'

    name = db.Column(db.String(100), nullable=True)

    protocols = db.relationship("Protocol", back_populates="datatype")

    def summary(self) -> dict:
        return dict(
            id=str(self.id),
            name=self.name,
        )
Beispiel #6
0
class ModuleNotification(TimeScaleModel):
    __tablename__ = 'module_notifications'
    __timestamp_field__ = 'time'

    time = db.Column(db.DateTime,
                     nullable=False,
                     primary_key=True,
                     default=datetime.datetime.utcnow)
    message = db.Column(db.String(250), nullable=False)

    module_id = db.Column(UUID(as_uuid=True), db.ForeignKey('modules.id'))

    module = db.relationship("Module", back_populates="module_notification")
Beispiel #7
0
class Module(StandardModel):
    __tablename__ = 'modules'

    mac = db.Column(db.String(100), nullable=True)
    module_device_type_id = db.Column(UUID(as_uuid=True),
                                      db.ForeignKey('module_device_types.id'))

    devices = db.relationship("Device",
                              lazy='dynamic',
                              back_populates="module")
    module_notification = db.relationship("ModuleNotification",
                                          lazy='dynamic',
                                          back_populates="module")
    module_device_type = db.relationship("ModuleDeviceType",
                                         back_populates="modules")

    def summary(self) -> dict:
        return dict(
            id=str(self.id),
            module_device_type_id=str(self.module_device_type_id)
            if self.module_device_type_id else None,
            mac=self.mac,
            devices=[device.module_summary() for device in self.devices])