Exemple #1
0
class Math(CRUDMixin, db.Model):
    __tablename__ = "math"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)  # ID for influxdb entries
    name = db.Column(db.Text, default='Input Name')
    math_type = db.Column(db.Text, default=None)
    is_activated = db.Column(db.Boolean, default=False)
    period = db.Column(db.Float, default=15.0)  # Duration between readings
    inputs = db.Column(db.Text, default='')
    max_measure_age = db.Column(db.Integer, default=60.0)
    measure = db.Column(db.Text, default='Measurement')
    measure_units = db.Column(db.Text, default='unit')

    def is_active(self):
        """
        :return: Whether the sensor is currently activated
        :rtype: bool
        """
        return self.is_activated

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #2
0
class Dashboard(CRUDMixin, db.Model):
    __tablename__ = "dashboard"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    name = db.Column(db.Text, nullable=False, unique=True)
Exemple #3
0
class Function(CRUDMixin, db.Model):
    __tablename__ = "function"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    function_type = db.Column(db.Text, default='')
    name = db.Column(db.Text, default='Function Name')
Exemple #4
0
class EnergyUsage(CRUDMixin, db.Model):
    __tablename__ = "energy_usage"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)  # ID for influxdb entries
    name = db.Column(db.Text, default='Name')
    device_id = db.Column(db.Text, default='')
    measurement_id = db.Column(db.Text, db.ForeignKey('device_measurements.unique_id'), default='')
Exemple #5
0
class Method(CRUDMixin, db.Model):
    __tablename__ = "method"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    name = db.Column(db.Text, default='Method')
    method_type = db.Column(db.Text, default='')
    method_order = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #6
0
class ConditionalConditions(CRUDMixin, db.Model):
    __tablename__ = "conditional_data"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    conditional_id = db.Column(db.String,
                               db.ForeignKey('conditional.unique_id'),
                               default=None)
    condition_type = db.Column(db.Text, default=None)

    # Sensor/Math
    measurement = db.Column(db.Text,
                            default='')  # which measurement to monitor
    max_age = db.Column(db.Integer, default=120)  # max age of the measurement

    # GPIO State
    gpio_pin = db.Column(db.Integer, default=0)

    # Output State
    output_id = db.Column(db.Text, default='')

    # Controller
    controller_id = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
class Remote(CRUDMixin, db.Model):
    __tablename__ = "remote"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    is_activated = db.Column(db.Boolean, default=False)
    host = db.Column(db.Text, default='')
    username = db.Column(db.Text, default='')
    password_hash = db.Column(db.Text, default='')

    def __reper__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #8
0
class Measurement(CRUDMixin, db.Model):
    __tablename__ = "measurements"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    name_safe = db.Column(db.Text)
    name = db.Column(db.Text)
    units = db.Column(db.Text)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #9
0
class Method(CRUDMixin, db.Model):
    __tablename__ = "method"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    name = db.Column(db.Text, default='Method')
    method_type = db.Column(db.Text, default='')
    method_order = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #10
0
class NoteTags(CRUDMixin, db.Model):
    __tablename__ = "note_tags"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)  # ID for influxdb entries
    name = db.Column(db.Text, default=None)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #11
0
class Conversion(CRUDMixin, db.Model):
    __tablename__ = "conversion"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    convert_unit_from = db.Column(db.Text)
    convert_unit_to = db.Column(db.Text)
    equation = db.Column(db.Text)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #12
0
class DisplayOrder(CRUDMixin, db.Model):
    __tablename__ = "displayorder"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    graph = db.Column(db.Text, default='')
    lcd = db.Column(db.Text, default='')
    math = db.Column(db.Text, default='')
    method = db.Column(db.Text, default='')
    pid = db.Column(db.Text, default='')
    relay = db.Column(db.Text, default='')
    remote_host = db.Column(db.Text, default='')
    sensor = db.Column(db.Text, default='')
    timer = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #13
