Example #1
0
def index(request):
    request.session.set_expiry(0)
    request.session["name"] = "admin"
    # log.debug(str(request.session['name']))

    # log.debug("K-ATES program started.")

    # sub program start
    # AirconMonitor, DataSender
    # sub_path = myproject.settings.BASE_DIR
    # os.system("C:\Users\Admin\Documents\Django\myprojezct\AirconMonitor/AirconMonitor.exe")
    # log.debug("AirconMonitoring program started")
    # os.system("C:\Users\Admin\Documents\Django\myproject\LobbyDisplayer/DataSender.exe")
    # log.debug("DataSender program started")

    response_data = check_if_error_exist()

    # 실내기
    ciu_nav = request.POST.get("ciu_nav", "total")
    response_data.update({"ciu_nav": ciu_nav})
    if ciu_nav[0] == "f":
        response_data.update(controller.get_CIU_from_json(ciu_nav[1]))
    elif ciu_nav[0] == "h":
        response_data.update(controller.get_CIU_on_HP_from_json(ciu_nav[1]))
    else:  # total
        response_data.update(controller.get_CIU_total())
        # 읽기 실패할 경우 읽을때까지 반복
    while response_data["ciu_error"] != None:
        if ciu_nav[0] == "f":
            response_data.update(controller.get_CIU_from_json(ciu_nav[1]))
        elif ciu_nav[0] == "h":
            response_data.update(controller.get_CIU_on_HP_from_json(ciu_nav[1]))
        else:  # total
            response_data.update(controller.get_CIU_total())
    rt = response_data["rt_total"]

    # 냉난방모드 확인
    temp_mode = response_data["temp_mode"]
    old_temp_mode = TemperatureModeLogger.objects.latest("id").tempMode
    if temp_mode != old_temp_mode:
        tm = TemperatureModeLogger(dateTime=timezone.now(), tempMode=temp_mode).save()

        # 처음 프로그램 실행시 모드는 수동
    response_data.update({"op_mode": "AT"})
    if OperationModeLogger.objects.latest("id").opMode != "AT":
        oml = OperationModeLogger(dateTime=timezone.now(), opMode="AT").save()
        # init cmd
    controller.init_cmd()

    # 센서값 읽어오기
    response_data.update(controller.read_data_from_json(rt))
    while response_data["hmidata_error"] != None:
        response_data.update(controller.read_data_from_json(rt))

    response_data.update(csrf(request))
    url = "monitor/index.html"
    return render(request, url, response_data)
Example #2
0
def operation_control(request):
    # check if error exist
    response_data = check_if_error_exist()

    # RT 값을 받기 위해 get_ciu_from_json 필요
    response_data.update(controller.get_CIU_from_json(1))
    rt = response_data["cooling_rt"]

    response_data.update(controller.read_data_from_json(rt))
    while response_data["error"] != None:
        response_data.update(controller.read_data_from_json(rt))

        # COP
    try:
        COP = rt / response_data["power"]["currentPowerConsumption"]
    except ZeroDivisionError:
        COP = 0
    response_data.update({"COP": COP})

    url = "monitor/operation_control.html"
    html = render_to_string(url, response_data, RequestContext(request))
    return HttpResponse(html)
