Example #1
0
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")