0
class Conditional(CRUDMixin, db.Model):
    __tablename__ = "conditional"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    name = db.Column(db.Text, default='Conditional')

    is_activated = db.Column(db.Boolean, default=False)
    log_level_debug = db.Column(db.Boolean, default=False)
    conditional_statement = db.Column(db.Text, default='')
    period = db.Column(db.Float, default=60.0)
    start_offset = db.Column(db.Float, default=10.0)
    message_include_code = db.Column(db.Boolean, default=False)

    custom_options = db.Column(db.Text, default='')
Exemple #14
0
class LCD(CRUDMixin, db.Model):
    __tablename__ = "lcd"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    name = db.Column(db.Text, default='LCD')
    is_activated = db.Column(db.Boolean, default=False)
    period = db.Column(db.Float, default=30.0)
    location = db.Column(db.Text, default='27')
    i2c_bus = db.Column(db.Integer, default=1)
    multiplexer_address = db.Column(db.Text, default='')
    multiplexer_channel = db.Column(db.Integer, default=0)
    x_characters = db.Column(db.Integer, default=16)
    y_lines = db.Column(db.Integer, default=2)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
class Timer(CRUDMixin, db.Model):
    __tablename__ = "timer"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    name = db.Column(db.Text, default='Timer')
    is_activated = db.Column(db.Boolean, default=False)
    timer_type = db.Column(db.Text, default=None)
    relay_id = db.Column(db.Integer, db.ForeignKey('relay.id'), default=None)
    state = db.Column(db.Text, default=None)  # 'on' or 'off'
    time_start = db.Column(db.Text, default=None)
    time_end = db.Column(db.Text, default=None)
    duration_on = db.Column(db.Float, default=None)
    duration_off = db.Column(db.Float, default=None)

    def __reper__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
class DisplayOrder(CRUDMixin, db.Model):
    __tablename__ = "displayorder"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    dashboard = db.Column(db.Text, default='')
    function = db.Column(db.Text, default='')
    inputs = db.Column(db.Text, default='')
    lcd = db.Column(db.Text, default='')
    math = db.Column(db.Text, default='')
    method = db.Column(db.Text, default='')
    output = db.Column(db.Text, default='')
    remote_host = db.Column(db.Text, default='')
    timer = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #17
0
class MQTT(CRUDMixin, db.Model):
    __tablename__ = "mqtt"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    hostname = db.Column(db.Text, default='localhost')
    port = db.Column(db.Integer, default=1883)
    user = db.Column(db.Text, default='mycodo')
    passw = db.Column(db.Text, default='password')
    clientid = db.Column(db.Text, default='mycodo')
    keep_alive = db.Column(db.Integer, default=60)
    message_count = db.Column(db.Integer, default=0)
    topic_prefix = db.Column(db.Text, default='mycodo/')
    enabled = db.Column(db.Integer, default=0)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
class AlembicVersion(CRUDMixin, db.Model):
    __tablename__ = "alembic_version"
    __table_args__ = {'extend_existing': True}

    version_num = db.Column(db.String(32), primary_key=True, nullable=False, default=config.ALEMBIC_VERSION)

    def __repr__(self):
        return "<{cls}(version_number={s.version_num})>".format(s=self, cls=self.__class__.__name__)
Exemple #19
0
class SMTP(CRUDMixin, db.Model):
    __tablename__ = "smtp"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    host = db.Column(db.Text, default='smtp.gmail.com')
    ssl = db.Column(db.Boolean, default=1)
    port = db.Column(db.Integer, default=465)
    user = db.Column(db.Text, default='*****@*****.**')
    passw = db.Column(db.Text, default='password')
    email_from = db.Column(db.Text, default='*****@*****.**')
    hourly_max = db.Column(db.Integer, default=5)
    email_count = db.Column(db.Integer, default=0)
    smtp_wait_timer = db.Column(db.Integer, default=0)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #20
