From 3e27f195d0ad9cecbf9cf205b3d3e92ac5f67c44 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Feb 2025 01:36:56 -0500 Subject: [PATCH] bbl min add printer status and print control buttons --- mods/bambu/bambu.js | 43 ++++++++++++++++++++++++++++++++----------- mods/bambu/init.js | 24 +++++++++++++++++------- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/mods/bambu/bambu.js b/mods/bambu/bambu.js index ef9847cf..3b1a3bd6 100644 --- a/mods/bambu/bambu.js +++ b/mods/bambu/bambu.js @@ -170,10 +170,10 @@ self.kiri.load(api => { upload } = print || {}; $('bbl_noz').value = nozzle_diameter || ''; - $('bbl_noz_temp').value = nozzle_temper ?? ''; - $('bbl_noz_target').value = nozzle_target_temper ?? ''; - $('bbl_bed_temp').value = bed_temper ?? ''; - $('bbl_bed_target').value = bed_target_temper ?? ''; + $('bbl_noz_temp').value = nozzle_temper?.toFixed(1) ?? ''; + $('bbl_noz_target').value = nozzle_target_temper?.toFixed(1) ?? ''; + $('bbl_bed_temp').value = bed_temper?.toFixed(1) ?? ''; + $('bbl_bed_target').value = bed_target_temper?.toFixed(1) ?? ''; if (files) { h.bind($('bbl_files'), files.map(file => { return h.option({ @@ -183,6 +183,13 @@ self.kiri.load(api => { })); rec.files = undefined; } + if (print_error) { + bbl_status.value = `print error ${print_error}` + } else if (mc_remaining_time) { + bbl_status.value = `printing layer ${layer_num} of ${total_layer_num} | ${mc_percent}% complete | ${mc_remaining_time} minutes left` + } else { + bbl_status.value = `printer idle`; + } } function printer_status(msg) { @@ -211,15 +218,26 @@ self.kiri.load(api => { function monitor_keepalive() { // console.log({ keepalive: selected }); - if (selected?.rec?.serial) { - socket.send({ cmd: "keepalive", serial: selected.rec.serial }); - } + // if (monitoring()) { + // socket.send({ cmd: "keepalive", serial: selected.rec.serial }); + // } + cmd_if("keepalive"); } function monitor_stop() { socket.stop(); } + function monitoring() { + return selected?.rec?.serial ? true : false; + } + + function cmd_if(cmd) { + if (monitoring()) { + socket.send({ cmd, serial: selected.rec.serial }); + } + } + function list_files() { if (selected?.rec?.host) { socket.send({ cmd: "files", ...selected.rec }); @@ -312,11 +330,11 @@ self.kiri.load(api => { ]), h.div({ class: "var-row" }, [ h.label('temp'), - h.input({ id: "bbl_noz_temp", size: 8 }) + h.input({ id: "bbl_noz_temp", size: 5 }) ]), h.div({ class: "var-row" }, [ h.label('target'), - h.input({ id: "bbl_noz_target", size: 8 }) + h.input({ id: "bbl_noz_target", size: 5 }) ]) ]), h.div({ class: "t-body t-inset f-col" }, [ @@ -325,11 +343,11 @@ self.kiri.load(api => { ]), h.div({ class: "var-row" }, [ h.label('temp'), - h.input({ id: "bbl_bed_temp", size: 8 }) + h.input({ id: "bbl_bed_temp", size: 5 }) ]), h.div({ class: "var-row" }, [ h.label('target'), - h.input({ id: "bbl_bed_target", size: 8 }) + h.input({ id: "bbl_bed_target", size: 5 }) ]) ]) ]), @@ -358,6 +376,9 @@ self.kiri.load(api => { h.div({ class: "gap4" }, [ h.label({ class: "set-header dev-sel" }, [ h.a('status') ]), h.input({ id: "bbl_status", class: "t-left mono grow" }), + h.button({ _: "pause", class: "a-center", onclick() { cmd_if("pause") } }), + h.button({ _: "resume", class: "a-center", onclick() { cmd_if("resume") } }), + h.button({ _: "cancel", class: "a-center", onclick() { cmd_if("cancel") } }), ]) ]), { before: true }); select = modal.bbl_sel; diff --git a/mods/bambu/init.js b/mods/bambu/init.js index 005a4aef..42e8793f 100644 --- a/mods/bambu/init.js +++ b/mods/bambu/init.js @@ -145,12 +145,9 @@ module.exports = async (server) => { async function ftp_list(args = {}) { const client = await ftp_open(args); const list = []; - try { - list.push(...(await client.list())); - list.push(...(await client.list("/cache"))); - } finally { - client.close(); - } + try { list.push(...(await client.list())) } catch (e) { } + try { list.push(...(await client.list("/cache"))) } catch (e) { } + client.close(); return list; } @@ -268,19 +265,32 @@ module.exports = async (server) => { break; case "files": ftp_list({ host, code }).then(files => { + util.log({ ftp_files: files.length }); + // console.log(JSON.stringify(files,undefined,4)); files = files .filter(file => file.name.toLowerCase().endsWith(".3mf")) .map(file => { return { name: file.name, - size: file.size + size: file.size, + date: file.rawModifiedAt }; }); wsend({ serial, message: { files }}); }).catch(error => { + util.log({ ftp_error: error }); wsend({ serial, error: error.message || error.toString() }); }); break; + case "pause": + wsend({ print: { command: "pause", sequence_id: "0" } }); + break; + case "resume": + wsend({ print: { command: "resume", sequence_id: "0" } }); + break; + case "cancel": + wsend({ print: { command: "stop", sequence_id: "0", param: "" } }); + break; case "keepalive": // util.log({ keepalive: serial }); mcache[serial]?.keepalive();