Duet Buddy - a proof of concept remote monitor
-
@richardmckenna @zapta
this is the output from the standalone version.{"status":"I","coords":{"axesHomed":[1,1,1],"wpl":1,"xyz":[15.000,0.000,4.850],"machine":[15.000,0.000,4.850],"extr":[0.0]},"speeds":{"requested":0.0,"top":0.0},"currentTool":-1,"params":{"atxPower":-1,"fanPercent":[0,100],"speedFactor":100.0,"extrFactors":[100.0],"babystep":0.000},"seq":1,"sensors":{"probeValue":0,"fanRPM":[-1,-1]},"temps":{"bed":{"current":24.2,"active":0.0,"standby":0.0,"state":0,"heater":0},"current":[24.2,23.4],"state":[0,0],"tools":{"active":[[0.0]],"standby":[[0.0]]},"extra":[{"name":"*MCU-Temp","temp":48.0},{"name":"*Chamber Temp","temp":28.3},{"name":"*Chamber Hum[%]","temp":28.3}]},"time":149.0,"currentLayer":0,"currentLayerTime":0.0,"extrRaw":[0.0],"fractionPrinted":0.0,"filePosition":0,"firstLayerDuration":0.0,"firstLayerHeight":0.00,"printDuration":0.0,"warmUpDuration":0.0,"timesLeft":{"file":0.0,"filament":0.0,"layer":0.0}}
-
If you don't need to full two way interface... There is a way to get status (only) from a Duet3/RRF3 with HTTP only (no socket needed). Here is a Python example that returns a JSON object of "Current Position" from either 2 or 3 via auto-detection:
# Python Script to return JSON object of current position from a Duet printer # Auto-detects RRF2 vs RRF3 protocol # # Copyright (C) 2020 Danal Estes all rights reserved. # Released under The MIT License. Full text available via https://opensource.org/licenses/MIT # import requests import json import sys endpoint2='/rr_status?type=1' # RRF2 request endpoint3='/machine/status' # RRF3 request endpointA=endpoint2 # Active def getCoords(base_url): global endpointA if (endpointA == endpoint2): try: r = requests.get(f'{base_url}{endpointA}') j=json.loads(r.text) jc=j['coords']['xyz'] ret=json.loads('{}') for i in range(0,len(jc)): ret[ 'xyz'[i] ] = jc[i] return(ret) except: endpointA = endpoint3 if (endpointA == endpoint3): try: r = requests.get(f'{base_url}{endpointA}') j=json.loads(r.text) ja=j['result']['move']['axes'] jd=j['result']['move']['drives'] ad=json.loads('{}') for i in range(0,len(ja)): ad[ ja[i]['letter'] ] = ja[i]['drives'][0] ret=json.loads('{}') for i in range(0,len(ja)): ret[ ja[i]['letter'] ] = jd[i]['position'] return(ret) except: print(base_url," does not appear to be a RRF2 or RRF3 printer", file=sys.stderr) raise # Test cases print(getCoords('http://192.168.7.100')) print(getCoords('http://127.0.0.1')) print(getCoords('http://192.168.7.101'))
And example output:
{'x': 0.0, 'y': 0.0, 'z': 626.751} {'X': 271.4, 'Y': 341.1, 'Z': 5.7, 'U': 0} {'X': 271.4, 'Y': 341.1, 'Z': 5.7, 'U': 0}
-
Thanks Danal. I am currently using '/rr_status?type=3' but this can be configured in the M5Stack SD card config file to any url. Picked =3 because this is what my DWC keeps polling.
Currently the response parser looks for these json fields:
status, fractionPrinted, coords.xyz[2], temps.current[0] and temps.current[1]. If RRF3 has them then it work with no change. Otherwise, adding them to the parser should be easy.Response parser is straight forward and anybody make changes for RRF3 please send me a pull request.
https://github.com/zapta/misc/blob/master/duet3d_buddy/arduino/duet_parser.cpp
-
@zapta I just set one up. Fairly straight forward, Monitoring a print job as I'm typing this. I may have missed it, is there a way to program the buttons to pause or stop the current job or does it only monitor the printer (one way device)? Thank you, it's a neat little device.
-
@bricor, awesome!!!
Currently the buttons are not used but shouldn't be too difficult for any with some programming experience to program them to do things, for example, sending gcode commands to the printer.
Here is a challenge, the first person that will program a button to send any command to the duet will the respect of the community and an amazon gift card of $25 (e.g. for a spool of filament). Challenge closes April 30. Please report your success here and ping me.
-
@zapta I really apprecite the effort. I could only imagine what it took to put this together. For me, it was a challenge to put the bits and pieces in place to go from plugging in the usb cable to having a functioning device. Not difficult, but a challenge. I hope to figure out what you did here and the whole c programming stuff. Need to be able to toggle between machines (ip addresses) as well
-
@bricor, I plan to look for ways to simplify the deployment for people that don't want to deal with Arduino. M5Stack has a software tool called M5Burner and another option is to use the esptool program directly. Need to figure those out or possibly somebody here can come with a simple recipe to 'burn' the Duet Buddy firmware.
-
@zapta I should’ve said fun challenge. Rewarding type
-
dammit!!! you guys have just made, nay, forced me to buy this!. Grrrrrr
M5Stack and Battery module on their way.
-
I have one on order from Bangood. Ordered the Grey one at £29.53 as it has the motion sensor built in.
-
I ordered the grey one too from aliexpress for £28.51.
Still waiting for it to get dispatched due to the "extended" chinese new year.
Sounds as though that won't happen till around the 18/02 -
@tekkydave ah I went with this one https://www.amazon.co.uk/MakerHawk-Development-Bluetooth-Expandable-Compatible/dp/B07M71ZG6N which has the built in MPU9250 - £13 more but I get it tomorrow
-
@richardmckenna thats the grey one
-
The github repository has now a script to download the firmware to a M5Stack Core. For now it's only for windows but writing a similar shell script for Mac or Linux should be easy.
With this script, the Arduino IDE is not needed anymore (unless if you want to make code changes) and it just requires the Silicon Labs USB/Serial driver (available at m5stack.com and silabs.com).
https://github.com/zapta/misc/tree/master/duet3d_buddy/release
Please let me know howit works and feel free to send me pull requests.
-
It's arrived
-
Very cool project!
Is there a way to do something similar but display the status of multiple printers on a computer monitor? Maybe with the use of a raspberry pi? I have nine printers that I'd like to monitor from another room but I don't want to buy nine of those.
-
@hayseed_byte Perhaps something like this?
https://github.com/DanalEstes/MultiDuetWebMonitor -
@Phaedrux That's perfect. Thanks! Don't know how I haven't come across that.
-
I've never tried it, but that should run just fine in a Pi browser. Let me know if it does not.
PM here, or danal (dot) estes (at) gmail (dot) com
-
@zapta any chance you could move the duet buddy code to its own repo? It would make it easier to fork without pulling all your other misc stuff as well