def save_db(request): # DB初期化 Sensor2.objects.all().delete() # error_db.objects.all().delete() limit = '120000' # 親機1台につき取得するデータの件数 datetime = '"201411101700-201505280000000"' # データ取得時刻 for num in "67": # 親機ループ url = 'http://api1.ginga-box.com:8080/ginga/sol?mode=getdata&v={box_id:"9CBD9D01000'+num+'",limit:'+limit+',datetime:'+datetime+'}' r = requests.get(url) t = r.json() # データの加工 for i in range(len(t)): t[i] = convert_sensor_data(t[i]) # データ登録 if(t[i]["sensor_id"] == "初期データ"): pass else: write_to_sensordb(t[i]) t = Sensor2.objects().all().order_by("-date", "-time").limit(100) return render_to_response('cms/save_db.html', # 使用するテンプレート {'t': t} )
def update_db(request): # Sensor3.objects.all().delete() # error_db.objects.all().delete() limit = '1000' # 親機1台につき取得するデータの件数 datetime = '"201506010000"' # 取得時間帯 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]) t = Sensor2.objects().all().order_by("-datetime").limit(30) return render_to_response('cms/update_db.html', # 使用するテンプレート {'t': t} )
def data_list2(request, limit=100, date_time=d): date_time = datetime_to_12digits(date_time) lmt = '50' # 親機1台につき取得するデータの件数 datetime = '"201411101700"' # データ取得時刻 s = [] for num in "6789": # 親機ループ 6~9 r = requests.get('http://api1.ginga-box.com:8080/ginga/sol?mode=getdata&v={box_id:"9CBD9D01000'+num+'", limit:'+lmt+', datetime:'+datetime+'}') t = r.json() # データの加工 for i in range(len(t)): t[i] = convert_sensor_data(t[i]) s+=t # s = sorted(s.keys("datetime")) return render_to_response('cms/data_list.html', # 使用するテンプレート {'t': s, 'limit':limit, '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]} )
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として出力