Example #3
0
def reload_display(request):
	###########################################
	# 3초마다 갱신해서 왼쪽 상태창, 오른쪽 실내기 정보 갱신
	# 자동제어시, 자동제어 로직에 따라 hmi에 명령을 줌
	# 수동인 경우 데이터 값만 갱신함.
	###########################################

	# check if error exist
	response_data = check_if_error_exist()

	# 실내기 정보 읽어오기
	ciu_nav = request.POST.get('ciu_nav','f1')
	response_data.update({'ciu_nav':ciu_nav})
	if ciu_nav[0] == "f":
		response_data.update(controller.get_CIU_from_json(ciu_nav[1]))
	elif ciu_nav[0] == "h":
		response_data.update(controller.get_CIU_on_HP_from_json(ciu_nav[1]))
	else: # total
		response_data.update(controller.get_CIU_total())
	# 읽기 실패할 경우 읽을때까지 반복
	while response_data["ciu_error"] != None:
		if ciu_nav[0] == "f":
			response_data.update(controller.get_CIU_from_json(ciu_nav[1]))
		elif ciu_nav[0] == "h":
			response_data.update(controller.get_CIU_on_HP_from_json(ciu_nav[1]))
		else: # total
			response_data.update(controller.get_CIU_total())
	rt = response_data["rt_total"]

	# 냉난방모드 확인
	temp_mode = response_data["temp_mode"]
	old_temp_mode = TemperatureModeLogger.objects.latest('id').tempMode
	# log.debug("temp_mode: " +str(temp_mode))
	# log.debug("old_temp_mode: " +str(old_temp_mode))
	if temp_mode != old_temp_mode:
		tm = TemperatureModeLogger(
			dateTime=timezone.now(), tempMode=temp_mode
			).save()
		cmd = controller.read_cmd()
		now = str(timezone.now())[:-7]
		cmd.update({'datetime':now,'temp_mode':temp_mode})
		controller.write_cmd(cmd)


	global flag_command 
	if flag_command: # command를 준 후에 파일을 잠시 읽지 않는다.
		import time
		time.sleep(5)
		flag_command = 0

	# hmi에서 데이터 읽고 (자동)제어
	# 수동인 경우 데이터 값(디스플레이)만 갱신함.
	response_data.update(controller.read_data_from_json(rt))
	# 읽기 실패할 경우 읽을때까지 반복
	while response_data["hmidata_error"] != None:
		response_data.update(controller.read_data_from_json(rt))


	############### 통신 에러 처리 ############################
	try:
		timegap = response_data["datetime"] - timezone.now()
		# log.debug(str(timegap.total_seconds()))
		timegap_seconds = timegap.total_seconds()
	except:
		timegap_seconds = 15
	if timegap_seconds < 15: # 일반적으로 25~27초
		# log.debug("HMI not working or communication failed.")
		create_CHP_file()
	# 통신 에러 없는 경우	
	else: 
		# log.debug("HMI working")
		error_file_name = 'errorlog_chp.json'
		# 파일이 있다면
		if os.path.isfile(file_path + error_file_name):
			# log.debug("yes file")
			# 파일에 closed time 적어준다.
			with open(file_path + error_file_name) as data_file:
				_data = json.load(data_file)
			ct = dt.strftime(timezone.now(), datetime_format)
			_data.update({"CT": ct})
			with open(file_path + error_file_name, 'w') as fp:
				json.dump(_data, fp)
		# 없다면 그냥 pass
		# log.debug("no file")
	############### 통신 에러 처리 끝 #########################

	# log.debug(str(response_data["us"][5]["state"]))
	# log.debug(str(response_data["us"][6]["state"]))
	# log.debug(str(response_data["us"][8]["state"]))
	
	# 운전 모드 정보
	# op_mode = OperationModeLogger.objects.latest('id').opMode
	response_data.update({
		# "op_mode": op_mode,
		"temp_mode": temp_mode,
	})
	
	t = timezone.now()		
	# log.debug(str(response_data["error"]))

	# ver._2016.07.19 rt from heatpump
	# response_data["rt_total"] = response_data["rt"]["RT"]
	# end ver._2016.07.19
	
	# 데이터베이스 저장
	# 중복 저장 방지
	latest_data = DeepwellPump1Logger.objects.latest('id').dateTime
	if (timezone.now() - latest_data).seconds > 5:
		# 저장 주기마다 data save
		save_interval = SaveIntervalLogger.objects.latest('id').interval
		if save_interval == 10:
			if t.minute % 10 == 0 and t.second < 5: 
				save_data(response_data)
		elif save_interval == 30:
			if t.minute % 30 == 0 and t.second < 5:
				save_data(response_data)
		elif save_interval == 60:
			if t.minute == 0 and t.second < 5:
				save_data(response_data)
		else:
			if t.minute % 5 == 0 and t.second < 5:
				save_data(response_data)

	url = 'monitor/container.html'
	html = render_to_string(url, response_data, RequestContext(request))
	return HttpResponse(html)