0
class User(UserMixin, CRUDMixin, db.Model):
    __tablename__ = "users"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    name = db.Column(db.VARCHAR(64), unique=True, index=True)
    password_hash = db.Column(db.VARCHAR(255))
    api_key = db.Column(db.BLOB, unique=True)
    email = db.Column(db.VARCHAR(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), default=None)
    theme = db.Column(db.VARCHAR(64))
    landing_page = db.Column(db.Text, default='live')
    language = db.Column(
        db.Text,
        default=None)  # Force the web interface to use a specific language

    # roles = db.relationship("Role", back_populates="user")

    def __repr__(self):
        output = "<User: <name='{name}', email='{email}' is_admin='{isadmin}'>"
        return output.format(name=self.name,
                             email=self.email,
                             isadmin=bool(self.role_id == 1))

    def set_password(self, new_password):
        """ saves a password hash  """
        if isinstance(new_password, str):
            new_password = new_password.encode('utf-8')
        self.password_hash = bcrypt.hashpw(new_password, bcrypt.gensalt())

    @staticmethod
    def check_password(password, hashed_password):
        """ validates a password """
        # Check type of password hashed_password to determine if it is a str
        # and should be encoded
        if isinstance(password, str):
            password = password.encode('utf-8')
        if isinstance(hashed_password, str):
            hashed_password = hashed_password.encode('utf-8')

        hashes_match = bcrypt.hashpw(password, hashed_password)
        return hashes_match
Exemple #21
0
class User(UserMixin, CRUDMixin, db.Model):
    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.VARCHAR(64), unique=True, index=True)
    password_hash = db.Column(db.VARCHAR(255))
    email = db.Column(db.VARCHAR(64), unique=True, index=True)
    role = db.Column(db.Integer, db.ForeignKey('roles.id'), default=None)
    theme = db.Column(db.VARCHAR(64))
    language = db.Column(
        db.Text,
        default=None)  # Force the web interface to use a specific language

    roles = db.relationship("Role", back_populates="user")

    def __repr__(self):
        output = "<User: <name='{name}', email='{email}' is_admin='{isadmin}'>"
        return output.format(name=self.name,
                             email=self.email,
                             isadmin=bool(self.role == 1))

    def set_password(self, new_password):
        """ saves a password hash  """
        self.password_hash = bcrypt.hashpw(new_password.encode('utf-8'),
                                           bcrypt.gensalt())

    @staticmethod
    def check_password(password, hashed_password):
        """ validates a password """
        hashes_match = bcrypt.hashpw(password.encode('utf-8'),
                                     hashed_password.encode('utf-8'))
        return hashes_match
Exemple #22
0
class CustomController(CRUDMixin, db.Model):
    __tablename__ = "custom_controller"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    name = db.Column(db.Text, default='Conditional')
    device = db.Column(db.Text, default='')

    is_activated = db.Column(db.Boolean, default=False)
    log_level_debug = db.Column(db.Boolean, default=False)

    custom_options = db.Column(db.Text, default='')

    def is_active(self):
        """
        :return: Whether the sensor is currently activated
        :rtype: bool
        """
        return self.is_activated

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #23
0
class ConditionalActions(CRUDMixin, db.Model):
    __tablename__ = "conditional_data"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    conditional_id = db.Column(db.String, db.ForeignKey('conditional.unique_id'), default=None)

    # Actions
    do_unique_id = db.Column(db.Text, default='')
    do_action = db.Column(db.Text, default='')  # what action, such as 'email', 'execute command', 'flash LCD'
    do_action_string = db.Column(db.Text, default='')  # string, such as the email address or command
    do_output_state = db.Column(db.Text, default='')  # 'on' or 'off'
    do_output_duration = db.Column(db.Float, default=0.0)
    do_output_pwm = db.Column(db.Float, default=0.0)
    do_camera_duration = db.Column(db.Float, default=0.0)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #24
