def create_update_sensor(message, address, signal_strength): try: current_time = datetime.datetime.now().replace(microsecond=0) name = message[0] float = True if message[1] == 'UP' else False trip_time = current_time if float else None battery = int(message[2]) / 10 temperature = int(message[3]) / 10 # delete the sensor if there is data when the same sensor name but different address sensor = Sensor.query.filter(Sensor.name == name, Sensor.address != address).first() if sensor: db.session.delete(sensor) db.session.commit() sensor = Sensor.query.filter_by(address=address).first() if not sensor: # does not exist, create one land = Land.query.filter_by(number=1).first() sensor = Sensor(name=name, battery=battery, float=float, temperature=temperature, signal_strength=signal_strength, land_id=land.id, address=address, last_update=current_time, trip_time=trip_time) db.session.add(sensor) db.session.commit() # add sensor configs for each config page config_pages = Config.query.all() for config_page in config_pages: sensor_config = SensorConfig(sensor_id=sensor.id, config_id=config_page.id) db.session.add(sensor_config) else: # exists, update the name and the date sensor.name = name sensor.status = True sensor.float = float sensor.trip_time = trip_time sensor.battery = battery sensor.temperature = temperature sensor.signal_strength = signal_strength sensor.last_update = current_time db.session.commit() return { 'id': sensor.id, 'name': name, 'last_update': str(current_time), 'battery': battery, 'float': float, 'temperature': temperature, 'signal_strength': signal_strength }, sensor except Exception as e: print(e) print("INVALID DATA FROM SENSORS")