public function temper_ajax() { $array_temper = array(); $this->load->helper(array('printerstate', 'errorcode')); $array_temper = PrinterState_getExtruderTemperaturesAsArray(); if (count($array_temper)) { if (isset($array_temper[PRINTERSTATE_LEFT_EXTRUD])) { if ($this->config->item('nb_extruder') >= 2) { $array_temper['left'] = $array_temper[PRINTERSTATE_LEFT_EXTRUD]; } unset($array_temper[PRINTERSTATE_LEFT_EXTRUD]); } if (isset($array_temper[PRINTERSTATE_RIGHT_EXTRUD])) { $array_temper['right'] = $array_temper[PRINTERSTATE_RIGHT_EXTRUD]; unset($array_temper[PRINTERSTATE_RIGHT_EXTRUD]); } if (isset($array_temper[PRINTERSTATE_HEAT_BED])) { $array_temper['bed'] = $array_temper[PRINTERSTATE_HEAT_BED]; unset($array_temper[PRINTERSTATE_HEAT_BED]); } $this->output->set_status_header(200); print json_encode($array_temper); return; } $this->output->set_status_header(403); return; }
function PrinterState_checkStatusAsArray($extra_info = TRUE) { $command = ''; $output = array(); $ret_val = 0; $data_json = array(); $temp_data[PRINTERSTATE_TITLE_LASTERROR] = array(); $time_start = NULL; $status_current = ''; // if we need duration, the function that get duration by id is necessary // and we must stock print list id somewhere in json file $CI =& get_instance(); $CI->load->helper('corestatus'); if (CoreStatus_checkInUSB()) { $data_json[PRINTERSTATE_TITLE_STATUS] = CORESTATUS_VALUE_USB; return $data_json; } else { if (CoreStatus_checkInConnection()) { $data_json[PRINTERSTATE_TITLE_STATUS] = CORESTATUS_VALUE_WAIT_CONNECT; return $data_json; } } $ret_val = CoreStatus_checkInIdle($status_current, $status_json); if ($ret_val == TRUE) { $data_json[PRINTERSTATE_TITLE_STATUS] = CORESTATUS_VALUE_IDLE; //TODO think about if we need to display last error as 200 (error_ok) or not if (array_key_exists(CORESTATUS_TITLE_LASTERROR, $status_json) && !is_null($status_json[CORESTATUS_TITLE_LASTERROR]) && $status_json[CORESTATUS_TITLE_LASTERROR] != ERROR_OK) { // $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_LASTERROR] = $status_json[CORESTATUS_TITLE_LASTERROR]; // $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_DETAILMSG] = $status_json[CORESTATUS_TITLE_MESSAGE]; $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_SLICE_ERR] = $status_json[CORESTATUS_TITLE_LASTERROR] . ' ' . $status_json[CORESTATUS_TITLE_MESSAGE]; } } else { if ($ret_val == FALSE) { $temp_data = array(); $status_old = $status_current; PrinterState_checkBusyStatus($status_current, $temp_data); if (in_array($status_current, array(CORESTATUS_VALUE_SLICE, CORESTATUS_VALUE_PRINT))) { $data_json[PRINTERSTATE_TITLE_PERCENT] = $temp_data[PRINTERSTATE_TITLE_PERCENT]; } $data_json[PRINTERSTATE_TITLE_STATUS] = $status_current; // return error code in the first time when we have error from slicing=>idle if ($status_old == CORESTATUS_VALUE_SLICE && $status_current == CORESTATUS_VALUE_IDLE && array_key_exists(PRINTERSTATE_TITLE_LASTERROR, $temp_data)) { // $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_LASTERROR] = $temp_data[PRINTERSTATE_TITLE_LASTERROR]; // $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_DETAILMSG] = $temp_data[PRINTERSTATE_TITLE_DETAILMSG]; $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_SLICE_ERR] = $temp_data[PRINTERSTATE_TITLE_LASTERROR] . ' ' . $temp_data[PRINTERSTATE_TITLE_DETAILMSG]; } else { if ($status_current == CORESTATUS_VALUE_PRINT) { $print_operation = PRINTERSTATE_VALUE_PRINT_OPERATION_PRINT; $array_status = array(); // add temperature if ($extra_info == TRUE && $data_json[PRINTERSTATE_TITLE_PERCENT] != 100) { $data_temperature = PrinterState_getExtruderTemperaturesAsArray(); if (!is_array($data_temperature)) { // log internal error $CI->load->helper('printerlog'); PrinterLog_logError('API error when getting temperatures in printing', __FILE__, __LINE__); } else { $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_EXT_TEMP_L] = array_key_exists(PRINTERSTATE_LEFT_EXTRUD, $data_temperature) ? $data_temperature[PRINTERSTATE_LEFT_EXTRUD] : 0; $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_EXT_TEMP_R] = array_key_exists(PRINTERSTATE_RIGHT_EXTRUD, $data_temperature) ? $data_temperature[PRINTERSTATE_RIGHT_EXTRUD] : 0; $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_EXT_TEMP_B] = array_key_exists(PRINTERSTATE_HEAT_BED, $data_temperature) ? $data_temperature[PRINTERSTATE_HEAT_BED] : 0; } } // try to calculate time remained when percentage is passed offset $ret_val = CoreStatus_getStatusArray($array_status); if ($ret_val == TRUE && isset($array_status[CORESTATUS_TITLE_STARTTIME]) && isset($array_status[CORESTATUS_TITLE_ESTIMATE_T])) { $time_pass = time() - $array_status[CORESTATUS_TITLE_STARTTIME]; $data_json[PRINTERSTATE_TITLE_PASSTIME] = $time_pass; if (isset($data_json[PRINTERSTATE_TITLE_PERCENT]) && ($time_pass >= PRINTERSTATE_VALUE_OFST_TO_CAL_TIME || $data_json[PRINTERSTATE_TITLE_PERCENT] >= PRINTERSTATE_VALUE_OFST_TO_CAL_PCT)) { // rest time = total time - passed time // total time = estimate time (by filament) * (1 - percentage ^ 0.5) + estimate time (by time) * percentage ^ 0.5 // estimate time (by time) = passed time / percentage // $percentage_finish = $data_json[PRINTERSTATE_TITLE_PERCENT] / 100; $calculate_factor = sqrt($data_json[PRINTERSTATE_TITLE_PERCENT] / 100); $time_estimation = $array_status[CORESTATUS_TITLE_ESTIMATE_T]; $data_json[PRINTERSTATE_TITLE_DURATION] = (int) ($time_estimation * (1 - $calculate_factor) + $time_pass * (1 / $calculate_factor - 1)); } } // check operation if (file_exists(PRINTERSTATE_FILE_PRINT_HEAT)) { $print_operation = PRINTERSTATE_VALUE_PRINT_OPERATION_HEAT; } else { if ($data_json[PRINTERSTATE_TITLE_PERCENT] == 100) { $print_operation = PRINTERSTATE_VALUE_PRINT_OPERATION_END; } } $data_json[PRINTERSTATE_TITLE_EXTEND_PRM][PRINTERSTATE_TITLE_EXT_OPER] = $print_operation; } } } } if ($extra_info == TRUE && $status_current == CORESTATUS_VALUE_IDLE) { // check if we need to change idle into sliced or not PrinterState_checkSlicedCondition($data_json); //TODO add timelapse checking PrinterState_checkTimelapseCondition($data_json); } return $data_json; }