print_stats: Add virtual_sdcard state tracking

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Arksine 2020-08-03 12:21:56 -04:00 committed by KevinOConnor
parent 74c0e3a484
commit b9f48e634e
2 changed files with 23 additions and 8 deletions

View File

@ -31,19 +31,31 @@ class PrintStats:
# Reset last e-position # Reset last e-position
gc_status = self.gcode.get_status(curtime) gc_status = self.gcode.get_status(curtime)
self.last_epos = gc_status['last_epos'] self.last_epos = gc_status['last_epos']
self.state = "printing"
self.error_message = ""
def note_pause(self): def note_pause(self):
if self.last_pause_time is None: if self.last_pause_time is None:
curtime = self.reactor.monotonic() curtime = self.reactor.monotonic()
self.last_pause_time = curtime self.last_pause_time = curtime
# update filament usage # update filament usage
self._update_filament_usage(curtime) self._update_filament_usage(curtime)
if self.state != "error":
self.state = "paused"
def note_error(self, message):
self.state = "error"
self.error_message = message
def note_complete(self):
self.state = "complete"
eventtime = self.reactor.monotonic()
self.total_duration = eventtime - self.print_start_time
self.print_start_time = None
def reset(self): def reset(self):
self.filename = "" self.filename = self.error_message = ""
self.state = "standby"
self.prev_pause_duration = self.last_epos = 0. self.prev_pause_duration = self.last_epos = 0.
self.filament_used = 0. self.filament_used = self.total_duration = 0.
self.print_start_time = self.last_pause_time = None self.print_start_time = self.last_pause_time = None
def get_status(self, eventtime): def get_status(self, eventtime):
total_duration = 0.
time_paused = self.prev_pause_duration time_paused = self.prev_pause_duration
if self.print_start_time is not None: if self.print_start_time is not None:
if self.last_pause_time is not None: if self.last_pause_time is not None:
@ -52,12 +64,14 @@ class PrintStats:
else: else:
# Accumulate filament if not paused # Accumulate filament if not paused
self._update_filament_usage(eventtime) self._update_filament_usage(eventtime)
total_duration = eventtime - self.print_start_time self.total_duration = eventtime - self.print_start_time
return { return {
'filename': self.filename, 'filename': self.filename,
'total_duration': total_duration, 'total_duration': self.total_duration,
'print_duration': total_duration - time_paused, 'print_duration': self.total_duration - time_paused,
'filament_used': self.filament_used 'filament_used': self.filament_used,
'state': self.state,
'message': self.error_message
} }
def load_config(config): def load_config(config):

View File

@ -231,6 +231,7 @@ class VirtualSD:
try: try:
self.gcode.run_script(lines[-1]) self.gcode.run_script(lines[-1])
except self.gcode.error as e: except self.gcode.error as e:
self.print_stats.note_error(str(e))
break break
except: except:
logging.exception("virtual_sdcard dispatch") logging.exception("virtual_sdcard dispatch")
@ -243,7 +244,7 @@ class VirtualSD:
if self.current_file is not None: if self.current_file is not None:
self.print_stats.note_pause() self.print_stats.note_pause()
else: else:
self._reset_file() self.print_stats.note_complete()
return self.reactor.NEVER return self.reactor.NEVER
def load_config(config): def load_config(config):