I have a Flashforge Guider 2s and like many 3d printers these days, it has wifi and ethernet. It appears as if Octoprint only works with printers connected via USB. Is this correct? If I was to try and add support for network printing, could this be done via a plugin or would it need to be a core change to Octoprint? Thanks for any guidance on this.
It has a USB Type-B connection on it, right? You should use that and call it a day.
If you have been working in the I.T. field within the Linux speciality for the last decade then you might consider rfc2217 as a solution. Search the forum here for a write-up but it won't be easy and it still involves a Raspberry Pi Zero W, for example, connected to your printer. It can connect "over wi-fi" though from the Raspberry Pi 3B somewhere else in your home.
Do you think these boards are implementing some form of rfc2217 and might not require the pi device? I'm pretty sure that most of them (like duet boards) bundle their own web interface so not sure why you would want octoprint anyway, except for the plugin ecosystem.
Quick search turned up this...
Proprietary, undocumented interface, even if that thing spoke serial it can't be supported unless someone reverse engineers it.
Even if somebody sends me one and pays me to reverse-engineer their proprietary interface... I'm still not sure if I'd want to reward that behavior. (This reminds me of that pricey/proprietary Dremel 3D printer.)
I see 3D printer manufacturers as the animal kingdom. Some survive and some don't. For an animal species to survive, it needs to be optimal. For a 3D printer design to survive in the marketplace—these days—it needs to be 1) open-sourced, 2) use something like Marlin, 3) talk text rather than binary stream, 4) have a Type-B serial port, 5) work with a common slicer like Cura, 6) work with non-proprietary filament spools, etc. Anything else, to me, is sub-optimal and their reward should be extinction.
So, I believe that the Keurig coffee maker should become extinct; consumers should boycott proprietary technology which forces them to only buy a single brand of K-cup.
As an activist I believe that we within this ecosystem can help a poorly-designed species to survive or we can allow it to eventually reap its just rewards. I do feel somewhat sorry for the consumers who have purchased an obstinate printer but part of their own karma is that they tried to only pay $200, often.
/rant
It has an ethernet connection, so I think why not just use that instead of adding an extra device in to the mix?
I'm happy to have a go reverse engineering it. I've looked at the tcp data being send it it and it looks like standard gcode. I've made a simple python script that has sent/received data over tcp. I'm just wondering if I could make a plugin (maybe using virtual printer?) to benefit both me and octoprint.
I work at a public school and this was the only printer available to us with a big enough print bed. I try to push/use open source as much as possible, but this is not one of those times in terms of the printer. I'd be happy if I could help octoprint in some way (creating a network printer plugin), but I just want to know if it's possible before I get started.
The school where I worked last year bought a FlashForge Creator Pro. Look for the fourth entry here and scroll to the far right. That's the best I could do with this printer.
It uses a different slicer and produces .g3x
files rather than straight gcode. It's probably something silly like converting the gcode into base64 encoding or something else to keep the users ignorant. I really wouldn't know what it would take to turn their firmware into something that behaves in a normal way.
I have a new Voxelab Aquila Pro, which connects on tcp://192.168.0.n:4455, rather than /dev/stty0 or any serial. I can see lots of posts about connecting to their printers via TCP, but I can't see resolution or whether this is possible. May I please ask if this is now possible? Thanks.
depends on what the communication is, might work with this plugin.
Hi,
Thanks for the feedback. I tried the install, but it fails with
File "/home/pi/OctoPrint/OctoPrint-Network-Printing/setup.py", line 38
plugin_requires: List[str] = []
^
SyntaxError: invalid syntax
But it might be my install.
Indeed, it is a Python 3-only plugin. If you haven't already upgraded to Python 3 then you will be left behind by many plugins that have dropped support for Python 2.
If you think your OctoPrint instance is running under Python 3, then you've not tried to install it in the right place.
Thanks for the plugin shout. After some fiddling, this does connect using both the 'rfc2217' and 'socket' protocol.
However the connection doesn't find a printer. I completed a 'tcpdump' from the printer's own software and captured this handshake:
M601 S1
CMD M601 Received.
Control Success.
ok
M115
CMD M115 Received.
Machine Type: Voxelab Aquila Pro
Machine Name: Bens VoxelMaker
Firmware: v1.4.6
SN: SNVAPB9200290
X: 235 Y: 235 Z: 250
Tool Count: 1
Storage: 1
ok
When I look at OctoPrint terminal I can see this:
Connecting to port socket://192.168.0.25:8899, baudrate 115200
Handshake attempt #1 with timeout 2.0s
Connected to: Serial<id=0xab5b3db0, open=True>(port='socket://192.168.0.25:8899', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=2.0, xonxoff=False, rtscts=False, dsrdtr=False), starting monitor
Send: N0 M110 N0*125
Handshake attempt #2 with timeout 2.0s
Send: N0 M110 N0*125
Handshake attempt #3 with timeout 2.0s
Send: N0 M110 N0*125
Which never progresses to success. Is my 3D printer compatible with OctoPrint, or have I purchased a dud??
Thanks for any help.
I'm going to prefix this by saying I will be impressed if you do get it working well - don't hold on to too much hope. But we can try.
M601 is used to pause the print on Prusa firmware, apparently here it is used to start communication. Welcome to the wonderful world of manufacturers messing with the 'standards' (or the closest thing we have to them). I guess there is no guarantee that they have not changed other things. M601 doesn't actually exist in mainline Marlin at all.
You may be able to change OctoPrint's 'hello' command to be the same, M601 S1
, and see if it gets further with connection? It's in an advanced section under 'Firmware and Protocol':
Hi, Thanks so much for the idea. From sniffing the connection from it's own software, I had to add a '~' before the first command. This seems to make the printer report back the 'ok' commands?
Anyway, I now get as far as:
Send: ~M601 S1
Send: ~M601 S1
Recv: CMD M601 Received.
Recv: Control Success.
Recv: ok
Changing monitoring state from "Connecting" to "Operational"
Send: N0 M110 N0*125
Recv: CMD M601 Received.
Recv: Control failed.
Recv: ok
Send: N1 M115*39
Unexpected error while reading serial port, please consult octoprint.log for details: SerialException: 'read failed: socket disconnected' @ comm.py:_readline:3997
This seems odd. OctoPrint sent an M110 and got back CMD M601 Received. This might be because OctoPrint seems to have sent the header twice?
But glad to see we are making progress.