0
class LCD(CRUDMixin, db.Model):
    __tablename__ = "lcd"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    name = db.Column(db.Text, default='LCD')
    is_activated = db.Column(db.Boolean, default=False)
    period = db.Column(db.Float, default=30.0)
    location = db.Column(db.Text, default='27')
    i2c_bus = db.Column(db.Integer, default=1)
    x_characters = db.Column(db.Integer, default=16)
    y_lines = db.Column(db.Integer, default=2)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #25
0
class Role(CRUDMixin, db.Model):
    __tablename__ = "roles"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    name = db.Column(db.String, nullable=False, unique=True)
    edit_settings = db.Column(db.Boolean, nullable=False, default=False)
    edit_controllers = db.Column(db.Boolean, nullable=False, default=False)
    edit_users = db.Column(db.Boolean, nullable=False, default=False)
    view_settings = db.Column(db.Boolean, nullable=False, default=False)
    view_camera = db.Column(db.Boolean, nullable=False, default=False)
    view_stats = db.Column(db.Boolean, nullable=False, default=False)
    view_logs = db.Column(db.Boolean, nullable=False, default=False)

    user = db.relationship("User", back_populates="roles")

    def __repr__(self):
        return "<{cls}(id={s.id}, name='{s.name}')>".format(
            s=self, cls=self.__class__.__name__)
Exemple #26
0
class FunctionChannel(CRUDMixin, db.Model):
    __tablename__ = "function_channel"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String, nullable=False, unique=True, default=set_uuid)
    function_id = db.Column(db.Text, default=None)
    channel = db.Column(db.Integer, default=None)
    name = db.Column(db.Text, default='')

    custom_options = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #27
