Example #1
0
def sensor_graph_en(request, limit=100, date_time=d, type="101"):

  # 文字列を12桁に合わせる
  date_time = datetime_to_12digits(date_time)

  # 直近2日分を取得
  two_days_ago = dt_from_str_to_iso(date_time)
  two_days_ago -= datetime.timedelta(days = 2)
  two_days_ago = dt_from_iso_to_str(two_days_ago)
  two_days_ago = dt_insert_partition_to_min(two_days_ago)

  # データベースから取り出し
  t = Sensor2.objects(device_id=type[1:4],datetime__gt=two_days_ago, datetime__lte=date_time, error_flag=False).order_by("-datetime").limit(int(limit))

  return render_to_response('cms/sensor_graph_en.html',  # 使用するテンプレート
                              {'t': t, '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]
                              ,'sensor': type[0:1],'device_id':type[1:3]} )
Example #2
0
def position_save(request, date_time, id, pos_x, pos_y):
  date_time = dt_insert_partition_to_min(date_time)
  date_time = dt_from_str_to_iso(date_time)
  
  position_set = positionset(
    date_time,
    device_id = id,
    pos_x = pos_x,
    pos_y = pos_y
    )
  positionset.save()

  # Python辞書オブジェクトとしてdataに格納
  data = []
  data.append({
    'datetime':dt_from_iso_to_jap(date_time),
    'device_id':id,
    'pos_x':pos_x,
    'pos_y':pos_y
    })

  return render_json_response(request, data) # dataをJSONとして出力
Example #3
0
def response_json(request, date_time=d):

  import datetime

  if (date_time == d):
    _15min_ago = datetime.datetime.today() - datetime.timedelta(minutes = 15)
    _15min_ago = dt_from_iso_to_str(_15min_ago)

    # Sensor2.objects.all().delete()
    limit = '60' # 親機1台につき取得するデータの件数
    datetime = _15min_ago + "-" + d

    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)

    # データベースから取り出し
    aggregated_data = db.sensor2.aggregate([{ "$match" :{"datetime":{"$gte":_15min_ago, "$lte":date_time}, "error_flag":False} },
     { "$group" : {"device_id":"$device_id", "count" : {"$sum" : 1 } } }])
   
    device_list     = aggregated_data["result"]
    ilu_device_list = [4, 8, 9, 18, 20]
    print (device_list)

    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(hours = 1)
    # 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:]

    # データベースから取り出し

    aggregated_data = db.sensor2.aggregate([{ "$match" :{"datetime":{"$gte":onehour_ago, "$lte":date_time}, "error_flag":False} },
     { "$group" : {"device_id":"$device_id", "count" : {"$sum" : 1 } } }])
   
    device_list     = aggregated_data["result"]
    ilu_device_list = [4, 8, 9, 18, 20]
    print (device_list)

    t = []
    for s in device_list:
      t += Sensor2.objects(device_id=s, datetime__gt=onehour_ago, datetime__lt=date_time, 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])
        })

  return render_json_response(request, data) # dataをJSONとして出力
Example #4
0
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として出力