def position_list(request): # 最近の取得時間の取り出し recent = [] num = 20 # 最大取り出し件数 today = datetime.datetime.today() recent += positionset.objects(datetime__lt=today).order_by("-datetime").limit(1).scalar("datetime") for i in range(0,num - 1): if len(recent) > i : lt = recent[i] - datetime.timedelta(minutes = 1) recent += positionset.objects(datetime__lt=lt).order_by("-datetime").limit(1).scalar("datetime") return render_to_response('cms/position_list.html', # 使用するテンプレート {'recent':recent} ) # テンプレートに渡すデータ
def position_delete(request, date_time, id=999): # 文字列を12桁に合わせる date_time = datetime_to_12digits(date_time) date_time = dt_from_str_to_iso(date_time) lt = date_time + datetime.timedelta(minutes = 1) gt = date_time - datetime.timedelta(seconds = 1) count = positionset.objects(datetime__gt=gt, datetime__lt=lt).count() if id == 999: # すべてのデバイスの位置情報削除 positionset.objects(datetime__gt=gt, datetime__lt=lt).delete() else: # 特定のデバイスの位置情報のみを削除 positionset.objects(datetime__gt=gt, datetime__lt=lt, device_id=id).delete() # Python辞書オブジェクトとしてdataに格納 data = [] data.append({ 'datetime':dt_from_iso_to_jap(date_time), 'count':count }) return render_json_response(request, data) # dataをJSONとして出力
def position_edit(request, date_time): # 文字列を12桁に合わせる date_time = datetime_to_12digits(date_time) date_time = dt_from_str_to_iso(date_time) lt = date_time + datetime.timedelta(minutes = 1) gt = date_time - datetime.timedelta(seconds = 1) # データベースから取り出し t = [] for s in range(1,number_of_device+1): t += positionset.objects(device_id=s, datetime__gt=gt, datetime__lt=lt).order_by("-datetime").limit(1) return render_to_response('cms/position_edit.html', # 使用するテンプレート {'t':t} ) # テンプレートに渡すデータ)
def sensor_map(request, date_time=999, type="20"): # 最近の取得時間の取り出し recent = [] num = 20 # 最大取り出し件数 today = datetime.datetime.today() # recent += Sensor2.objects(datetime__lt=today, error_flag=False).order_by("-datetime").limit(1).scalar("datetime") # for i in range(0,num - 1): # if len(recent) > i : # lt = recent[i] - datetime.timedelta(hours = recent[i].hour) - datetime.timedelta(minutes = recent[i].minute + 5) # recent += Sensor2.objects(datetime__lt=lt, error_flag=False).order_by("-datetime").limit(1).scalar("datetime") # センサーデータの取り出し if date_time == 999: lt = datetime.datetime.today() else: lt = dt_from_str_to_iso(datetime_to_12digits(date_time)) gt = lt - datetime.timedelta(minutes = 10) # 10分前までのデータを取得 exist_list = [] mongo_data = [] mongo_data += Sensor2.objects(datetime__gt=gt, datetime__lt=lt,error_flag=False).order_by("device_id","-datetime").limit(500) device_list = [False]*99 t = [] for i in range(0,len(mongo_data)): if device_list[mongo_data[i]["device_id"]] == False: device_list[mongo_data[i]["device_id"]] = True t.append(mongo_data[i]) # 位置情報の取り出し pos = [] for i in range(0,len(t)): pos += positionset.objects(device_id=t[i]["device_id"], datetime__lt=lt).order_by("-datetime").limit(1) return render_to_response('cms/sensor_map.html' , # 使用するテンプレート {'t': t, 'pos':pos, 'year':lt.year,'month':lt.month ,'day':lt.day,'hour':lt.hour,'minute':lt.minute ,'sensor':type[0:1],'visualize':type[1:2]} )
def sensor_map_en(request, date_time=999, type="20"): # 最近の取得時間の取り出し recent = [] num = 20 # 最大取り出し件数 today = datetime.datetime.today() recent += Sensor2.objects(datetime__lt=today, error_flag=False).order_by("-datetime").limit(1).scalar("datetime") for i in range(0,num - 1): if len(recent) > i : lt = recent[i] - datetime.timedelta(hours = recent[i].hour) - datetime.timedelta(minutes = recent[i].minute + 5) recent += Sensor2.objects(datetime__lt=lt, error_flag=False).order_by("-datetime").limit(1).scalar("datetime") # センサーデータの取り出し if date_time == 999: lt = datetime.datetime.today() else: lt = dt_from_str_to_iso(datetime_to_12digits(date_time)) gt = lt - datetime.timedelta(hours = 1) # 一時間前までのデータを取得 t = [] t_ilu = [] exist_list = [] for s in device_list: t += Sensor2.objects(device_id=s, datetime__gt=gt, datetime__lt=lt, error_flag=False).order_by("-datetime").limit(1) exist_list += Sensor2.objects(device_id=s, datetime__gt=gt, datetime__lt=lt, error_flag=False).order_by("-datetime").limit(1).scalar("device_id") for s in ilu_device_list: t_ilu += Sensor2.objects(device_id=s, datetime__gt=gt, datetime__lt=lt, error_flag=False).order_by("-datetime").limit(1) # 位置情報の取り出し pos = [] for s in exist_list: pos += positionset.objects(device_id=s, datetime__lt=lt).order_by("-datetime").limit(1) return render_to_response('cms/sensor_map_en.html', # 使用するテンプレート {'t': t, 't_ilu': t_ilu,'recent': recent, 'year':date_time[0:4],'month':date_time[5:7] ,'day':date_time[8:10],'hour':date_time[11:13],'minute':date_time[14:16] ,'sensor':type[0:1],'visualize':type[1:2]} )
def response_json(request, date_time=999): import datetime if (date_time == 999): # リアルタイムビューではこちらを実行 _15min_ago = datetime.datetime.today() - datetime.timedelta(minutes = 15) _15min_ago = dt_from_iso_to_str(_15min_ago) # Sensor2.objects.all().delete() limit = '25' # 親機1台につき取得するデータの件数 datetime = _15min_ago + "-" + d for num in "6789": # 親機ループ r = requests.get('http://api1.ginga-box.com:8080/ginga/sol?mode=getdata&v={box_id:"9CBD9D01000'+num+'", limit:'+limit+'}') t = r.json() # 最新データ取り出し latest_data = Sensor2.objects(box_id="9CBD9D01000"+num+"").order_by("-datetime").limit(1) if(latest_data.count() == 0): latest_datetime = str("2014-11-10 00:00:00.000") latest_datetime = dt_from_str_to_iso(latest_datetime) else: latest_datetime = latest_data[0]["datetime"] # データの加工 for i in range(len(t)): t[i] = convert_sensor_data(t[i]) dt = dt_from_str_to_iso(t[i]["datetime"]) latest_datetime = shift_time(dt) # データ登録 if(dt <= latest_datetime): break else: # 初期データ if(t[i]["sensor_id"] == "初期データ"): pass # エラーデータ elif(t[i]["sensor_id"] == "Error"): pass # 計測データ else: write_to_sensordb(t[i]) date_time = dt_insert_partition_to_min(date_time) _15min_ago = dt_insert_partition_to_min(_15min_ago) _15min_ago = dt_from_str_to_iso(_15min_ago) # データベースから取り出し t = [] up2date = Sensor2.objects(error_flag=False).order_by("-datetime").limit(1).scalar("datetime") # 最新時刻 for s in device_list: t += Sensor2.objects(device_id=s, datetime__gt=_15min_ago, error_flag=False).order_by("-datetime").limit(1).scalar("ac","ilu","tu","pos_x","pos_y","device_id","box_id","datetime") # Python辞書オブジェクトとしてdataに格納 data = [] for i in range(0,len(t)): data.append({ 'ac':t[i][0], 'ilu':t[i][1], 'tu':t[i][2], 'pos_x':t[i][3], 'pos_y':t[i][4], 'device_id':t[i][5], 'box_id':t[i][6], 'datetime':dt_from_iso_to_jap(t[i][7]), 'up2date':dt_from_iso_to_jap(up2date[0]), }) # r = requests.get('http://api1.ginga-box.com:8080/ginga/sol?mode=getdata&v={box_id:"9CBD9D010006", limit:50, datetime:"201411101700-201411101900"}') else: date_time = dt_insert_partition_to_min(date_time) onehour_ago = dt_from_str_to_iso(date_time) - datetime.timedelta(minutes = 10) # onehour_ago = str(onehour_ago.year)+"-"+("0"+str(onehour_ago.month))[-2:]+"-"+("0"+str(onehour_ago.day))[-2:]+" "+("0"+str(onehour_ago.hour))[-2:]+":"+("0"+str(onehour_ago.minute))[-2:] # データベースから取り出し mongo_data = [] mongo_data += Sensor2.objects(datetime__gt=onehour_ago, datetime__lt=date_time,error_flag=False).order_by("device_id","-datetime").limit(500) device_list = [False]*99 t = [] for i in range(0,len(mongo_data)): if device_list[mongo_data[i]["device_id"]] == False: device_list[mongo_data[i]["device_id"]] = True t.append(mongo_data[i]) # Python辞書オブジェクトとしてdataに格納 data = [] for i in range(0,len(t)): tmp_pos = positionset.objects(device_id=t[i]["device_id"],datetime__lt=date_time).order_by("-datetime").limit(1).scalar("pos_x","pos_y") data.append({ 'ac':t[i]["ac"], 'ilu':t[i]["ilu"], 'tu':t[i]["tu"], 'pos_x':tmp_pos[0][0], 'pos_y':tmp_pos[0][1], 'device_id':t[i]["device_id"], 'box_id':t[i]["box_id"], 'datetime':dt_from_iso_to_jap(t[i]["datetime"]) }) return render_json_response(request, data) # dataをJSONとして出力