0
class Remote(CRUDMixin, db.Model):
    __tablename__ = "remote"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    is_activated = db.Column(db.Boolean, default=False)
    host = db.Column(db.Text, default='')
    username = db.Column(db.Text, default='')
    password_hash = db.Column(db.Text, default='')

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #28
0
class Input(CRUDMixin, db.Model):
    __tablename__ = "input"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    name = db.Column(db.Text, default='Input Name')
    is_activated = db.Column(db.Boolean, default=False)
    log_level_debug = db.Column(db.Boolean, default=False)
    is_preset = db.Column(db.Boolean,
                          default=False)  # Is config saved as a preset?
    preset_name = db.Column(db.Text, default=None)  # Name for preset
    device = db.Column(
        db.Text, default='')  # Device name, such as DHT11, DHT22, DS18B20
    interface = db.Column(
        db.Text, default=None)  # Communication interface (I2C, UART, etc.)
    period = db.Column(db.Float, default=15.0)  # Duration between readings
    start_offset = db.Column(db.Float, default=0.0)
    power_output_id = db.Column(db.String, default=None)
    resolution = db.Column(db.Integer, default=0)
    resolution_2 = db.Column(db.Integer, default=0)
    sensitivity = db.Column(db.Integer, default=0)
    thermocouple_type = db.Column(db.Text, default=None)
    ref_ohm = db.Column(db.Integer, default=None)
    calibrate_sensor_measure = db.Column(
        db.Text, default=None)  # sensor ID and measurement (CSV)

    location = db.Column(
        db.Text,
        default='')  # GPIO pin or i2c address to communicate with sensor
    gpio_location = db.Column(
        db.Integer, default=None)  # Pin location for GPIO communication

    # I2C
    i2c_location = db.Column(
        db.Text, default=None)  # Address location for I2C communication
    i2c_bus = db.Column(db.Integer,
                        default=1)  # I2C bus the sensor is connected to

    # FTDI
    ftdi_location = db.Column(
        db.Text, default=None)  # Device location for FTDI communication

    # Communication (SPI)
    uart_location = db.Column(
        db.Text, default=None)  # Device location for UART communication
    baud_rate = db.Column(db.Integer,
                          default=None)  # Baud rate for UART communication
    pin_clock = db.Column(db.Integer, default=None)
    pin_cs = db.Column(db.Integer, default=None)
    pin_mosi = db.Column(db.Integer, default=None)
    pin_miso = db.Column(db.Integer, default=None)

    # Communication (Bluetooth)
    bt_adapter = db.Column(db.Text, default='hci0')

    # Switch options
    switch_edge = db.Column(db.Text, default='rising')
    switch_bouncetime = db.Column(db.Integer, default=50)
    switch_reset_period = db.Column(db.Integer, default=10)

    # Pre-measurement output options
    pre_output_id = db.Column(
        db.String, db.ForeignKey('output.unique_id'),
        default=None)  # Output to turn on before sensor read
    pre_output_duration = db.Column(
        db.Float, default=0.0)  # Duration to turn output on before sensor read
    pre_output_during_measure = db.Column(db.Boolean, default=True)

    # SHT sensor options
    sht_voltage = db.Column(db.Text, default='3.5')

    # Analog to digital converter options
    adc_gain = db.Column(db.Integer, default=1)
    adc_resolution = db.Column(db.Integer, default=18)
    adc_sample_speed = db.Column(db.Text, default='')

    # Command options
    cmd_command = db.Column(db.Text, default=None)

    # PWM and RPM options
    weighting = db.Column(db.Float, default=0.0)
    rpm_pulses_per_rev = db.Column(db.Float, default=1.0)
    sample_time = db.Column(db.Float, default=2.0)

    # Server options
    port = db.Column(db.Integer, default=80)
    times_check = db.Column(db.Integer, default=1)
    deadline = db.Column(db.Integer, default=2)

    # The Things Network: Data Storage
    datetime = db.Column(db.DateTime, default=None)

    custom_options = db.Column(db.Text, default='')

    def is_active(self):
        """
        :return: Whether the sensor is currently activated
        :rtype: bool
        """
        return self.is_activated

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #29
0
class LCDData(CRUDMixin, db.Model):
    __tablename__ = "lcd_data"
    __table_args__ = {'extend_existing': True}

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)
    lcd_id = db.Column(db.String, db.ForeignKey('lcd.unique_id'), default=None)
    line_1_id = db.Column(db.Text, default='')
    line_1_type = db.Column(db.Text, default='')
    line_1_measurement = db.Column(db.Text, default='')
    line_1_max_age = db.Column(db.Integer, default=360)
    line_1_decimal_places = db.Column(db.Integer, default=2)
    line_2_id = db.Column(db.Text, default='')
    line_2_type = db.Column(db.Text, default='')
    line_2_measurement = db.Column(db.Text, default='')
    line_2_max_age = db.Column(db.Integer, default=360)
    line_2_decimal_places = db.Column(db.Integer, default=2)

    line_3_id = db.Column(db.Text, default='')
    line_3_type = db.Column(db.Text, default='')
    line_3_measurement = db.Column(db.Text, default='')
    line_3_max_age = db.Column(db.Integer, default=360)
    line_3_decimal_places = db.Column(db.Integer, default=2)
    line_4_id = db.Column(db.Text, default='')
    line_4_type = db.Column(db.Text, default='')
    line_4_measurement = db.Column(db.Text, default='')
    line_4_max_age = db.Column(db.Integer, default=360)
    line_4_decimal_places = db.Column(db.Integer, default=2)

    line_5_id = db.Column(db.Text, default='')
    line_5_type = db.Column(db.Text, default='')
    line_5_measurement = db.Column(db.Text, default='')
    line_5_max_age = db.Column(db.Integer, default=360)
    line_5_decimal_places = db.Column(db.Integer, default=2)
    line_6_id = db.Column(db.Text, default='')
    line_6_type = db.Column(db.Text, default='')
    line_6_measurement = db.Column(db.Text, default='')
    line_6_max_age = db.Column(db.Integer, default=360)
    line_6_decimal_places = db.Column(db.Integer, default=2)
    line_7_id = db.Column(db.Text, default='')
    line_7_type = db.Column(db.Text, default='')
    line_7_measurement = db.Column(db.Text, default='')
    line_7_max_age = db.Column(db.Integer, default=360)
    line_7_decimal_places = db.Column(db.Integer, default=2)
    line_8_id = db.Column(db.Text, default='')
    line_8_type = db.Column(db.Text, default='')
    line_8_measurement = db.Column(db.Text, default='')
    line_8_max_age = db.Column(db.Integer, default=360)
    line_8_decimal_places = db.Column(db.Integer, default=2)

    def __repr__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)
