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))
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")