def input_add(form_add): action = '{action} {controller}'.format(action=gettext("Add"), controller=gettext("Input")) error = [] unmet_deps = return_dependencies(form_add.input_type.data) if unmet_deps: error.append( "The {dev} device you're trying to add has unmet dependencies: {dep}" .format(dev=form_add.input_type.data, dep=unmet_deps)) if form_add.validate(): new_sensor = Input() new_sensor.device = form_add.input_type.data if GPIO.RPI_INFO['P1_REVISION'] in [2, 3]: new_sensor.i2c_bus = 1 new_sensor.multiplexer_bus = 1 else: new_sensor.i2c_bus = 0 new_sensor.multiplexer_bus = 0 if form_add.input_type.data in DEVICE_INFO: new_sensor.name = DEVICE_INFO[form_add.input_type.data]['name'] new_sensor.measurements = ",".join( DEVICE_INFO[form_add.input_type.data]['measure']) else: new_sensor.name = 'Name' # # Set default values for new Inputs # # Linux command as sensor if form_add.input_type.data == 'LinuxCommand': new_sensor.cmd_command = 'shuf -i 50-70 -n 1' new_sensor.cmd_measurement = 'Condition' new_sensor.cmd_measurement_units = 'unit' # Server is up or down elif form_add.input_type.data in ['SERVER_PING', 'SERVER_PORT_OPEN']: new_sensor.location = '127.0.0.1' new_sensor.period = 3600 # Process monitors elif form_add.input_type.data == 'MYCODO_RAM': new_sensor.location = 'Mycodo_daemon' elif form_add.input_type.data == 'RPi': new_sensor.location = 'RPi' elif form_add.input_type.data == 'RPiCPULoad': new_sensor.location = 'RPi' elif form_add.input_type.data == 'RPiFreeSpace': new_sensor.location = '/' # Environmental Inputs # Electrical Conductivity elif form_add.input_type.data == 'ATLAS_EC_I2C': new_sensor.location = '0x01' new_sensor.interface = 'I2C' elif form_add.input_type.data == 'ATLAS_EC_UART': new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" # Temperature if form_add.input_type.data == 'TMP006': new_sensor.location = '0x40' elif form_add.input_type.data == 'ATLAS_PT1000_I2C': new_sensor.interface = 'I2C' new_sensor.location = '0x66' elif form_add.input_type.data == 'ATLAS_PT1000_UART': new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" elif form_add.input_type.data in ['MAX31855', 'MAX31856', 'MAX31865']: new_sensor.pin_cs = 8 new_sensor.pin_miso = 9 new_sensor.pin_mosi = 10 new_sensor.pin_clock = 11 if form_add.input_type.data == 'MAX31856': new_sensor.thermocouple_type = 'K' elif form_add.input_type.data == 'MAX31865': new_sensor.thermocouple_type = 'PT100' new_sensor.ref_ohm = 0 # Temperature/Humidity elif form_add.input_type.data in [ 'AM2315', 'DHT11', 'DHT22', 'HTU21D', 'SHT1x_7x', 'SHT2x' ]: if form_add.input_type.data == 'AM2315': new_sensor.location = '0x5c' elif form_add.input_type.data == 'HTU21D': new_sensor.location = '0x40' elif form_add.input_type.data == 'SHT2x': new_sensor.location = '0x40' # Chirp moisture sensor elif form_add.input_type.data == 'CHIRP': new_sensor.location = '0x20' # CO2 elif form_add.input_type.data == 'MH_Z16_I2C': new_sensor.location = '0x63' new_sensor.interface = 'I2C' elif form_add.input_type.data in [ 'K30_UART', 'MH_Z16_UART', 'MH_Z19_UART' ]: new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" # pH elif form_add.input_type.data == 'ATLAS_PH_I2C': new_sensor.location = '0x63' new_sensor.interface = 'I2C' elif form_add.input_type.data == 'ATLAS_PH_UART': new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" # Pressure if form_add.input_type.data == 'BME280': new_sensor.location = '0x76' elif form_add.input_type.data in ['BMP180', 'BMP280']: new_sensor.location = '0x77' # Light elif form_add.input_type.data in ['BH1750', 'TSL2561', 'TSL2591']: if form_add.input_type.data == 'BH1750': new_sensor.location = '0x23' new_sensor.resolution = 0 # 0=Low, 1=High, 2=High2 new_sensor.sensitivity = 69 elif form_add.input_type.data == 'TSL2561': new_sensor.location = '0x39' elif form_add.input_type.data == 'TSL2591': new_sensor.location = '0x29' # Analog to Digital Converters elif form_add.input_type.data in LIST_DEVICES_ADC: new_sensor.adc_measure = 'Condition' new_sensor.adc_measure_units = 'units' if form_add.input_type.data == 'ADS1x15': new_sensor.location = '0x48' new_sensor.adc_volts_min = -4.096 new_sensor.adc_volts_max = 4.096 elif form_add.input_type.data == 'MCP342x': new_sensor.location = '0x68' new_sensor.adc_volts_min = -2.048 new_sensor.adc_volts_max = 2.048 elif form_add.input_type.data == 'MCP3008': new_sensor.pin_cs = 8 new_sensor.pin_miso = 9 new_sensor.pin_mosi = 10 new_sensor.pin_clock = 11 new_sensor.adc_volts_min = 0 new_sensor.adc_volts_max = 3.3 try: if not error: new_sensor.save() display_order = csv_to_list_of_int( DisplayOrder.query.first().sensor) DisplayOrder.query.first().sensor = add_display_order( display_order, new_sensor.id) db.session.commit() flash( gettext( "%(type)s Input with ID %(id)s (%(uuid)s) successfully added", type=form_add.input_type.data, id=new_sensor.id, uuid=new_sensor.unique_id), "success") except sqlalchemy.exc.OperationalError as except_msg: error.append(except_msg) except sqlalchemy.exc.IntegrityError as except_msg: error.append(except_msg) flash_success_errors(error, action, url_for('routes_page.page_data')) else: flash_form_errors(form_add) if unmet_deps: return 1
def input_add(form_add_sensor): action = '{action} {controller}'.format(action=gettext("Add"), controller=gettext("Input")) error = [] if form_add_sensor.validate(): new_sensor = Input() new_sensor.device = form_add_sensor.input_type.data new_sensor.name = '{name} Input'.format( name=form_add_sensor.input_type.data) if GPIO.RPI_INFO['P1_REVISION'] in [2, 3]: new_sensor.i2c_bus = 1 new_sensor.multiplexer_bus = 1 else: new_sensor.i2c_bus = 0 new_sensor.multiplexer_bus = 0 # Linux command as sensor if form_add_sensor.input_type.data == 'LinuxCommand': new_sensor.cmd_command = 'shuf -i 50-70 -n 1' new_sensor.cmd_measurement = 'Condition' new_sensor.cmd_measurement_units = 'unit' # Server is up or down elif form_add_sensor.input_type.data in [ 'SERVER_PING', 'SERVER_PORT_OPEN' ]: new_sensor.measurements = 'boolean' new_sensor.location = '127.0.0.1' new_sensor.period = 3600 # Process monitors elif form_add_sensor.input_type.data == 'MYCODO_RAM': new_sensor.measurements = 'disk_space' new_sensor.location = 'Mycodo_daemon' elif form_add_sensor.input_type.data == 'RPi': new_sensor.measurements = 'temperature' new_sensor.location = 'RPi' elif form_add_sensor.input_type.data == 'RPiCPULoad': new_sensor.measurements = 'cpu_load_1m,' \ 'cpu_load_5m,' \ 'cpu_load_15m' new_sensor.location = 'RPi' elif form_add_sensor.input_type.data == 'RPiFreeSpace': new_sensor.measurements = 'disk_space' new_sensor.location = '/' elif form_add_sensor.input_type.data == 'EDGE': new_sensor.measurements = 'edge' elif form_add_sensor.input_type.data == 'GPIO_STATE': new_sensor.measurements = 'gpio_state' # Signal measuremnt (PWM and RPM) elif form_add_sensor.input_type.data == 'SIGNAL_PWM': new_sensor.measurements = 'frequency,pulse_width,duty_cycle' elif form_add_sensor.input_type.data == 'SIGNAL_RPM': new_sensor.measurements = 'rpm' # Environmental Inputs # Temperature elif form_add_sensor.input_type.data in [ 'ATLAS_PT1000_I2C', 'ATLAS_PT1000_UART', 'DS18B20', 'TMP006' ]: new_sensor.measurements = 'temperature' if form_add_sensor.input_type.data == 'ATLAS_PT1000_I2C': new_sensor.interface = 'I2C' new_sensor.location = '0x66' elif form_add_sensor.input_type.data == 'ATLAS_PT1000_UART': new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" elif form_add_sensor.input_type.data == 'TMP006': new_sensor.measurements = 'temperature_object,' \ 'temperature_die' new_sensor.location = '0x40' # Temperature/Humidity elif form_add_sensor.input_type.data in [ 'AM2315', 'DHT11', 'DHT22', 'HTU21D', 'SHT1x_7x', 'SHT2x' ]: new_sensor.measurements = 'temperature,humidity,dewpoint' if form_add_sensor.input_type.data == 'AM2315': new_sensor.location = '0x5c' elif form_add_sensor.input_type.data == 'HTU21D': new_sensor.location = '0x40' elif form_add_sensor.input_type.data == 'SHT2x': new_sensor.location = '0x40' # Chirp moisture sensor elif form_add_sensor.input_type.data == 'CHIRP': new_sensor.measurements = 'lux,moisture,temperature' new_sensor.location = '0x20' # CO2 elif form_add_sensor.input_type.data == 'MH_Z16_I2C': new_sensor.measurements = 'co2' new_sensor.location = '0x63' new_sensor.interface = 'I2C' elif form_add_sensor.input_type.data in [ 'K30_UART', 'MH_Z16_UART', 'MH_Z19_UART' ]: new_sensor.measurements = 'co2' new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" # pH elif form_add_sensor.input_type.data == 'ATLAS_PH_I2C': new_sensor.measurements = 'ph' new_sensor.location = '0x63' new_sensor.interface = 'I2C' elif form_add_sensor.input_type.data == 'ATLAS_PH_UART': new_sensor.measurements = 'ph' new_sensor.location = 'Tx/Rx' new_sensor.interface = 'UART' new_sensor.baud_rate = 9600 if GPIO.RPI_INFO['P1_REVISION'] == 3: new_sensor.device_loc = "/dev/ttyS0" else: new_sensor.device_loc = "/dev/ttyAMA0" # Pressure elif form_add_sensor.input_type.data in ['BME280', 'BMP180', 'BMP280']: if form_add_sensor.input_type.data == 'BME280': new_sensor.measurements = 'temperature,humidity,' \ 'dewpoint,pressure,altitude' new_sensor.location = '0x76' elif form_add_sensor.input_type.data in ['BMP180', 'BMP280']: new_sensor.measurements = 'temperature,pressure,altitude' new_sensor.location = '0x77' # Light elif form_add_sensor.input_type.data in [ 'BH1750', 'TSL2561', 'TSL2591' ]: new_sensor.measurements = 'lux' if form_add_sensor.input_type.data == 'BH1750': new_sensor.location = '0x23' new_sensor.resolution = 0 # 0=Low, 1=High, 2=High2 new_sensor.sensitivity = 69 elif form_add_sensor.input_type.data == 'TSL2561': new_sensor.location = '0x39' elif form_add_sensor.input_type.data == 'TSL2591': new_sensor.location = '0x29' # Analog to Digital Converters elif form_add_sensor.input_type.data in ['ADS1x15', 'MCP342x']: new_sensor.measurements = 'voltage' if form_add_sensor.input_type.data == 'ADS1x15': new_sensor.location = '0x48' new_sensor.adc_volts_min = -4.096 new_sensor.adc_volts_max = 4.096 elif form_add_sensor.input_type.data == 'MCP342x': new_sensor.location = '0x68' new_sensor.adc_volts_min = -2.048 new_sensor.adc_volts_max = 2.048 try: new_sensor.save() display_order = csv_to_list_of_int( DisplayOrder.query.first().sensor) DisplayOrder.query.first().sensor = add_display_order( display_order, new_sensor.id) db.session.commit() flash( gettext( "%(type)s Input with ID %(id)s (%(uuid)s) successfully added", type=form_add_sensor.input_type.data, id=new_sensor.id, uuid=new_sensor.unique_id), "success") except sqlalchemy.exc.OperationalError as except_msg: error.append(except_msg) except sqlalchemy.exc.IntegrityError as except_msg: error.append(except_msg) flash_success_errors(error, action, url_for('routes_page.page_data')) else: flash_form_errors(form_add_sensor)