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)
def save_data(response_data): if not controller.save_data(response_data): # DB save 에러 log.error("DB save error.") response_data.update(controller.get_CIU_from_json('1')) controller.save_ciu1(response_data) response_data.update(controller.get_CIU_from_json('2')) controller.save_ciu2(response_data) response_data.update(controller.get_CIU_from_json('3')) controller.save_ciu3(response_data)
def save_data(response_data): if not controller.save_data(response_data): # DB save 에러 log.error("DB save error.") else: response_data.update(controller.get_CIU_from_json("1")) controller.save_ciu1(response_data) response_data.update(controller.get_CIU_from_json("2")) controller.save_ciu2(response_data) response_data.update(controller.get_CIU_from_json("3")) controller.save_ciu3(response_data)
def change_ciu(request): if not request.POST: return render_to_response('monitor/container.html', context_instance=RequestContext(request)) response_data = {} # 실내기 정보 읽어오기 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()) html = render_to_string('monitor/right.html', response_data, RequestContext(request)) return HttpResponse(html)
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)
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)