示例#1
0
def sensor(request):
    sensor_name = request.GET.get("sensor", "")
    value = request.GET.get("value", "")
    time = request.GET.get("time", "")
    from django.utils.timezone import get_current_timezone
    from django.utils import timezone

    if len(time) == 0:
        time_p = timezone.now()
    else:
        time_p = datetime.datetime.fromtimestamp(int(time), tz=get_current_timezone())

    print time_p

    objs = Sensor.objects.filter(name=sensor_name)
    sensor = None
    if len(objs) > 0:
        sensor = objs[0]
    else:
        sensor = Sensor()
        sensor.name = sensor_name
        sensor.save()

    try:
        latest = Value.objects.filter(sensor=sensor).order_by("-pub_date")[0]
        # print "latest",str(latest)
        if time_p < latest.pub_date:
            print "WARNNING: Sensor time should be greater than last in DB"
        if latest.value == float(value):
            result = "No need to update data for sensor %s" % sensor
            print result
            HttpResponse(result)
    except IndexError:
        pass

    v = Value(sensor=sensor, pub_date=time_p, value=float(value))
    v.save()
    return HttpResponse(str(sensor.name) + ":" + str(value))
示例#2
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")