def generate_thermal_image_from_timestamp(unique_id, timestamp): """Return a file from the note attachment directory""" ts_now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') camera_path = assure_path_exists( os.path.join(PATH_CAMERAS, '{uid}'.format(uid=unique_id))) filename = 'Still-{uid}-{ts}.jpg'.format( uid=unique_id, ts=ts_now).replace(" ", "_") save_path = assure_path_exists(os.path.join(camera_path, 'thermal')) assure_path_exists(save_path) path_file = os.path.join(save_path, filename) dbcon = InfluxDBClient( INFLUXDB_HOST, INFLUXDB_PORT, INFLUXDB_USER, INFLUXDB_PASSWORD, INFLUXDB_DATABASE) input_dev = Input.query.filter(Input.unique_id == unique_id).first() pixels = [] success = True start = int(int(timestamp) / 1000.0) # Round down end = start + 1 # Round up start_timestamp = time.strftime('%Y-%m-%dT%H:%M:%S.000000000Z', time.gmtime(start)) end_timestamp = time.strftime('%Y-%m-%dT%H:%M:%S.000000000Z', time.gmtime(end)) for each_channel in range(input_dev.channels): measurement = 'channel_{chan}'.format( chan=each_channel) query_str = query_string(measurement, unique_id, start_str=start_timestamp, end_str=end_timestamp) if query_str == 1: logger.error('Invalid query string') success = False else: raw_data = dbcon.query(query_str).raw if not raw_data or 'series' not in raw_data or not raw_data['series']: logger.error('No measurements to export in this time period') success = False else: pixels.append(raw_data['series'][0]['values'][0][1]) # logger.error("generate_thermal_image_from_timestamp: success: {}, pixels: {}".format(success, pixels)) if success: generate_thermal_image_from_pixels(pixels, 8, 8, path_file) return send_file(path_file, mimetype='image/jpeg') else: return "Could not generate image"
def generate_thermal_image_from_timestamp(unique_id, timestamp): """Return a file from the note attachment directory""" ts_now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') camera_path = assure_path_exists( os.path.join(PATH_CAMERAS, '{uid}'.format(uid=unique_id))) filename = 'Still-{uid}-{ts}.jpg'.format( uid=unique_id, ts=ts_now).replace(" ", "_") save_path = assure_path_exists(os.path.join(camera_path, 'thermal')) assure_path_exists(save_path) path_file = os.path.join(save_path, filename) current_app.config['INFLUXDB_USER'] = INFLUXDB_USER current_app.config['INFLUXDB_PASSWORD'] = INFLUXDB_PASSWORD current_app.config['INFLUXDB_DATABASE'] = INFLUXDB_DATABASE current_app.config['INFLUXDB_TIMEOUT'] = 5 dbcon = influx_db.connection input_dev = Input.query.filter(Input.unique_id == unique_id).first() pixels = [] success = True start = int(int(timestamp) / 1000.0) # Round down end = start + 1 # Round up start_timestamp = time.strftime('%Y-%m-%dT%H:%M:%S.000000000Z', time.gmtime(start)) end_timestamp = time.strftime('%Y-%m-%dT%H:%M:%S.000000000Z', time.gmtime(end)) for each_channel in range(input_dev.channels): measurement = 'channel_{chan}'.format( chan=each_channel) query_str = query_string(measurement, unique_id, start_str=start_timestamp, end_str=end_timestamp) if query_str == 1: logger.error('Invalid query string') success = False else: raw_data = dbcon.query(query_str).raw if not raw_data or 'series' not in raw_data: logger.error('No measurements to export in this time period') success = False else: pixels.append(raw_data['series'][0]['values'][0][1]) # logger.error("generate_thermal_image_from_timestamp: success: {}, pixels: {}".format(success, pixels)) if success: generate_thermal_image_from_pixels(pixels, 8, 8, path_file) return send_file(path_file, mimetype='image/jpeg') else: return "Could not generate image"
def get_measurement(self): """Gets the AMG8833's measurements.""" if not self.sensor: self.logger.error( "Error 101: Device not set up. See https://kizniche.github.io/Mycodo/Error-Codes#error-101 for more info." ) return self.return_dict = copy.deepcopy(measurements_dict) pixels = self.sensor.readPixels() if self.report: self.logger.error("Min Pixel = {0} C".format(min(pixels))) self.logger.error("Max Pixel = {0} C".format(max(pixels))) self.logger.error("Thermistor = {0} C".format( self.sensor.readThermistor())) for channel in self.channels_measurement: self.value_set(channel, pixels[channel]) if self.save_image: timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S') assure_path_exists(PATH_CAMERAS) camera_path = assure_path_exists( os.path.join(PATH_CAMERAS, '{uid}'.format(uid=self.input_dev.unique_id))) filename = 'Still-{uid}-{ts}.jpg'.format( uid=self.input_dev.unique_id, ts=timestamp).replace(" ", "_") save_path = assure_path_exists(os.path.join( camera_path, 'thermal')) assure_path_exists(save_path) path_file = os.path.join(save_path, filename) generate_thermal_image_from_pixels(pixels, self.nx, self.ny, path_file, scale=self.scale, temp_min=self.temp_min, temp_max=self.temp_max) return self.return_dict
def get_measurement(self): """ Gets the AMG8833's measurements """ self.return_dict = measurements_dict.copy() pixels = self.sensor.readPixels() if self.report: self.logger.error("Min Pixel = {0} C".format(min(pixels))) self.logger.error("Max Pixel = {0} C".format(max(pixels))) self.logger.error("Thermistor = {0} C".format( self.sensor.readThermistor())) for channel in self.channels_measurement: if self.is_enabled(channel): self.value_set(channel, pixels[channel]) if self.save_image: timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S') assure_path_exists(PATH_CAMERAS) camera_path = assure_path_exists( os.path.join(PATH_CAMERAS, '{uid}'.format(uid=self.input_dev.unique_id))) filename = 'Still-{uid}-{ts}.jpg'.format( uid=self.input_dev.unique_id, ts=timestamp).replace(" ", "_") save_path = assure_path_exists(os.path.join( camera_path, 'thermal')) assure_path_exists(save_path) path_file = os.path.join(save_path, filename) generate_thermal_image_from_pixels(pixels, self.nx, self.ny, path_file, scale=self.scale, temp_min=self.temp_min, temp_max=self.temp_max) return self.return_dict
def get_measurement(self): """ Gets the AMG8833's measurements """ return_dict = measurements_dict.copy() pixels = self.sensor.readPixels() if self.report: self.logger.error("Min Pixel = {0} C".format(min(pixels))) self.logger.error("Max Pixel = {0} C".format(max(pixels))) self.logger.error("Thermistor = {0} C".format(self.sensor.readThermistor())) for meas in self.device_measurements.all(): if meas.is_enabled: return_dict[meas.channel]['value'] = pixels[meas.channel] if self.save_image: timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S') assure_path_exists(PATH_CAMERAS) camera_path = assure_path_exists( os.path.join(PATH_CAMERAS, '{uid}'.format(uid=self.input_dev.unique_id))) filename = 'Still-{uid}-{ts}.jpg'.format( uid=self.input_dev.unique_id, ts=timestamp).replace(" ", "_") save_path = assure_path_exists(os.path.join(camera_path, 'thermal')) assure_path_exists(save_path) path_file = os.path.join(save_path, filename) generate_thermal_image_from_pixels( pixels, self.nx, self.ny, path_file, scale=self.scale, temp_min=self.temp_min, temp_max=self.temp_max) return return_dict