Exemple #30
0
class Sensor(CRUDMixin, db.Model):
    __tablename__ = "sensor"

    id = db.Column(db.Integer, unique=True, primary_key=True)
    unique_id = db.Column(db.String,
                          nullable=False,
                          unique=True,
                          default=set_uuid)  # ID for influxdb entries
    name = db.Column(db.Text, default='Sensor')
    is_activated = db.Column(db.Boolean, default=False)
    is_preset = db.Column(db.Boolean,
                          default=False)  # Is config saved as a preset?
    preset_name = db.Column(db.Text, default=None)  # Name for preset
    device = db.Column(
        db.Text, default='')  # Device name, such as DHT11, DHT22, DS18B20
    interface = db.Column(
        db.Text, default=None)  # Communication interface (I2C, UART, etc.)
    device_loc = db.Column(
        db.Text, default=None)  # Device location for UART communication
    calibrate_sensor_measure = db.Column(
        db.Text, default=None)  # sensor ID and measurement (CSV)
    baud_rate = db.Column(db.Integer,
                          default=None)  # Baud rate for UART communication
    period = db.Column(db.Float, default=15.0)  # Duration between readings
    i2c_bus = db.Column(db.Integer,
                        default='')  # I2C bus the sensor is connected to
    location = db.Column(
        db.Text,
        default='')  # GPIO pin or i2c address to communicate with sensor
    power_relay_id = db.Column(db.Integer,
                               db.ForeignKey('relay.id'),
                               default=None)  # Relay to power sensor
    measurements = db.Column(db.Text,
                             default='')  # Measurements separated by commas
    resolution = db.Column(db.Integer, default=0)
    sensitivity = db.Column(db.Integer, default=0)

    # Multiplexer options
    multiplexer_address = db.Column(db.Text, default=None)
    multiplexer_bus = db.Column(db.Integer, default=1)
    multiplexer_channel = db.Column(db.Integer, default=0)

    # Switch options
    switch_edge = db.Column(db.Text, default='rising')
    switch_bouncetime = db.Column(db.Integer, default=50)
    switch_reset_period = db.Column(db.Integer, default=10)

    # Pre-measurement relay options
    pre_relay_id = db.Column(
        db.Integer, db.ForeignKey('relay.id'),
        default=None)  # Relay to turn on before sensor read
    pre_relay_duration = db.Column(
        db.Float, default=0.0)  # Duration to turn relay on before sensor read

    # SHT sensor options
    sht_clock_pin = db.Column(db.Integer, default=0)
    sht_voltage = db.Column(db.Text, default='3.5')

    # Analog to digital converter options
    adc_channel = db.Column(db.Integer, default=0)
    adc_gain = db.Column(db.Integer, default=1)
    adc_resolution = db.Column(db.Integer, default=18)
    adc_measure = db.Column(db.Text, default='Condition')
    adc_measure_units = db.Column(db.Text, default='unit')
    adc_volts_min = db.Column(db.Float, default=None)
    adc_volts_max = db.Column(db.Float, default=None)
    adc_units_min = db.Column(db.Float, default=0)
    adc_units_max = db.Column(db.Float, default=10)

    def is_active(self):
        """
        :return: Whether the sensor is currently activated
        :rtype: bool
        """
        return self.is_activated

    def __reper__(self):
        return "<{cls}(id={s.id})>".format(s=self, cls=self.__class__.__name__)