Clean up the monitor command.

The monitor command now:

* Has more pythonic code
* Limits precision of progress elements (12.3% instead of 12.347812...%)
* Uses a carriage return to have print progress replace the previous
  progress line.

For example:

Monitoring printer, use ^C to interrupt.
Updating values every 5.000000 seconds.
Print progress: 0.3%

Previously, the line "Print progress: 0.3%" was "Print progress: 0.2%",
etc.
master
Christopher Olah 2013-01-19 19:11:04 -05:00
parent 92821f7e41
commit 3fb7a3e71c
1 changed files with 17 additions and 9 deletions

View File

@ -1118,6 +1118,9 @@ class pronsole(cmd.Cmd):
if not self.p.online:
print "Printer is not online. Please connect first."
return
if not (self.p.printing or self.sdprinting):
print "Printer not printing. Please print something before monitoring."
return
print "Monitoring printer, use ^C to interrupt."
if len(l):
try:
@ -1126,22 +1129,27 @@ class pronsole(cmd.Cmd):
print "Invalid period given."
print "Updating values every %f seconds."%(interval,)
self.monitoring = 1
prev_msg_len = 0
try:
while(1):
while True:
self.p.send_now("M105")
if(self.sdprinting):
self.p.send_now("M27")
time.sleep(interval)
#print (self.tempreadings.replace("\r", "").replace("T", "Hotend").replace("B", "Bed").replace("\n", "").replace("ok ", ""))
if(self.p.printing):
print "Print progress: ", 100*float(self.p.queueindex)/len(self.p.mainqueue), "%"
if(self.sdprinting):
print "SD print progress: ", self.percentdone, "%"
except:
if self.p.printing:
preface = "Print progress: "
progress = 100*float(self.p.queueindex)/len(self.p.mainqueue)
elif self.sdprinting:
preface = "Print progress: "
progress = self.percentdone
progress = int(progress*10)/10.0 #limit precision
prev_msg = preface + str(progress) + "%"
sys.stdout.write("\r" + prev_msg.ljust(prev_msg_len))
sys.stdout.flush()
prev_msg_len = len(prev_msg)
except KeyboardInterrupt:
print "Done monitoring."
pass
self.monitoring = 0
def help_monitor(self):