commit
e73a8a9402
82
pronsole.py
82
pronsole.py
|
@ -183,15 +183,46 @@ class Settings:
|
||||||
def _all_settings(self):
|
def _all_settings(self):
|
||||||
return dict([(k, getattr(self, k)) for k in self.__dict__.keys() if not k.startswith("_")])
|
return dict([(k, getattr(self, k)) for k in self.__dict__.keys() if not k.startswith("_")])
|
||||||
|
|
||||||
|
class Status:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.extruder_temp = 0
|
||||||
|
self.extruder_temp_target = 0
|
||||||
|
self.bed_temp = 0
|
||||||
|
self.bed_temp_target = 0
|
||||||
|
self.print_job = None
|
||||||
|
self.print_job_progress = 1.0
|
||||||
|
|
||||||
|
def update_tempreading(self, tempstr):
|
||||||
|
r = tempstr.split()
|
||||||
|
# eg. r = ["ok", "T:20.5", "/0.0", "B:0.0", "/0.0", "@:0"]
|
||||||
|
if len(r) == 6:
|
||||||
|
self.extruder_temp = float(r[1][2:])
|
||||||
|
self.extruder_temp_target = float(r[2][1:])
|
||||||
|
self.bed_temp = float(r[3][2:])
|
||||||
|
self.bed_temp_target = float(r[4][1:])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bed_enabled(self):
|
||||||
|
return self.bed_temp != 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def extruder_enabled(self):
|
||||||
|
return self.extruder_temp != 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class pronsole(cmd.Cmd):
|
class pronsole(cmd.Cmd):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
cmd.Cmd.__init__(self)
|
cmd.Cmd.__init__(self)
|
||||||
if not READLINE:
|
if not READLINE:
|
||||||
self.completekey = None
|
self.completekey = None
|
||||||
|
self.status = Status()
|
||||||
|
self.dynamic_temp = False
|
||||||
self.p = printcore.printcore()
|
self.p = printcore.printcore()
|
||||||
self.p.recvcb = self.recvcb
|
self.p.recvcb = self.recvcb
|
||||||
self.recvlisteners = []
|
self.recvlisteners = []
|
||||||
self.prompt = "PC>"
|
self.in_macro = False
|
||||||
self.p.onlinecb = self.online
|
self.p.onlinecb = self.online
|
||||||
self.f = None
|
self.f = None
|
||||||
self.listing = 0
|
self.listing = 0
|
||||||
|
@ -231,6 +262,30 @@ class pronsole(cmd.Cmd):
|
||||||
self.web_config = None
|
self.web_config = None
|
||||||
self.web_auth_config = None
|
self.web_auth_config = None
|
||||||
|
|
||||||
|
def promptf(self):
|
||||||
|
"""A function to generate prompts so that we can do dynamic prompts. """
|
||||||
|
if self.in_macro:
|
||||||
|
return "..>"
|
||||||
|
elif not self.p.online:
|
||||||
|
return "uninitialized>"
|
||||||
|
elif self.status.extruder_enabled and self.dynamic_temp:
|
||||||
|
if self.status.extruder_temp_target == 0:
|
||||||
|
return "T:%s>" % self.status.extruder_temp
|
||||||
|
else:
|
||||||
|
return "T:%s/%s>" % (self.status.extruder_temp, self.status.extruder_temp_target)
|
||||||
|
else:
|
||||||
|
return "printer>"
|
||||||
|
|
||||||
|
def postcmd(self, stop, line):
|
||||||
|
""" A hook we override to generate prompts after
|
||||||
|
each command is executed, for the next prompt.
|
||||||
|
We also use it to send M105 commands so that
|
||||||
|
temp info gets updated for the prompt."""
|
||||||
|
if self.p.online and self.dynamic_temp:
|
||||||
|
self.p.send_now("M105")
|
||||||
|
self.prompt = self.promptf()
|
||||||
|
return stop
|
||||||
|
|
||||||
def set_temp_preset(self, key, value):
|
def set_temp_preset(self, key, value):
|
||||||
if not key.startswith("bed"):
|
if not key.startswith("bed"):
|
||||||
self.temps["pla"] = str(self.settings.temperature_pla)
|
self.temps["pla"] = str(self.settings.temperature_pla)
|
||||||
|
@ -258,7 +313,7 @@ class pronsole(cmd.Cmd):
|
||||||
|
|
||||||
def online(self):
|
def online(self):
|
||||||
print "Printer is now online"
|
print "Printer is now online"
|
||||||
sys.stdout.write(self.prompt)
|
sys.stdout.write(self.promptf())
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
def help_help(self, l):
|
def help_help(self, l):
|
||||||
|
@ -290,7 +345,8 @@ class pronsole(cmd.Cmd):
|
||||||
|
|
||||||
def end_macro(self):
|
def end_macro(self):
|
||||||
if self.__dict__.has_key("onecmd"): del self.onecmd # remove override
|
if self.__dict__.has_key("onecmd"): del self.onecmd # remove override
|
||||||
self.prompt = "PC>"
|
self.in_macro = False
|
||||||
|
self.prompt = self.promptf()
|
||||||
if self.cur_macro_def!="":
|
if self.cur_macro_def!="":
|
||||||
self.macros[self.cur_macro_name] = self.cur_macro_def
|
self.macros[self.cur_macro_name] = self.cur_macro_def
|
||||||
macro = self.compile_macro(self.cur_macro_name, self.cur_macro_def)
|
macro = self.compile_macro(self.cur_macro_name, self.cur_macro_def)
|
||||||
|
@ -342,7 +398,8 @@ class pronsole(cmd.Cmd):
|
||||||
self.cur_macro_name = macro_name
|
self.cur_macro_name = macro_name
|
||||||
self.cur_macro_def = ""
|
self.cur_macro_def = ""
|
||||||
self.onecmd = self.hook_macro # override onecmd temporarily
|
self.onecmd = self.hook_macro # override onecmd temporarily
|
||||||
self.prompt = "..>"
|
self.in_macro = False
|
||||||
|
self.prompt = self.promptf()
|
||||||
|
|
||||||
def delete_macro(self, macro_name):
|
def delete_macro(self, macro_name):
|
||||||
if macro_name in self.macros.keys():
|
if macro_name in self.macros.keys():
|
||||||
|
@ -520,6 +577,7 @@ class pronsole(cmd.Cmd):
|
||||||
|
|
||||||
def preloop(self):
|
def preloop(self):
|
||||||
print "Welcome to the printer console! Type \"help\" for a list of available commands."
|
print "Welcome to the printer console! Type \"help\" for a list of available commands."
|
||||||
|
self.prompt = self.promptf()
|
||||||
cmd.Cmd.preloop(self)
|
cmd.Cmd.preloop(self)
|
||||||
|
|
||||||
def do_connect(self, l):
|
def do_connect(self, l):
|
||||||
|
@ -813,10 +871,11 @@ class pronsole(cmd.Cmd):
|
||||||
def recvcb(self, l):
|
def recvcb(self, l):
|
||||||
if "T:" in l:
|
if "T:" in l:
|
||||||
self.tempreadings = l
|
self.tempreadings = l
|
||||||
|
self.status.update_tempreading(l)
|
||||||
tstring = l.rstrip()
|
tstring = l.rstrip()
|
||||||
if(tstring!="ok" and not tstring.startswith("ok T") and not tstring.startswith("T:") and not self.listing and not self.monitoring):
|
if(tstring!="ok" and not tstring.startswith("ok T") and not tstring.startswith("T:") and not self.listing and not self.monitoring):
|
||||||
print tstring
|
print tstring
|
||||||
sys.stdout.write(self.prompt)
|
sys.stdout.write(self.promptf())
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
for i in self.recvlisteners:
|
for i in self.recvlisteners:
|
||||||
i(l)
|
i(l)
|
||||||
|
@ -848,16 +907,17 @@ class pronsole(cmd.Cmd):
|
||||||
def help_help(self):
|
def help_help(self):
|
||||||
self.do_help("")
|
self.do_help("")
|
||||||
|
|
||||||
def tempcb(self, l):
|
|
||||||
if "T:" in l:
|
|
||||||
print l.replace("\r", "").replace("T", "Hotend").replace("B", "Bed").replace("\n", "").replace("ok ", "")
|
|
||||||
|
|
||||||
def do_gettemp(self, l):
|
def do_gettemp(self, l):
|
||||||
|
if "dynamic" in l:
|
||||||
|
self.dynamic_temp = True
|
||||||
if self.p.online:
|
if self.p.online:
|
||||||
self.recvlisteners+=[self.tempcb]
|
|
||||||
self.p.send_now("M105")
|
self.p.send_now("M105")
|
||||||
time.sleep(0.75)
|
time.sleep(0.75)
|
||||||
self.recvlisteners.remove(self.tempcb)
|
if not self.status.bed_enabled:
|
||||||
|
print "Hotend: %s/%s" % (self.status.extruder_temp, self.status.extruder_temp_target)
|
||||||
|
else:
|
||||||
|
print "Hotend: %s/%s" % (self.status.extruder_temp, self.status.extruder_temp_target)
|
||||||
|
print "Bed: %s/%s" % (self.status.bed_temp, self.status.bed_temp_target)
|
||||||
|
|
||||||
def help_gettemp(self):
|
def help_gettemp(self):
|
||||||
print "Read the extruder and bed temperature."
|
print "Read the extruder and bed temperature."
|
||||||
|
|
Loading…
Reference in New Issue