add SSDP broadcast utility for connecting remote Bambu printers to a local slicer
This commit is contained in:
parent
98190a39e5
commit
417d19211b
1 changed files with 89 additions and 0 deletions
89
mods/bambu/ssdp.js
Normal file
89
mods/bambu/ssdp.js
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
/**
|
||||||
|
* Utility to make a Bambu printer appear on the local subnet
|
||||||
|
* so that the Bambu Network Plugin can find it. The intended
|
||||||
|
* use case is where a printer is on another subnet but reachable
|
||||||
|
* directly (routable) and Bambu Studio / Orca Slicer can't find
|
||||||
|
* it because SSDP broadcasts do not cross subnets.
|
||||||
|
*
|
||||||
|
* When this process is run from the command line, it should appear
|
||||||
|
* under the slicer Devices tab when "+" is selected.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const [ name, host, serial ] = process.argv.slice(2);
|
||||||
|
|
||||||
|
if (!(name && host && serial)) {
|
||||||
|
console.log('usage: ssdp [host] [serial-no]');
|
||||||
|
return process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log([
|
||||||
|
`Broadcasting Bambu Printer`,
|
||||||
|
`Name: ${name}`,
|
||||||
|
`Host: ${host}`,
|
||||||
|
`Serial: ${serial}`,
|
||||||
|
].join('\n'));
|
||||||
|
|
||||||
|
const dgram = require("dgram");
|
||||||
|
|
||||||
|
// SSDP parameters
|
||||||
|
const SSDP_ADDRESS = "239.255.255.250";
|
||||||
|
const SSDP_PORT = 1900;
|
||||||
|
|
||||||
|
// Create a UDP socket
|
||||||
|
const socket = dgram.createSocket("udp4");
|
||||||
|
|
||||||
|
// SSDP discovery message
|
||||||
|
const ssdpMessage = `
|
||||||
|
NOTIFY * HTTP/1.1
|
||||||
|
HOST: ${SSDP_ADDRESS}:${SSDP_PORT}
|
||||||
|
Server: UPnP/1.0
|
||||||
|
Location: ${host}
|
||||||
|
NT: urn:bambulab-com:device:3dprinter:1
|
||||||
|
USN: ${serial}
|
||||||
|
Cache-Control: max-age=1800
|
||||||
|
DevModel.bambu.com: C11
|
||||||
|
DevName.bambu.com: ${name}
|
||||||
|
DevSignal.bambu.com: -66
|
||||||
|
DevConnect.bambu.com: lan
|
||||||
|
DevBind.bambu.com: free
|
||||||
|
Devseclink.bambu.com: secure
|
||||||
|
DevVersion.bambu.com: 01.07.00.00
|
||||||
|
DevCap.bambu.com: 1`
|
||||||
|
.trim().split('\n').join("\r\n") + "\r\n\r\n";
|
||||||
|
|
||||||
|
function send(socket, addr, port) {
|
||||||
|
|
||||||
|
// Send the SSDP broadcast
|
||||||
|
socket.send(
|
||||||
|
ssdpMessage,
|
||||||
|
0,
|
||||||
|
ssdpMessage.length,
|
||||||
|
port,
|
||||||
|
addr,
|
||||||
|
(err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error("Error sending SSDP broadcast:", err);
|
||||||
|
} else {
|
||||||
|
console.log(`>>>>>>>>>>>>>>>>> ${addr} : ${port}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.on("error", error => console.log({ error }));
|
||||||
|
|
||||||
|
// Handle responses from devices
|
||||||
|
socket.on("message", (msg, rinfo) => {
|
||||||
|
// console.log(`<<<<<<<<<<<<<<<<< ${rinfo.address} : ${rinfo.port}`);
|
||||||
|
// console.log(msg.toString().trim());
|
||||||
|
// console.log('<<<<<<<<<<<<<<<<<');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Bind the socket and join the multicast group
|
||||||
|
socket.bind(1900, () => {
|
||||||
|
socket.addMembership(SSDP_ADDRESS); // Join the SSDP multicast group
|
||||||
|
setInterval(() => send(socket, '239.255.255.250', 2021), 1000);
|
||||||
|
// setInterval(() => send(socket, '239.255.255.250', 1990), 2000);
|
||||||
|
// setInterval(() => send(socket, '255.255.255.255', 2021), 2000);
|
||||||
|
});
|
||||||
|
|
||||||
Loading…
Reference in a new issue