Fix: recover filament IDs correctly; edit nozzle size; nozzle as a schedule constraint

This commit is contained in:
Reid 'arrdem' McKenzie 2023-07-08 19:21:32 -06:00
parent efae37ad88
commit e9c059e69d
8 changed files with 46 additions and 14 deletions

View file

@ -123,7 +123,7 @@ def handle_edit_printers():
args["enabled"] = int(args["enabled"])
args["filament_id"] = int(args["filament_id"])
args["chassis_id"] = int(args["chassis_id"])
print(args)
args["nozzle_diameter"] = float(args["nozzle_diameter"])
ctx.db.edit_printer(**args)
return redirect("/admin")

View file

@ -213,3 +213,7 @@ class Db(Queries):
def finish_job(self, *, jid: int, state: str, message: Optional[str] = None):
super().finish_job(jid=jid, state=state, message=message)
def create_filament(self, *, name: str):
super().create_filament(name=name)
return super().fetch_filament(name=name)

View file

@ -78,6 +78,7 @@ SELECT
, fa.max_end
, fa.nozzle_diameter
, fa.filament_id
, (SELECT name FROM filament WHERE id = fa.filament_id) AS filament_name
FROM jobs j
INNER JOIN files f
ON j.file_id = f.id

View file

@ -102,6 +102,7 @@ SELECT
, p.chassis_id
, p.enabled
, s.name as status
, p.nozzle_diameter
FROM printers p
INNER JOIN printer_statuses s ON p.status_id = s.id
WHERE p.id = :pid
@ -140,6 +141,7 @@ SELECT
, c.limit_bed
, c.limit_hotend
, p.nozzle_diameter
, p.filament_id
FROM printers p
LEFT JOIN (SELECT id, printer_id FROM jobs WHERE finished_at IS NULL) j
ON p.id = j.printer_id
@ -174,6 +176,7 @@ SET
, filament_id = :filament_id
, chassis_id = :chassis_id
, enabled = :enabled
, nozzle_diameter = :nozzle_diameter
WHERE
id = :id
;
@ -202,3 +205,9 @@ VALUES (
RETURNING
id
;
-- name: fetch-filament^
SELECT *
FROM filament
WHERE name = :name
;

View file

@ -4,10 +4,18 @@
<div class="row">
<form method="post">
<div class="row">
<div class="twelve columns">
<div class="six columns">
<label for="name">Printer name</label>
<input type="text" name="name" value="{{ printer.name }}" />
</div>
<div class="six columns">
<label for="chassis">Chassis</label>
<select name="chassis_id">
{% for c in ctx.db.list_chassis() %}
<option value="{{c.id}}" {% if printer.chassis_id == c.id %}selected{%endif%}>{{c.name}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="row">
<div class="twelve columns">
@ -27,15 +35,7 @@
<input type="text" name="api_key" value="{{ printer.api_key }}" />
</div>
</div>
<div class"row">
<div class="four columns">
<label for="chassis">Chassis</label>
<select name="chassis_id">
{% for c in ctx.db.list_chassis() %}
<option value="{{c.id}}" {% if printer.chassis_id == c.id %}selected{%endif%}>{{c.name}}</option>
{% endfor %}
</select>
</div>
<div class="row">
<div class="four columns">
<label for="filament">Filament load</label>
<select name="filament_id">
@ -44,6 +44,10 @@
{% endfor %}
</select>
</div>
<div class="four columns">
<label for="nozzle_diameter">Nozzle diameter (mm)</label>
<input type="text" name="nozzle_diameter" value="{{ printer.nozzle_diameter}}" />
</div>
<div class="four columns">
<label for="enabled">Printing enabled</label>
<select name="enabled">

View file

@ -4,7 +4,7 @@
{% if jobs %}
{% for job in jobs %}
<div class="job row u-flex">
<div class="details six columns u-flex">
<div class="details six columns u-flex u-flex-wrap">
<div class="job-filename u-flex">
<label for="filename">File</label>
<span name="filename">{{ctx.db.fetch_file(ctx.uid, job.file_id).filename or "it's a secret"}}</span>
@ -20,6 +20,15 @@
<label for="runtime">Runtime</label>
<span name="Runtime">{{ (datetime.now() - datetime.fromisoformat(job.started_at)) }}</span>
</div>
{% else %}
<div class="job-constraint u-flex">
<label>Material</label>
{{ job.filament_name }}
</div>
<div class="job-constraint u-flex">
<label>Limits</label>
{{ job.max_x }}mm x{{ job.max_y }}mm x{{ job.max_z }}mm, bed {{ job.max_bed }}c, end {{ job.max_end }}c, nozzle {{ "%.2f"|format(job.nozzle_diameter) }}mm
</div>
{% endif %}
</div>
<div class="two columns">

View file

@ -9,6 +9,7 @@
<span><label>Status</label>{{printer.status}}, {% if printer.enabled %}accepting jobs{%else%}not scheduling{%endif%}</span>
<span><label>Loaded material</label>{{printer.filament_name}}</span>
<span><label>Machine</label>{{printer.machine_name}}</span>
<span><label>Nozzle</label>{{ "%.2f"|format(printer.nozzle_diameter) }}mm</span>
<span><label>Limits</label>{{printer.limit_x}}mm x{{printer.limit_y}}mm x{{printer.limit_z}}mm, bed {{printer.limit_bed}}c, end {{printer.limit_hotend}}c</span>
</div>
{% endfor %}

View file

@ -152,7 +152,8 @@ def assign_jobs(app: App, db: Db) -> None:
for job in db.list_job_queue(uid=None):
for printer in db.list_idle_printers():
if (
printer.limit_x >= job.max_x
job.analysis_id is not None
and printer.limit_x >= job.max_x
and printer.limit_y >= job.max_y
and printer.limit_z >= job.max_z
and printer.limit_hotend >= job.max_end
@ -163,6 +164,8 @@ def assign_jobs(app: App, db: Db) -> None:
db.assign_job(jid=job.id, pid=printer.id)
log.info(f"Mapped job {job.id} to printer {printer.id}")
break
else:
print("Could not map\n", job, "\n", printer)
def push_jobs(app: App, db: Db) -> None:
@ -336,6 +339,7 @@ def analyze_files(app: App, db: Db):
continue
log.info(f"Analyzed {file}")
db.create_analysis(
file_id=file.id,
max_x=record.max_x,
@ -344,7 +348,7 @@ def analyze_files(app: App, db: Db):
max_end=record.max_end,
max_bed=record.max_bed,
nozzle=record.nozzle,
filament_id=db.create_filament(record.filament),
filament_id=db.create_filament(name=record.filament).id,
)