@duet3d/objectmodel 3.7.0-beta.3 → 3.7.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,395 +1,108 @@
1
1
  {
2
- "boards": {
3
- "summary": "List of connected boards",
4
- "remarks": "The first item represents the main board"
5
- },
6
- "boards[].accelerometer": "Accelerometer of this board or null if unknown",
7
- "boards[].accelerometer.orientation": {
8
- "summary": "Orientation of the accelerometer",
9
- "remarks": "See https://docs.duet3d.com/en/Duet3D_hardware/Accessories/Duet3D_Accelerometer#orientation for a list of orientations"
10
- },
11
- "boards[].accelerometer.points": "Number of collected data points in the last run or 0 if it failed",
12
- "boards[].accelerometer.runs": "Number of completed sampling runs",
13
- "boards[].canAddress": "CAN address of this board or null if not applicable",
14
- "boards[].closedLoop": "Closed loop data of this board or null if unknown",
15
- "boards[].closedLoop.points": "Number of collected data points in the last run or 0 if it failed",
16
- "boards[].closedLoop.runs": "Number of completed sampling runs",
17
- "boards[].directDisplay": "Details about a connected display or null if none is connected",
18
- "boards[].directDisplay.encoder": "Encoder of this screen or null if none",
19
- "boards[].directDisplay.encoder.pulsesPerClick": "Number of pulses per click of the rotary encoder",
20
- "boards[].directDisplay.screen": "Screen information",
21
2
  "boards[].directDisplay.screen.controller": {
22
3
  "values": {
23
- "ST7920": "ST7920 controller",
24
- "ST7567": "ST7567 controller",
25
- "ILI9488": "ILI9488 controller"
4
+ "ST7920": null,
5
+ "ST7567": null,
6
+ "ILI9488": null
26
7
  }
27
8
  },
28
- "boards[].drivers": "Drivers of this board",
29
- "boards[].drivers[].closedLoop.currentFraction": "Current fraction of the configured motor current used",
30
- "boards[].drivers[].closedLoop.positionError": "Position error in full steps of the motor",
31
- "boards[].drivers[].config.direction": "Configured direction of the driver (false = reverse, true = forward)",
32
9
  "boards[].drivers[].config.mode": {
33
- "summary": "Configured driver mode (only available for smart drivers)",
34
10
  "values": {
35
- "0": "Constant off-time chopper",
36
- "1": "Random off-time chopper",
37
- "2": "SpreadCycle",
38
- "3": "StealthChop (includes stealthChop2)",
39
- "4": "Field-oriented control (direct)",
40
- "5": "Driver mode is unknown"
11
+ "0": null,
12
+ "1": null,
13
+ "2": null,
14
+ "3": null,
15
+ "4": null,
16
+ "5": null
41
17
  }
42
18
  },
43
- "boards[].firmwareDate": "Date of the firmware build",
44
- "boards[].firmwareFileName": "Filename of the firmware binary",
45
- "boards[].firmwareName": "Name of the firmware build",
46
- "boards[].firmwareVersion": "Version of the firmware build",
47
- "boards[].freeRam": "Amount of free RAM on this board (in bytes or null if unknown)",
48
- "boards[].iapFileNameSBC": {
49
- "summary": "Filename of the IAP binary that is used for updates from the SBC or null if unsupported",
50
- "remarks": "This is only available for the mainboard (first board item)"
51
- },
52
- "boards[].iapFileNameSD": {
53
- "summary": "Filename of the IAP binary that is used for updates from the SD card or null if unsupported",
54
- "remarks": "This is only available for the mainboard (first board item)"
55
- },
56
- "boards[].inductiveSensor": "Information about an inductive sensor or null if not present",
57
- "boards[].maxHeaters": "Maximum number of heaters this board can control",
58
- "boards[].maxMotors": "Maximum number of motors this board can drive",
59
- "boards[].mcuTemp": "Minimum, maximum, and current temperatures of the MCU or null if unknown",
60
- "boards[].mcuTemp.current": "Current value",
61
- "boards[].mcuTemp.max": "Maximum value",
62
- "boards[].mcuTemp.min": "Minimum value",
63
- "boards[].name": "Full name of the board",
64
- "boards[].shortName": "Short name of this board",
65
19
  "boards[].state": {
66
- "summary": "State of this board",
67
20
  "values": {
68
- "unknown": "Unknown state",
69
- "flashing": "Flashing new firmware",
70
- "flashFailed": "Failed to flash new firmware",
71
- "resetting": "Board is being reset",
72
- "running": "Board is up and running",
73
- "timedOut": "Board timed out"
21
+ "unknown": null,
22
+ "flashing": null,
23
+ "flashFailed": null,
24
+ "resetting": null,
25
+ "running": null,
26
+ "timedOut": null
74
27
  }
75
28
  },
76
- "boards[].supportsDirectDisplay": "Indicates if this board supports external displays",
77
- "boards[].timeout": "Connection timeout of this board (in s)",
78
- "boards[].uniqueId": "Unique identifier of the board or null if unknown",
79
- "boards[].v12": "Minimum, maximum, and current voltages on the 12V rail or null if unknown",
80
- "boards[].v12.current": "Current value",
81
- "boards[].v12.max": "Maximum value",
82
- "boards[].v12.min": "Minimum value",
83
- "boards[].vIn": "Minimum, maximum, and current voltages on the input rail or null if unknown",
84
- "boards[].vIn.current": "Current value",
85
- "boards[].vIn.max": "Maximum value",
86
- "boards[].vIn.min": "Minimum value",
87
- "boards[].wifiFirmwareFileName": "Filename of the on-board WiFi chip or null if not present",
88
- "directories": {
89
- "summary": "Information about the individual directories",
90
- "remarks": "This may not be available in RepRapFirmware if no mass storages are available"
91
- },
92
- "directories.filaments": "Path to the filaments directory",
93
- "directories.firmware": "Path to the firmware directory",
94
- "directories.gCodes": "Path to the G-Codes directory",
95
- "directories.macros": "Path to the macros directory",
96
- "directories.menu": {
97
- "summary": "Path to the menu directory",
98
- "remarks": "Intended for 12864 displays but currently unused in DSF. It is only needed for the Duet Maestro + DWC"
99
- },
100
- "directories.system": "Path to the system directory",
101
- "directories.web": "Path to the web directory",
102
- "fans": "List of configured fans",
103
- "fans[].actualValue": "Value of this fan (0..1 or -1 if unknown)",
104
- "fans[].blip": "Blip value indicating how long the fan is supposed to run at 100% when turning it on to get it started (in s)",
105
- "fans[].frequency": "Configured frequency of this fan (in Hz)",
106
- "fans[].max": "Maximum value of this fan (0..1)",
107
- "fans[].min": "Minimum value of this fan (0..1)",
108
- "fans[].name": "Name of the fan",
109
- "fans[].requestedValue": "Requested value for this fan on a scale between 0 to 1",
110
- "fans[].rpm": "Current RPM of this fan or -1 if unknown/unset",
111
- "fans[].tachoPpr": "Pulses per tacho revolution",
112
- "fans[].thermostatic": "Thermostatic control parameters",
113
- "fans[].thermostatic.highTemperature": "Upper temperature range required to turn on the fan (in C)",
114
- "fans[].thermostatic.lowTemperature": "Lower temperature range required to turn on the fan (in C)",
115
- "fans[].thermostatic.sensors": {
116
- "summary": "List of sensors to monitor (indices)",
117
- "remarks": "This is a bitmap represented as an array"
118
- },
119
- "global": {
120
- "summary": "Dictionary of global variables vs JSON values",
121
- "remarks": "When DSF attempts to reconnect to RRF, this may be set to null to clear the contents"
122
- },
123
- "heat": "Information about the heat subsystem",
124
- "heat.bedHeaterMapping": {
125
- "summary": "List of configured bed heaters (indices), grouped by bed (first dimension)",
126
- "remarks": "Items may be -1 if unconfigured"
127
- },
128
- "heat.bedHeaters": {
129
- "summary": "List of configured bed heaters (indices)",
130
- "remarks": "Items may be -1 if unconfigured"
131
- },
132
- "heat.chamberHeaterMapping": {
133
- "summary": "List of configured chamber heaters (indices), grouped by chamber (first dimension)",
134
- "remarks": "Items may be -1 if unconfigured"
135
- },
136
- "heat.chamberHeaters": {
137
- "summary": "List of configured chamber heaters (indices)",
138
- "remarks": "Items may be -1 if unconfigured"
139
- },
140
- "heat.coldExtrudeTemperature": "Minimum required temperature for extrusion moves (in C)",
141
- "heat.coldRetractTemperature": "Minimum required temperature for retraction moves (in C)",
142
- "heat.heaters": "List of configured heaters",
143
- "heat.heaters[].active": "Active temperature of the heater (in C)",
144
- "heat.heaters[].avgPwm": "Average heater PWM value (0..1)",
145
- "heat.heaters[].current": "Current temperature of the heater (in C)",
146
- "heat.heaters[].extrPwmBoost": "Current feedforward PWM boost applied to the heater",
147
- "heat.heaters[].extrTempBoost": "Current temperature boost applied to the heater",
148
- "heat.heaters[].max": {
149
- "summary": "Maximum temperature allowed for this heater (in C)",
150
- "remarks": "This is only temporary and should be replaced by a representation of the heater protection as in RRF"
151
- },
152
- "heat.heaters[].maxBadReadings": "Maximum number of consecutive temperature reading failures before a heater fault is raised",
153
- "heat.heaters[].maxHeatingFaultTime": "Time for which a temperature anomaly must persist on this heater before raising a heater fault (in s)",
154
- "heat.heaters[].maxTempExcursion": "Permitted temperature excursion from the setpoint for this heater (in K)",
155
- "heat.heaters[].min": {
156
- "summary": "Minimum temperature allowed for this heater (in C)",
157
- "remarks": "This is only temporary and should be replaced by a representation of the heater protection as in RRF"
158
- },
159
- "heat.heaters[].model": "Information about the heater model",
160
- "heat.heaters[].model.coolingExp": "Cooling rate exponent",
161
- "heat.heaters[].model.coolingRate": "Cooling rate (in K/s)",
162
- "heat.heaters[].model.deadTime": "Dead time (in s)",
163
- "heat.heaters[].model.enabled": "Indicates if this heater is enabled",
164
- "heat.heaters[].model.fanCoolingRate": "Cooling rate with the fan on (in K/s)",
165
- "heat.heaters[].model.heatingRate": "Heating rate (in K/s)",
166
- "heat.heaters[].model.inverted": "Indicates if the heater PWM signal is inverted",
167
- "heat.heaters[].model.maxPwm": "Maximum PWM value",
168
- "heat.heaters[].model.pid": "Details about the PID controller",
169
- "heat.heaters[].model.pid.d": "Derivative value of the PID regulator",
170
- "heat.heaters[].model.pid.i": "Integral value of the PID regulator",
171
- "heat.heaters[].model.pid.p": "Proportional value of the PID regulator",
172
- "heat.heaters[].model.pid.used": "Indicates if PID control is being used",
173
- "heat.heaters[].model.standardVoltage": "Standard voltage or null if unknown",
174
- "heat.heaters[].monitors": "Monitors of this heater",
175
29
  "heat.heaters[].monitors[].action": {
176
- "summary": "Action to perform when the trigger condition is met",
177
30
  "values": {
178
- "0": "Generate a heater fault",
179
- "1": "Permanently switch off the heater",
180
- "2": "Temporarily switch off the heater until the condition is no longer met",
181
- "3": "Shut down the printer"
31
+ "0": null,
32
+ "1": null,
33
+ "2": null,
34
+ "3": null
182
35
  }
183
36
  },
184
37
  "heat.heaters[].monitors[].condition": {
185
- "summary": "Condition to meet to perform an action",
186
38
  "values": {
187
- "disabled": "Heater monitor is disabled",
188
- "tooHigh": "Limit temperature has been exceeded",
189
- "tooLow": "Limit temperature is too low"
39
+ "disabled": null,
40
+ "tooHigh": null,
41
+ "tooLow": null
190
42
  }
191
43
  },
192
- "heat.heaters[].monitors[].limit": "Limit threshold for this heater monitor",
193
- "heat.heaters[].monitors[].sensor": "Sensor number to monitor",
194
- "heat.heaters[].sensor": "Sensor number of this heater or -1 if not configured",
195
- "heat.heaters[].standby": "Standby temperature of the heater (in C)",
196
44
  "heat.heaters[].state": {
197
- "summary": "State of the heater",
198
45
  "values": {
199
- "off": "Heater is turned off",
200
- "standby": "Heater is in standby mode",
201
- "active": "Heater is active",
202
- "fault": "Heater faulted",
203
- "tuning": "Heater is being tuned",
204
- "offline": "Heater is offline"
46
+ "off": null,
47
+ "standby": null,
48
+ "active": null,
49
+ "fault": null,
50
+ "tuning": null,
51
+ "offline": null
205
52
  }
206
53
  },
207
- "inputs": "Information about every available G/M/T-code channel",
208
- "inputs[].active": {
209
- "summary": "True if the input is is in active mode i.e. executing commands for its assigned motion system, false if it is assigned to a motion system other than the current one",
210
- "remarks": "This will always be true except for the File and File2 inputs"
211
- },
212
- "inputs[].axesRelative": "Whether relative positioning is being used",
213
54
  "inputs[].compatibility": {
214
- "summary": "Emulation used on this channel",
215
55
  "values": {
216
- "Default": "No emulation (same as RepRapFirmware)",
217
- "RepRapFirmware": "Emulating RepRapFirmware",
218
- "Marlin": "Emulating Marlin",
219
- "Teacup": "Emulating Teacup",
220
- "Sprinter": "Emulating Sprinter",
221
- "Repetier": "Emulating Repetier",
222
- "NanoDLP": "Special emulation for NanoDLP"
56
+ "Default": null,
57
+ "RepRapFirmware": null,
58
+ "Marlin": null,
59
+ "Teacup": null,
60
+ "Sprinter": null,
61
+ "Repetier": null,
62
+ "NanoDLP": null
223
63
  }
224
64
  },
225
- "inputs[].currentFile": "Name of the file being executed or null if none",
226
65
  "inputs[].distanceUnit": {
227
- "summary": "Whether inches are being used instead of mm",
228
66
  "values": {
229
- "mm": "Millimeters",
230
- "in": "Inches"
67
+ "mm": null,
68
+ "in": null
231
69
  }
232
70
  },
233
- "inputs[].drivesRelative": "Whether relative extrusion is being used",
234
- "inputs[].feedRate": "Current feedrate as passed by the last G0/G1 F... command",
235
- "inputs[].inMacro": "Whether a macro file is being processed",
236
- "inputs[].inverseTimeMode": "Indicates if inverse time mode (G73) is active",
237
- "inputs[].lineNumber": "Number of the current line",
238
- "inputs[].macroRestartable": "Indicates if the current macro file can be restarted after a pause",
239
- "inputs[].motionSystem": "Active motion system index",
240
- "inputs[].name": "Name of this channel",
241
- "inputs[].selectedPlane": "Index of the selected plane",
242
- "inputs[].stackDepth": "Depth of the stack",
243
71
  "inputs[].state": {
244
- "summary": "State of this input channel",
245
72
  "values": {
246
- "awaitingAcknowledgement": "Awaiting message acknowledgement",
247
- "idle": "Channel is idle",
248
- "executing": "Channel is executing a G/M/T-code",
249
- "waiting": "Channel is waiting for more data",
250
- "reading": "Channel is reading a G/M/T-code",
251
- "unused": "Channel has not been used yet"
73
+ "awaitingAcknowledgement": null,
74
+ "idle": null,
75
+ "executing": null,
76
+ "waiting": null,
77
+ "reading": null,
78
+ "unused": null
252
79
  }
253
80
  },
254
- "inputs[].volumetric": "Whether volumetric extrusion is being used",
255
- "job": "Information about the current job",
256
- "job.build": "Information about the current build or null if not available",
257
- "job.build.currentObject": {
258
- "summary": "Index of the current object being printed or -1 if unknown",
259
- "remarks": "This value may now be greater than the length of the job.build.objects array. This is because the size of job.build.objects is limited to conserve memory (to 20 on Duet 2 or 40 on Duet 3), whereas when M486 labelling is used, many more objects can be numbered and the first 64 can be cancelled individually"
260
- },
261
- "job.build.m486Names": "Whether M486 names are being used",
262
- "job.build.m486Numbers": "Whether M486 numbers are being used",
263
- "job.build.objects": "List of detected build objects",
264
- "job.build.objects[].cancelled": "Indicates if this build object is cancelled",
265
- "job.build.objects[].name": "Name of the build object (if any)",
266
- "job.build.objects[].x": "X coordinates of the build object (in mm or null if not found)",
267
- "job.build.objects[].y": "Y coordinates of the build object (in mm or null if not found)",
268
- "job.duration": "Total active duration of the current job file (in s or null)",
269
- "job.file": "Information about the file being processed",
270
- "job.file.customInfo": "User-defined key-value pairs",
271
- "job.file.filament": "Filament consumption per extruder drive (in mm)",
272
- "job.file.fileName": "The filename of the G-code file",
273
- "job.file.generatedBy": "Name of the application that generated this file",
274
- "job.file.height": "Build height of the G-code job or 0 if not found (in mm)",
275
- "job.file.lastModified": "Value indicating when the file was last modified or null if unknown",
276
- "job.file.layerHeight": "Height of each other layer or 0 if not found (in mm)",
277
- "job.file.numLayers": "Number of total layers or 0 if unknown",
278
- "job.file.printTime": "Estimated print time (in s)",
279
- "job.file.simulatedTime": "Estimated print time from G-code simulation (in s)",
280
- "job.file.size": "Size of the file",
281
- "job.file.thumbnails": "Collection of thumbnails parsed from Gcode",
282
- "job.file.thumbnails[].data": {
283
- "summary": "Base64-encoded thumbnail or null if invalid or not requested",
284
- "remarks": "This property is not provided by RepRapFirmware fileinfo results and it may be null if no thumbnail content is requested"
285
- },
286
81
  "job.file.thumbnails[].format": {
287
- "summary": "Format of this thumbnail",
288
82
  "values": {
289
83
  "jpeg": null,
290
84
  "png": null,
291
85
  "qoi": null
292
86
  }
293
87
  },
294
- "job.file.thumbnails[].height": "Height of this thumbnail",
295
- "job.file.thumbnails[].offset": "File offset of this thumbnail",
296
- "job.file.thumbnails[].size": "Size of this thumbnail",
297
- "job.file.thumbnails[].width": "Width of this thumbnail",
298
- "job.filePosition": "Current position in the file being processed (in bytes or null)",
299
- "job.lastDuration": "Total duration of the last job (in s or null)",
300
- "job.lastFileAborted": "Indicates if the last file was aborted (unexpected cancellation)",
301
- "job.lastFileCancelled": "Indicates if the last file was cancelled (user cancelled)",
302
- "job.lastFileName": "Name of the last file processed or null if none",
303
- "job.lastFileSimulated": {
304
- "summary": "Indicates if the last file processed was simulated",
305
- "remarks": "This is not set if the file was aborted or cancelled"
306
- },
307
- "job.lastWarmUpDuration": "Warm-up duration of the last print or null if not available (in s)",
308
- "job.layer": "Number of the current layer or null not available",
309
- "job.layerTime": "Time elapsed since the last layer change (in s or null)",
310
- "job.layers": {
311
- "summary": "Information about the past layers",
312
- "remarks": "In previous API versions this was a MessageCollection but it has been changed to StaticModelCollection`1 to allow past layers to be modified again when needed. Note that previous plugins subscribing to this property will not receive any more updates about this property to avoid memory leaks"
313
- },
314
- "job.layers[].duration": "Duration of the layer (in s)",
315
- "job.layers[].filament": "Actual amount of filament extruded during this layer (in mm)",
316
- "job.layers[].filamentUsage": "Amount of total filament extruded during this layer (in mm)",
317
- "job.layers[].fractionPrinted": "Fraction of the file printed during this layer (0..1)",
318
- "job.layers[].height": "Height of the layer (in mm or 0 if unknown)",
319
- "job.layers[].temperatures": "Last heater temperatures (in C or null if unknown)",
320
- "job.pauseDuration": "Total pause time since the job started",
321
- "job.rawExtrusion": "Total extrusion amount without extrusion factors applied (in mm)",
322
- "job.timesLeft": "Estimated times left",
323
- "job.timesLeft.filament": "Time left based on filament consumption (in s or null)",
324
- "job.timesLeft.file": "Time left based on file progress (in s or null)",
325
- "job.timesLeft.slicer": "Time left based on the slicer reports (see M73 R, in s or null)",
326
- "job.timesLeft.toPause": "Time left before the next colour change is expected (see M73 C, in s or null)",
327
- "job.warmUpDuration": "Time needed to heat up the heaters (in s or null)",
328
- "ledStrips": "List of configured LED strips",
329
- "ledStrips[].board": "Board address of the corresponding pin",
330
88
  "ledStrips[].colorOrder": {
331
- "summary": "Order in which colour components are sent to the strip",
332
89
  "values": {
333
- "0": "Default order for DotStar LEDs",
334
- "1": "Blue, red, green",
335
- "2": "Red, green, blue",
336
- "3": "Red, blue, green",
337
- "4": "Green, blue, red",
338
- "5": "Default order for WS2812 (NeoPixel) LEDs"
90
+ "0": null,
91
+ "1": null,
92
+ "2": null,
93
+ "3": null,
94
+ "4": null,
95
+ "5": null
339
96
  }
340
97
  },
341
- "ledStrips[].maxLeds": "Maximum number of LEDs that can be addressed on this strip",
342
- "ledStrips[].pin": "Name of the pin this LED strip is connected to",
343
- "ledStrips[].stopMovement": "Indicates if this strip is bit-banged and therefore requires motion to be stopped before sending a command",
344
98
  "ledStrips[].type": {
345
- "summary": "Type of this LED strip",
346
99
  "values": {
347
- "DotStar": "DotStar LED strip",
348
- "NeoPixel_RGB": "NeoPixel LED strip with only RGB capability",
349
- "NeoPixel_RGBW": "NeoPixel RGB LED strip with additional white output"
100
+ "DotStar": null,
101
+ "NeoPixel_RGB": null,
102
+ "NeoPixel_RGBW": null
350
103
  }
351
104
  },
352
- "limits": "Machine configuration limits",
353
- "limits.axes": "Maximum number of axes or null if unknown",
354
- "limits.axesPlusExtruders": "Maximum number of axes + extruders or null if unknown",
355
- "limits.bedHeaters": "Maximum number of bed heaters or null if unknown",
356
- "limits.boards": "Maximum number of boards or null if unknown",
357
- "limits.chamberHeaters": "Maximum number of chamber heaters or null if unknown",
358
- "limits.drivers": "Maximum number of drivers or null if unknown",
359
- "limits.driversPerAxis": "Maximum number of drivers per axis or null if unknown",
360
- "limits.extruders": "Maximum number of extruders or null if unknown",
361
- "limits.extrudersPerTool": "Maximum number of extruders per tool or null if unknown",
362
- "limits.fans": "Maximum number of fans or null if unknown",
363
- "limits.gpInPorts": "Maximum number of general-purpose input ports or null if unknown",
364
- "limits.gpOutPorts": "Maximum number of general-purpose output ports or null if unknown",
365
- "limits.heaters": "Maximum number of heaters or null if unknown",
366
- "limits.heatersPerTool": "Maximum number of heaters per tool or null if unknown",
367
- "limits.ledStrips": "Maximum number of configured LED strips or null if unknown",
368
- "limits.monitorsPerHeater": "Maximum number of monitors per heater or null if unknown",
369
- "limits.portsPerHeater": "Maximum number of output ports per heater or null if unknown",
370
- "limits.reportedAxes": "Maximum number of axes reported when the move key is requested. If the number of reported axes is greater than or equal to this value, a client may need to request move.axes explicitly in order to get the full move.axes array",
371
- "limits.restorePoints": "Maximum number of restore points or null if unknown",
372
- "limits.sensors": "Maximum number of sensors or null if unknown",
373
- "limits.spindles": "Maximum number of spindles or null if unknown",
374
- "limits.tools": "Maximum number of tools or null if unknown",
375
- "limits.trackedObjects": "Maximum number of tracked objects or null if unknown",
376
- "limits.triggers": "Maximum number of triggers or null if unknown",
377
- "limits.volumes": "Maximum number of volumes or null if unknown",
378
- "limits.workplaces": "Maximum number of workplaces or null if unknown",
379
- "limits.zProbeProgramBytes": "Maximum number of Z-probe programming bytes or null if unknown",
380
- "limits.zProbes": "Maximum number of Z-probes or null if unknown",
381
- "move": "Information about the move subsystem",
382
- "move.accelerationTime": "Value of the M201 T parameter. Only present in builds that support S-curve acceleration",
383
- "move.axes": "List of the configured axes",
384
- "move.axes[].acceleration": "Acceleration of this axis (in mm/s^2)",
385
- "move.axes[].babystep": "Babystep amount (in mm)",
386
- "move.axes[].backlash": "Configured backlash of this axis (in mm)",
387
- "move.axes[].current": "Motor current (in mA)",
388
- "move.axes[].drivers": "List of the assigned drivers",
389
- "move.axes[].homed": "Whether or not the axis is homed",
390
- "move.axes[].jerk": "Motor jerk (in mm/min)",
391
105
  "move.axes[].letter": {
392
- "summary": "Letter of this axis",
393
106
  "values": {
394
107
  "X": "X axis",
395
108
  "Y": "Y axis",
@@ -429,215 +142,42 @@
429
142
  "z": "z axis"
430
143
  }
431
144
  },
432
- "move.axes[].machinePosition": {
433
- "summary": "Current machine position (in mm) or null if unknown/unset",
434
- "remarks": "This value reflects the machine position of the move being performed or of the last one if the machine is not moving"
435
- },
436
- "move.axes[].max": "Maximum travel of this axis (in mm)",
437
- "move.axes[].maxProbed": "Whether the axis maximum was probed",
438
- "move.axes[].microstepping": "Microstepping configuration",
439
- "move.axes[].microstepping.interpolated": "Indicates if the stepper driver uses interpolation",
440
- "move.axes[].microstepping.value": "Microsteps per full step",
441
- "move.axes[].min": "Minimum travel of this axis (in mm)",
442
- "move.axes[].minProbed": "Whether the axis minimum was probed",
443
- "move.axes[].percentCurrent": "Percentage applied to the motor current (0..100)",
444
- "move.axes[].percentStstCurrent": "Percentage applied to the motor current during standstill (0..100 or null if not supported)",
445
- "move.axes[].phaseStep": "Whether or not the axis is currently using phase stepping",
446
- "move.axes[].printingJerk": "Motor jerk during the current print only (in mm/s)",
447
- "move.axes[].reducedAcceleration": "Reduced accelerations used by Z probing and stall homing moves (in mm/s^2)",
448
- "move.axes[].speed": "Maximum speed (in mm/min)",
449
- "move.axes[].stepPos": "Current step position of the axis (in steps)",
450
- "move.axes[].stepsPerMm": "Number of microsteps per mm",
451
- "move.axes[].userPosition": {
452
- "summary": "Current user position (in mm) or null if unknown",
453
- "remarks": "This value reflects the target position of the last move fed into the look-ahead buffer"
454
- },
455
- "move.axes[].visible": "Whether or not the axis is visible",
456
- "move.axes[].workplaceOffsets": "Offsets of this axis for each workplace (in mm)",
457
- "move.backlashFactor": "Backlash distance multiplier",
458
- "move.calibration": "Information about the automatic calibration",
459
- "move.calibration.final": "Final calibration results (for Delta calibration)",
460
- "move.calibration.final.deviation": "RMS deviation (in mm)",
461
- "move.calibration.final.mean": "Mean deviation (in mm)",
462
- "move.calibration.initial": "Initial calibration results (for Delta calibration)",
463
- "move.calibration.initial.deviation": "RMS deviation (in mm)",
464
- "move.calibration.initial.mean": "Mean deviation (in mm)",
465
- "move.calibration.numFactors": "Number of factors used (for Delta calibration)",
466
- "move.compensation": "Information about the currently configured compensation options",
467
- "move.compensation.fadeHeight": "Effective height before the bed compensation is turned off (in mm) or null if not configured",
468
- "move.compensation.file": "Full path to the currently used height map file or null if none is in use",
469
- "move.compensation.liveGrid": "Grid settings of the loaded heightmap or null if no heightmap is loaded",
470
- "move.compensation.liveGrid.axes": "Axis letters of this heightmap",
471
- "move.compensation.liveGrid.maxs": "End coordinates of the heightmap",
472
- "move.compensation.liveGrid.mins": "Start coordinates of the heightmap",
473
- "move.compensation.liveGrid.radius": "Probing radius for delta kinematics",
474
- "move.compensation.liveGrid.spacings": "Spacings between the coordinates",
475
- "move.compensation.meshDeviation": "Deviations of the mesh grid or null if not applicable",
476
- "move.compensation.meshDeviation.deviation": "RMS deviation (in mm)",
477
- "move.compensation.meshDeviation.mean": "Mean deviation (in mm)",
478
- "move.compensation.probeGrid": "Probe grid settings as defined by M557",
479
- "move.compensation.probeGrid.axes": "Axis letters of this heightmap",
480
- "move.compensation.probeGrid.maxs": "End coordinates of the heightmap",
481
- "move.compensation.probeGrid.mins": "Start coordinates of the heightmap",
482
- "move.compensation.probeGrid.radius": "Probing radius for delta kinematics",
483
- "move.compensation.probeGrid.spacings": "Spacings between the coordinates",
484
- "move.compensation.skew": "Information about the configured orthogonal axis parameters",
485
- "move.compensation.skew.compensateXY": "Indicates if the TanXY value is used to compensate X when Y moves (else Y when X moves)",
486
- "move.compensation.skew.tanXY": "Tangent of the skew angle for the XY or YX axes",
487
- "move.compensation.skew.tanXZ": "Tangent of the skew angle for the XZ axes",
488
- "move.compensation.skew.tanYZ": "Tangent of the skew angle for the YZ axes",
489
145
  "move.compensation.type": {
490
- "summary": "Type of the compensation in use",
491
146
  "values": {
492
- "none": "No compensation",
493
- "mesh": "Mesh compensation"
147
+ "none": null,
148
+ "mesh": null
494
149
  }
495
150
  },
496
- "move.currentMove": "Information about the current move",
497
- "move.currentMove.acceleration": "Acceleration of the current move (in mm/s^2)",
498
- "move.currentMove.deceleration": "Deceleration of the current move (in mm/s^2)",
499
- "move.currentMove.distance": "Total distance of the current move (in mm)",
500
- "move.currentMove.duration": "Duration of the current move (in s)",
501
- "move.currentMove.extrusionRate": "Current extrusion rate (in mm/s)",
502
- "move.currentMove.laserPwm": "Laser PWM of the current move (0..1) or null if not applicable",
503
- "move.currentMove.requestedSpeed": "Requested speed of the current move (in mm/s)",
504
- "move.currentMove.topSpeed": "Top speed of the current move (in mm/s)",
505
- "move.extruders": "List of configured extruders",
506
- "move.extruders[].acceleration": "Acceleration of this extruder (in mm/s^2)",
507
- "move.extruders[].current": "Motor current (in mA)",
508
- "move.extruders[].driver": "Assigned driver",
509
- "move.extruders[].factor": "Extrusion factor to use (0..1 or greater)",
510
- "move.extruders[].filament": "Name of the currently loaded filament",
511
- "move.extruders[].filamentDiameter": "Diameter of the corresponding filament (in mm)",
512
- "move.extruders[].jerk": "Motor jerk (in mm/s)",
513
- "move.extruders[].microstepping": "Microstepping configuration",
514
- "move.extruders[].microstepping.interpolated": "Indicates if the stepper driver uses interpolation",
515
- "move.extruders[].microstepping.value": "Microsteps per full step",
516
- "move.extruders[].nonlinear": "Nonlinear extrusion parameters (see M592)",
517
- "move.extruders[].nonlinear.a": "A coefficient in the extrusion formula",
518
- "move.extruders[].nonlinear.b": "B coefficient in the extrusion formula",
519
- "move.extruders[].nonlinear.upperLimit": "Upper limit of the nonlinear extrusion compensation",
520
- "move.extruders[].percentCurrent": "Percentage applied to the motor current (0..100)",
521
- "move.extruders[].percentStstCurrent": "Percentage applied to the motor current during standstill (0..100 or null if not supported)",
522
- "move.extruders[].phaseStep": "Whether or not the extruder is currently using phase stepping",
523
- "move.extruders[].position": "Extruder position (in mm)",
524
- "move.extruders[].pressAdv": "Pressure advance parameters (see M572)",
525
- "move.extruders[].pressAdv.d": "Delay coefficient (in ms), or null if pressure advance is in simple mode (k0 = 0) - RRF reports infinity here as null",
526
- "move.extruders[].pressAdv.k0": "K0 coefficient",
527
- "move.extruders[].pressAdv.k1": "K1 coefficient",
528
- "move.extruders[].pressureAdvance": "Pressure advance",
529
- "move.extruders[].printingJerk": "Motor jerk during the current print only (in mm/s)",
530
- "move.extruders[].rawPosition": "Raw extruder position as commanded by the slicer without extrusion factor applied (in mm)",
531
- "move.extruders[].speed": "Maximum speed (in mm/min)",
532
- "move.extruders[].stepsPerMm": "Number of microsteps per mm",
533
- "move.idle": "Idle current reduction parameters",
534
- "move.idle.factor": "Motor current reduction factor (0..1)",
535
- "move.idle.timeout": "Idle timeout after which the stepper motor currents are reduced (in s)",
536
- "move.keepout": "List of configured keep-out zones",
537
- "move.keepout[].coords[].max": "Maximum axis coordinate",
538
- "move.keepout[].coords[].min": "Minimum axis coordinate",
539
- "move.kinematics": "Configured kinematics options",
540
151
  "move.kinematics.name": {
541
- "summary": "Name of the configured kinematics",
542
152
  "values": {
543
- "cartesian": "Cartesian",
544
- "coreXY": "CoreXY",
545
- "coreXYU": "CoreXY with extra U axis",
546
- "coreXYUV": "CoreXY with extra UV axes",
547
- "coreXZ": "CoreXZ",
548
- "markForged": "MarkForged",
549
- "fiveBarScara": "Five-bar SCARA",
550
- "hangprinter": "Hangprinter",
551
- "linearDelta": "Linear delta",
552
- "polar": "Polar",
553
- "rotaryDelta": "Rotary delta",
554
- "scara": "SCARA",
555
- "unknown": "Unknown"
153
+ "cartesian": null,
154
+ "coreXY": null,
155
+ "coreXYU": null,
156
+ "coreXYUV": null,
157
+ "coreXZ": null,
158
+ "markForged": null,
159
+ "fiveBarScara": null,
160
+ "hangprinter": null,
161
+ "linearDelta": null,
162
+ "polar": null,
163
+ "rotaryDelta": null,
164
+ "scara": null,
165
+ "unknown": null
556
166
  }
557
167
  },
558
- "move.kinematics.segmentation": "Segmentation parameters or null if not configured",
559
- "move.kinematics.segmentation.minSegLength": "Minimum length of a segment (in mm)",
560
- "move.kinematics.segmentation.segmentsPerSec": "Number of segments per second",
561
- "move.limitAxes": "Limit axis positions by their minima and maxima",
562
- "move.motionSystems": "List of configured motion systems",
563
- "move.motionSystems[].currentMove": "Information about the current move",
564
- "move.motionSystems[].currentMove.acceleration": "Acceleration of the current move (in mm/s^2)",
565
- "move.motionSystems[].currentMove.deceleration": "Deceleration of the current move (in mm/s^2)",
566
- "move.motionSystems[].currentMove.distance": "Total distance of the current move (in mm)",
567
- "move.motionSystems[].currentMove.duration": "Duration of the current move (in s)",
568
- "move.motionSystems[].currentMove.extrusionRate": "Current extrusion rate (in mm/s)",
569
- "move.motionSystems[].currentMove.laserPwm": "Laser PWM of the current move (0..1) or null if not applicable",
570
- "move.motionSystems[].currentMove.requestedSpeed": "Requested speed of the current move (in mm/s)",
571
- "move.motionSystems[].currentMove.topSpeed": "Top speed of the current move (in mm/s)",
572
- "move.motionSystems[].currentObject": "Number of the current object being printed or null if not printing",
573
- "move.motionSystems[].currentTool": "Number of the currently selected tool or -1 if none is selected",
574
- "move.motionSystems[].nextTool": "Number of the next tool to be selected",
575
- "move.motionSystems[].previousTool": "Number of the previous tool",
576
- "move.motionSystems[].printingAcceleration": "Maximum acceleration allowed while printing (in mm/s^2)",
577
- "move.motionSystems[].restorePoints": "List of restore points",
578
- "move.motionSystems[].restorePoints[].coords": "Axis coordinates of the restore point (in mm)",
579
- "move.motionSystems[].restorePoints[].extruderPos": "The virtual extruder position at the start of this move",
580
- "move.motionSystems[].restorePoints[].fanPwm": "PWM value of the tool fan (0..1)",
581
- "move.motionSystems[].restorePoints[].feedRate": "Requested feedrate (in mm/s)",
582
- "move.motionSystems[].restorePoints[].gCommandNumber": "Which of G0/G1/G2/G3 generated the move at this restore point, or -1 if unknown",
583
- "move.motionSystems[].restorePoints[].ioBits": "The output port bits setting for this move or null if not applicable",
584
- "move.motionSystems[].restorePoints[].laserPwm": "Laser PWM value (0..1) or null if not applicable",
585
- "move.motionSystems[].restorePoints[].toolNumber": "The tool number that was active",
586
- "move.motionSystems[].rotation": "Parameters for centre rotation",
587
- "move.motionSystems[].rotation.angle": "Angle of the centre rotatation (in deg)",
588
- "move.motionSystems[].rotation.centre": "XY coordinates of the centre rotation",
589
- "move.motionSystems[].speedFactor": "Speed factor applied to every regular move (0.01..1 or greater)",
590
- "move.motionSystems[].travelAcceleration": "Maximum acceleration allowed while travelling (in mm/s^2)",
591
- "move.motionSystems[].userPosition": "User coordinates of the motion system",
592
- "move.motionSystems[].virtualEPos": "Virtual total extruder position",
593
- "move.motionSystems[].workplaceNumber": "Index of the currently selected workplace",
594
- "move.noMovesBeforeHoming": "Indicates if standard moves are forbidden if the corresponding axis is not homed",
595
- "move.printingAcceleration": "Maximum acceleration allowed while printing (in mm/s^2)",
596
- "move.queue": "List of move queue items (DDA rings)",
597
- "move.queue[].gracePeriod": "The minimum idle time before we should start a move (in s)",
598
- "move.queue[].length": "Maximum number of moves that can be accomodated in the DDA ring",
599
- "move.rotation": "Parameters for centre rotation",
600
- "move.rotation.angle": "Angle of the centre rotatation (in deg)",
601
- "move.rotation.centre": "XY coordinates of the centre rotation",
602
- "move.shaping": "Parameters for input shaping",
603
- "move.shaping.amplitudes": "Amplitudes of the input shaper",
604
- "move.shaping.damping": "Damping factor",
605
- "move.shaping.delays": "Input shaper delays (in s)",
606
- "move.shaping.frequency": "Frequency (in Hz)",
607
168
  "move.shaping.type": {
608
- "summary": "Configured input shaping type",
609
169
  "values": {
610
- "none": "None",
611
- "mzv": "MZV",
612
- "zvd": "ZVD",
613
- "zvdd": "ZVDD",
614
- "zvddd": "ZVDDD",
615
- "ei2": "EI2 (2-hump)",
616
- "ei3": "EI3 (3-hump)",
617
- "custom": "Custom"
170
+ "none": null,
171
+ "mzv": null,
172
+ "zvd": null,
173
+ "zvdd": null,
174
+ "zvddd": null,
175
+ "ei2": null,
176
+ "ei3": null,
177
+ "custom": null
618
178
  }
619
179
  },
620
- "move.speedFactor": "Speed factor applied to every regular move (0.01..1 or greater)",
621
- "move.travelAcceleration": "Maximum acceleration allowed while travelling (in mm/s^2)",
622
- "move.usingSCurve": "Indicates if third-order S-curve acceleration is enabled. Only present in builds that support S-curve acceleration",
623
- "move.virtualEPos": "Virtual total extruder position",
624
- "move.workplaceNumber": "Index of the currently selected workplace",
625
- "network": "Information about connected network adapters",
626
- "network.corsSite": "If this is set, the web server will allow cross-origin requests via the Access-Control-Allow-Origin header",
627
- "network.hostname": "Hostname of the machine",
628
- "network.interfaces": "List of available network interfaces",
629
- "network.interfaces[].activeProtocols": "List of active protocols",
630
- "network.interfaces[].actualIP": "Actual IPv4 address of the network adapter or null if unknown",
631
- "network.interfaces[].configuredIP": "Configured IPv4 address of the network adapter or null if unknown",
632
- "network.interfaces[].dnsServer": "Configured IPv4 DNS server of the network adapter or null if unknown",
633
- "network.interfaces[].firmwareVersion": "Version of the network interface or null if unknown. This is only reported by ESP-based boards in standalone mode",
634
- "network.interfaces[].gateway": "IPv4 gateway of the network adapter or null if unknown",
635
- "network.interfaces[].mac": "Physical address of the network adapter or null if unknown",
636
- "network.interfaces[].rssi": "Received signal strength indicator of the WiFi adapter (only WiFi, in dBm, or null if unknown)",
637
- "network.interfaces[].speed": "Speed of the network interface (in MBit, null if unknown, 0 if not connected)",
638
- "network.interfaces[].ssid": "SSID of the WiFi network or null if not applicable",
639
180
  "network.interfaces[].state": {
640
- "summary": "State of this network interface or null if unknown",
641
181
  "values": {
642
182
  "disabled": null,
643
183
  "enabled": null,
@@ -652,352 +192,165 @@
652
192
  "idle": null
653
193
  }
654
194
  },
655
- "network.interfaces[].subnet": "Subnet of the network adapter or null if unknown",
656
195
  "network.interfaces[].type": {
657
- "summary": "Type of this network interface",
658
196
  "values": {
659
- "ethernet": "Wired network interface",
660
- "wifi": "Wireless network interface"
197
+ "ethernet": null,
198
+ "wifi": null
661
199
  }
662
200
  },
663
- "network.interfaces[].wifiCountry": {
664
- "summary": "WiFi country code if this is a WiFi adapter and if the country code can be determined",
665
- "remarks": "For this setting to be populated in SBC mode it is required to have the DuetPiManagementPlugin running. This is required due to missing Linux permissions of the control server."
666
- },
667
- "network.name": "Name of the machine",
668
- "plugins": {
669
- "summary": "Dictionary of loaded plugins where each key is the plugin identifier",
670
- "remarks": "This is only populated by DSF in SBC mode, however it may be populated manually as well in standalone mode. Keys are compared case-insensitively, so two plugin identifiers differing only in case map to the same entry. Values in this dictionary cannot become null. If a value is changed to null, the corresponding item is deleted"
671
- },
672
- "plugins[].author": "Author of the plugin",
673
- "plugins[].data": "Custom plugin data to be populated in the object model (DSF/DWC in SBC mode - or - DWC in standalone mode). Before DuetAPI.Commands.SetPluginData can be used, corresponding properties must be registered via this property first!",
674
- "plugins[].dsfFiles": "List of files for the DSF plugin",
675
- "plugins[].dwcDependencies": "List of DWC plugins this plugin depends on. Circular dependencies are not supported",
676
- "plugins[].dwcFiles": "List of files for the DWC plugin",
677
- "plugins[].dwcVersion": "Major/minor compatible DWC version",
678
- "plugins[].homepage": "Link to the plugin homepage or source code repository",
679
- "plugins[].id": {
680
- "summary": "Identifier of this plugin. May consist of letters and digits only (max length 32 chars)",
681
- "remarks": "Compared case-insensitively, so two ids differing only in case refer to the same plugin and cannot be installed alongside each other. For plugins with DWC components, this is the Webpack chunk name too"
682
- },
683
- "plugins[].license": "License of the plugin. Should follow the SPDX format (see https://spdx.org/licenses/)",
684
- "plugins[].name": "Name of the plugin. May consist of letters, digits, dashes, and underscores only (max length 64 chars)",
685
- "plugins[].pid": "Process ID of the plugin or -1 if not started. It is set to 0 while the plugin is being shut down",
686
- "plugins[].rrfVersion": "Major/minor supported RRF version (optional)",
687
- "plugins[].sbcAutoRestart": "Automatically restart the SBC process when terminated",
688
- "plugins[].sbcConfigFiles": {
689
- "summary": "List of files in the sys or virtual SD directory that should not be overwritten on upgrade",
690
- "remarks": "The file may be specified either relative to 0:/sys directory (e.g. motion.conf) or relative to the virtual SD directory (e.g. sys/motion.conf). Drive indices as in 0:/sys/motion.conf are not allowed!"
691
- },
692
- "plugins[].sbcDsfVersion": "Required DSF version for the plugin running on the SBC (ignored if there is no SBC executable)",
693
- "plugins[].sbcExecutable": {
694
- "summary": "Filename in the dsf directory used to start the plugin",
695
- "remarks": "A plugin may provide different binaries in subdirectories per architecture. Supported architectures are: arm, arm64, x86, x86_64"
696
- },
697
- "plugins[].sbcExecutableArguments": "Command-line arguments for the executable",
698
- "plugins[].sbcExtraExecutables": "List of other filenames in the dsf directory that should be executable",
699
- "plugins[].sbcNotifyStarted": "Plugin notifies DSF when it is fully started",
700
- "plugins[].sbcOutputRedirected": "Defines if messages from stdout/stderr are output as generic messages",
701
- "plugins[].sbcPackageDependencies": "List of packages this plugin depends on (apt packages in the case of DuetPi)",
702
- "plugins[].sbcPermissions": "List of permissions required by the plugin executable running on the SBC",
703
- "plugins[].sbcPluginDependencies": "List of SBC plugins this plugin depends on. Circular dependencies are not supported",
704
- "plugins[].sbcPythonDependencies": "List of Python packages this plugin depends on",
705
- "plugins[].sbcRequired": "Set to true if a SBC is absolutely required for this plugin",
706
- "plugins[].sdFiles": "List of files to be installed to the (virtual) SD excluding web files",
707
- "plugins[].started": "Indicates if the plugin is fully started",
708
- "plugins[].tags": "List of general tags for search",
709
- "plugins[].version": "Version of the plugin",
710
- "sbc": "Information about the SBC which Duet Software Framework is running on. This is null if the system is operating in standalone mode",
711
- "sbc.appArmor": {
712
- "summary": "Indicates if AppArmor support is enabled",
713
- "remarks": "By default, AppArmor is required for plugin functionality"
714
- },
715
- "sbc.cpu": "Information about the SBC's CPU",
716
- "sbc.cpu.avgLoad": "Average CPU load (0..100%) or null if unknown",
717
- "sbc.cpu.hardware": "CPU hardware as reported by /proc/cpuinfo",
718
- "sbc.cpu.numCores": "Number of CPU cores/threads (defaults to 1)",
719
- "sbc.cpu.temperature": "Current CPU temperature (in degC) or null if unknown",
720
- "sbc.distribution": "Name and version of the system distribution or null if unknown",
721
- "sbc.distributionBuildTime": "Build datetime of the system distribution or null if unknown",
722
- "sbc.dsf": "Information about DSF running on the SBC",
723
- "sbc.dsf.buildDateTime": "Datetime when DSF was built",
724
201
  "sbc.dsf.communicationMethod": {
725
- "summary": "Communication method used to talk to the firmware",
726
202
  "values": {
727
- "spi": "SPI link adapter",
728
- "usb": "USB link adapter"
203
+ "spi": null,
204
+ "usb": null
729
205
  }
730
206
  },
731
- "sbc.dsf.httpEndpoints": "List of registered third-party HTTP endpoints",
732
207
  "sbc.dsf.httpEndpoints[].endpointType": {
733
- "summary": "HTTP type of this endpoint",
734
208
  "values": {
735
- "GET": "HTTP GET request",
736
- "POST": "HTTP POST request",
737
- "PUT": "HTTP PUT request",
738
- "PATCH": "HTTP PATCH request",
739
- "TRACE": "HTTP TRACE request",
740
- "DELETE": "HTTP DELETE request",
741
- "OPTIONS": "HTTP OPTIONS request",
742
- "WebSocket": "WebSocket request for bidirectional communication with a custom endpoint"
209
+ "GET": null,
210
+ "POST": null,
211
+ "PUT": null,
212
+ "PATCH": null,
213
+ "TRACE": null,
214
+ "DELETE": null,
215
+ "OPTIONS": null,
216
+ "WebSocket": null
743
217
  }
744
218
  },
745
- "sbc.dsf.httpEndpoints[].isUploadRequest": {
746
- "summary": "Whether this is a upload request",
747
- "remarks": "If set to true, the whole body payload is written to a temporary file and the file path is passed via the DuetAPI.Commands.ReceivedHttpRequest.Body property"
748
- },
749
- "sbc.dsf.httpEndpoints[].namespace": {
750
- "summary": "Namespace of the endpoint",
751
- "remarks": "May be HttpEndpoint.RepRapFirmwareNamespace to register root-level rr_ requests (to emulate RRF poll requests)"
752
- },
753
- "sbc.dsf.httpEndpoints[].path": "Path to the endpoint",
754
- "sbc.dsf.httpEndpoints[].unixSocket": "Path to the UNIX socket",
755
- "sbc.dsf.is64Bit": "Indicates if the process is 64-bit",
756
- "sbc.dsf.pluginSupport": "Indicates if DSF allows the installation and usage of third-party plugins",
757
- "sbc.dsf.rootPluginSupport": {
758
- "summary": "Indicates if DSF allows the installation and usage of third-party root plugins (potentially dangerous, disabled by default)",
759
- "remarks": "Requires DSF.PluginSupport to be true"
760
- },
761
- "sbc.dsf.userSessions": "List of user sessions",
762
219
  "sbc.dsf.userSessions[].accessLevel": {
763
- "summary": "Access level of this session",
764
220
  "values": {
765
- "readOnly": "Changes to the system and/or operation are not permitted",
766
- "readWrite": "Changes to the system and/or operation are permitted"
221
+ "readOnly": null,
222
+ "readWrite": null
767
223
  }
768
224
  },
769
- "sbc.dsf.userSessions[].id": "Identifier of this session",
770
- "sbc.dsf.userSessions[].origin": "Origin of this session. For remote sessions, this equals the remote IP address",
771
- "sbc.dsf.userSessions[].originId": "Corresponding identifier of the origin. If it is a remote session, it is the remote port, else it defaults to the PID of the current process",
772
225
  "sbc.dsf.userSessions[].sessionType": {
773
- "summary": "Type of this session",
774
226
  "values": {
775
- "local": "Local client",
776
- "http": "Remote client via HTTP",
777
- "telnet": "Remote client via Telnet"
227
+ "local": null,
228
+ "http": null,
229
+ "telnet": null
778
230
  }
779
231
  },
780
- "sbc.dsf.version": "Version of Duet Software Framework (provided by Duet Control Server)",
781
- "sbc.memory": "Information about the SBC's memory (RAM)",
782
- "sbc.memory.available": "Available memory (in bytes)",
783
- "sbc.memory.total": "Total memory (in bytes)",
784
- "sbc.model": "SBC model or null if unknown",
785
- "sbc.serial": "Serial of the SBC or null if unknown",
786
- "sbc.upgrade": "Details about a software upgrade in progress or null if no upgrade is running",
787
- "sbc.upgrade.message": "Description of the current upgrade step",
788
- "sbc.upgrade.progress": "Progress of the current upgrade step (0..1) or null if indeterminate",
789
- "sbc.uptime": "Uptime of the running system (in s)",
790
- "sensors": "Information about connected sensors including Z-probes and endstops",
791
- "sensors.analog": "List of analog sensors",
792
- "sensors.analog[].beta": "Beta value of this sensor (if applicable)",
793
- "sensors.analog[].c": "C value of this sensor",
794
- "sensors.analog[].highReading": "High sensor reading (only linear analog sensors, otherwise null)",
795
- "sensors.analog[].lastReading": "Last sensor reading (in C) or null if invalid",
796
- "sensors.analog[].lowReading": "Low sensor reading (only linear analog sensors, otherwise null)",
797
- "sensors.analog[].name": "Name of this sensor or null if not configured",
798
- "sensors.analog[].offsetAdj": {
799
- "summary": "Offset adjustment (in K)",
800
- "remarks": "See also M308 U"
801
- },
802
- "sensors.analog[].port": "Port of this sensor or null if not applicable",
803
- "sensors.analog[].r25": "Resistance of this sensor at 25C",
804
- "sensors.analog[].rRef": "Series resistance of this sensor channel (only applicable for thermistors)",
805
- "sensors.analog[].slopeAdj": {
806
- "summary": "Slope adjustment factor",
807
- "remarks": "See also M308 V"
808
- },
809
232
  "sensors.analog[].state": {
810
- "summary": "State of this sensor",
811
233
  "values": {
812
- "ok": "Sensor is functional",
813
- "shortCircuit": "Short circuit detected",
814
- "shortToVcc": "Short to VCC detected",
815
- "shortToGround": "Short to GND detected",
816
- "openCircuit": "Sensor circuit is open",
817
- "timeout": "Timeout while waiting for sensor data",
818
- "ioError": "IO error",
819
- "hardwareError": "Hardware error",
820
- "notReady": "Not ready",
821
- "invalidOutputNumber": "Invalid output number",
822
- "busBusy": "Sensor bus is busy",
823
- "badResponse": "Bad sensor response",
824
- "unknownPort": "Unknown sensor port",
825
- "notInitialised": "Sensor not initialized",
826
- "unknownSensor": "Unknown sensor",
827
- "overOrUnderVoltage": "Sensor exceeded min/max voltage",
828
- "badVref": "Bad VREF detected",
829
- "badVssa": "Bad VSSA detected",
830
- "readingTooLow": "Sensor reading too low",
831
- "readingTooHigh": "Sensor reading too high",
832
- "ambientReadingTooLow": "Ambient reading too low (for composite sensors that read ambient temperature to calculate object temperature)",
833
- "ambientReadingTooHigh": "Ambient reading too high (for composite sensors that read ambient temperature to calculate object temperature)",
834
- "unknownError": "Unknown error"
234
+ "ok": null,
235
+ "shortCircuit": null,
236
+ "shortToVcc": null,
237
+ "shortToGround": null,
238
+ "openCircuit": null,
239
+ "timeout": null,
240
+ "ioError": null,
241
+ "hardwareError": null,
242
+ "notReady": null,
243
+ "invalidOutputNumber": null,
244
+ "busBusy": null,
245
+ "badResponse": null,
246
+ "unknownPort": null,
247
+ "notInitialised": null,
248
+ "unknownSensor": null,
249
+ "overOrUnderVoltage": null,
250
+ "badVref": null,
251
+ "badVssa": null,
252
+ "readingTooLow": null,
253
+ "readingTooHigh": null,
254
+ "ambientReadingTooLow": null,
255
+ "ambientReadingTooHigh": null,
256
+ "unknownError": null
835
257
  }
836
258
  },
837
259
  "sensors.analog[].type": {
838
- "summary": "Type of this sensor",
839
260
  "values": {
840
- "thermistor": "Regular temperature thermistor",
841
- "pt1000": "PT1000 sensor",
842
- "rtdmax31865": "RTD MAX31865",
843
- "thermocouplemax31855": "MAX31855 thermocouple",
844
- "thermocouplemax31856": "MAX31856 thermocouple",
845
- "linearanalog": "Linear analog sensor",
846
- "dht21": "DHT21 sensor",
847
- "dht22": "DHT22 sensor",
848
- "dhthumidity": "DHT humidity sensor",
849
- "bme280": "BME280 sensor",
850
- "bmepressure": "BME280 pressure sensor",
851
- "bmehumidity": "BME280 humidity sensor",
852
- "bme68x": "BME68x temperature sensor",
853
- "bme68xpressure": "BME68x pressure sensor",
854
- "bme68xhumidity": "BME68x humidity sensor",
855
- "bme68xgas": "BME68x gas resistance sensor",
856
- "currentloop": "Current loop sensor",
857
- "ads131.chan0.u": "ADS131 channel 0 (unipolar)",
858
- "ads131.chan0.b": "ADS131 channel 0 (bipolar)",
859
- "ads131.chan1": "ADS131 channel 1",
860
- "mcutemp": "MCU temperature",
861
- "drivers": "On-board stepper driver sensors",
862
- "driversduex": "Stepper driver sensors on the DueX expansion board",
863
- "unknown": "Unknown temperature sensor"
261
+ "thermistor": null,
262
+ "pt1000": null,
263
+ "rtdmax31865": null,
264
+ "thermocouplemax31855": null,
265
+ "thermocouplemax31856": null,
266
+ "linearanalog": null,
267
+ "dht21": null,
268
+ "dht22": null,
269
+ "dhthumidity": null,
270
+ "bme280": null,
271
+ "bmepressure": null,
272
+ "bmehumidity": null,
273
+ "bme68x": null,
274
+ "bme68xpressure": null,
275
+ "bme68xhumidity": null,
276
+ "bme68xgas": null,
277
+ "currentloop": null,
278
+ "ads131.chan0.u": null,
279
+ "ads131.chan0.b": null,
280
+ "ads131.chan1": null,
281
+ "mcutemp": null,
282
+ "drivers": null,
283
+ "driversduex": null,
284
+ "unknown": null
864
285
  }
865
286
  },
866
- "sensors.endstops": "List of configured endstops",
867
- "sensors.endstops[].highEnd": "Whether this endstop is at the high end of the axis",
868
- "sensors.endstops[].probe": "Number of the referenced probe if type is ZProbeAsEndstop, else null",
869
- "sensors.endstops[].triggered": "Whether or not the endstop is hit",
870
287
  "sensors.endstops[].type": {
871
- "summary": "Type of the endstop",
872
288
  "values": {
873
- "inputPin": "Generic input pin",
874
- "zProbeAsEndstop": "Z-probe acts as an endstop",
875
- "motorStallAny": "Motor stall detection stops all the drives when triggered",
876
- "motorStallIndividual": "Motor stall detection stops individual drives when triggered",
877
- "unknown": "Unknown type"
289
+ "inputPin": null,
290
+ "zProbeAsEndstop": null,
291
+ "motorStallAny": null,
292
+ "motorStallIndividual": null,
293
+ "unknown": null
878
294
  }
879
295
  },
880
- "sensors.filamentMonitors": "List of configured filament monitors",
881
296
  "sensors.filamentMonitors[].enableMode": {
882
- "summary": "Enable mode of this filament monitor",
883
297
  "values": {
884
- "0": "Filament monitor is disabled",
885
- "1": "Filament monitor is enabled during prints from SD card",
886
- "2": "Filament monitor is always enabled (when printing from USB)"
298
+ "0": null,
299
+ "1": null,
300
+ "2": null
887
301
  }
888
302
  },
889
- "sensors.filamentMonitors[].enabled": "Whether this filament monitor is enabled",
890
303
  "sensors.filamentMonitors[].status": {
891
- "summary": "Last reported status of this filament monitor",
892
304
  "values": {
893
- "noMonitor": "No monitor is present",
894
- "ok": "Filament working normally",
895
- "noDataReceived": "No data received from the remote filament senosr",
896
- "noFilament": "No filament present",
897
- "tooLittleMovement": "Sensor reads less movement than expected",
898
- "tooMuchMovement": "Sensor reads more movment than expected",
899
- "sensorError": "Sensor encountered an error"
305
+ "noMonitor": null,
306
+ "ok": null,
307
+ "noDataReceived": null,
308
+ "noFilament": null,
309
+ "tooLittleMovement": null,
310
+ "tooMuchMovement": null,
311
+ "sensorError": null
900
312
  }
901
313
  },
902
314
  "sensors.filamentMonitors[].type": {
903
- "summary": "Type of this filament monitor",
904
315
  "values": {
905
- "simple": "Simple filament sensor",
906
- "laser": "Laser filament sensor",
907
- "pulsed": "Pulsed filament sensor",
908
- "rotatingMagnet": "Rotating magnet filament sensor",
909
- "unknown": "Unknown sensor type"
316
+ "simple": null,
317
+ "laser": null,
318
+ "pulsed": null,
319
+ "rotatingMagnet": null,
320
+ "unknown": null
910
321
  }
911
322
  },
912
- "sensors.gpIn": "List of general-purpose input ports",
913
- "sensors.gpIn[].value": "Value of this port (0..1)",
914
- "sensors.probes": "List of configured probes",
915
- "sensors.probes[].calibrationTemperature": "Calibration temperature (in C)",
916
- "sensors.probes[].deployedByUser": "Indicates if the user has deployed the probe",
917
- "sensors.probes[].disablesHeaters": "Whether probing disables the heater(s)",
918
- "sensors.probes[].diveHeight": "Dive height of the probe (in mm)",
919
- "sensors.probes[].diveHeights": "Dive heights of the probe (in mm). The first element is the dive height for the first tap; the second element is used for subsequent taps when multi-tapping",
920
- "sensors.probes[].isCalibrated": "Indicates if the scanning probe is calibrated",
921
- "sensors.probes[].lastStopHeight": "Height of the probe where it stopped last time (in mm)",
922
- "sensors.probes[].maxProbeCount": "Maximum number of times to probe after a bad reading was determined",
923
- "sensors.probes[].measuredHeight": "Measured height (only applicable for scanning probes, in mm or null)",
924
- "sensors.probes[].offsets": "X+Y offsets (in mm)",
925
- "sensors.probes[].recoveryTime": "Recovery time (in s)",
926
- "sensors.probes[].scanCoefficients": "Coefficients for the scanning Z-probe (4 elements, if applicable)",
927
- "sensors.probes[].speeds": "Fast and slow probing speeds (in mm/s). Scanning probes may have three speeds where the last one is the movement speed while probing heightmaps",
928
- "sensors.probes[].temperatureCoefficients": "List of temperature coefficients",
929
- "sensors.probes[].threshold": "Configured trigger threshold (0..1023)",
930
- "sensors.probes[].tolerance": "Allowed tolerance deviation between two measures (in mm)",
931
- "sensors.probes[].touchMode": "Touch mode options (if supported, otherwise null)",
932
- "sensors.probes[].touchMode.active": "Indicates if the touch probe is enabled",
933
- "sensors.probes[].touchMode.speed": "Speed while probing in touch mode (in mm/s)",
934
- "sensors.probes[].touchMode.threshold": "Threshold value of the touch probe",
935
- "sensors.probes[].touchMode.triggerHeight": "Height of the trigger point of the touch probe (in mm)",
936
- "sensors.probes[].travelSpeed": "Travel speed when probing multiple points (in mm/min)",
937
- "sensors.probes[].triggerHeight": "Z height at which the probe is triggered (in mm)",
938
323
  "sensors.probes[].type": {
939
- "summary": "Type of the configured probe",
940
324
  "values": {
941
- "0": "No probe",
942
- "1": "A simple unmodulated probe (like dc42's infrared probe)",
943
- "2": "A modulated probe (like the original one shipped with the RepRapPro Ormerod)",
944
- "3": "Alternate analog probe (like the ultrasonic probe)",
945
- "4": "Endstop switch (obsolete, should not be used any more)",
946
- "5": "A switch that is triggered when the probe is activated (filtered)",
947
- "6": "Endstop switch on the E1 endstop pin (obsolete, should not be used any more)",
948
- "7": "Endstop switch on Z endstop pin (obsolete, should not be used any more)",
949
- "8": "A switch that is triggered when the probe is activated (unfiltered)",
950
- "9": "A BLTouch probe",
951
- "10": "Z motor stall detection",
952
- "11": "Analog scanning probe"
325
+ "0": null,
326
+ "1": null,
327
+ "2": null,
328
+ "3": null,
329
+ "4": null,
330
+ "5": null,
331
+ "6": null,
332
+ "7": null,
333
+ "8": null,
334
+ "9": null,
335
+ "10": null,
336
+ "11": null
953
337
  }
954
338
  },
955
- "sensors.probes[].value": "Current analog values of the probe",
956
- "spindles": "List of configured CNC spindles",
957
- "spindles[].active": "Active RPM",
958
- "spindles[].canReverse": "Flags whether the spindle may spin in reverse direction",
959
- "spindles[].current": "Current RPM, negative if anticlockwise direction",
960
- "spindles[].frequency": "Frequency (in Hz)",
961
- "spindles[].idlePwm": "Idle PWM value (0..1)",
962
- "spindles[].max": "Maximum RPM",
963
- "spindles[].maxPwm": "Maximum PWM value when turned on (0..1)",
964
- "spindles[].min": "Minimum RPM when turned on",
965
- "spindles[].minPwm": "Minimum PWM value when turned on (0..1)",
966
339
  "spindles[].state": {
967
- "summary": "Current state",
968
340
  "values": {
969
- "unconfigured": "Spinde not configured",
970
- "stopped": "Spindle is stopped (inactive)",
971
- "forward": "Spindle is going forwards",
972
- "reverse": "Spindle is going in reverse"
341
+ "unconfigured": null,
342
+ "stopped": null,
343
+ "forward": null,
344
+ "reverse": null
973
345
  }
974
346
  },
975
347
  "spindles[].type": {
976
- "summary": "Spindle type",
977
348
  "values": {
978
- "enaDir": "Enable and direction",
979
- "fwdRev": "Forward and reverse"
349
+ "enaDir": null,
350
+ "fwdRev": null
980
351
  }
981
352
  },
982
- "state": "Information about the machine state",
983
- "state.atxPower": "State of the ATX power pin (if controlled)",
984
- "state.atxPowerPort": "Port of the ATX power pin or null if not assigned",
985
- "state.beep": "Information about a requested beep or null if none is requested",
986
- "state.beep.duration": "Duration of the requested beep (in ms)",
987
- "state.beep.frequency": "Frequency of the requested beep (in Hz)",
988
- "state.currentTool": "Number of the currently selected tool or -1 if none is selected",
989
- "state.deferredPowerDown": {
990
- "summary": "When provided it normally has value 0 normally and 1 when a deferred power down is pending",
991
- "remarks": "It is only available after power switching has been enabled by M80 or M81"
992
- },
993
- "state.displayMessage": "Persistent message to display (see M117)",
994
- "state.gpOut": "List of general-purpose output ports",
995
- "state.gpOut[].freq": "PWM frequency of this port (in Hz)",
996
- "state.gpOut[].pwm": "PWM value of this port (0..1)",
997
- "state.laserPwm": "Laser PWM of the next commanded move (0..1) or null if not applicable",
998
- "state.logFile": "Log file being written to or null if logging is disabled",
999
353
  "state.logLevel": {
1000
- "summary": "Current log level",
1001
354
  "values": {
1002
355
  "debug": null,
1003
356
  "info": null,
@@ -1006,132 +359,47 @@
1006
359
  }
1007
360
  },
1008
361
  "state.machineMode": {
1009
- "summary": "Current mode of operation",
1010
362
  "values": {
1011
- "FFF": "Fused Filament Fabrication (default)",
1012
- "CNC": "Computer Numerical Control",
1013
- "Laser": "Laser operation mode (e.g. laser cutters)"
363
+ "FFF": null,
364
+ "CNC": null,
365
+ "Laser": null
1014
366
  }
1015
367
  },
1016
- "state.macroRestarted": "Indicates if the current macro file was restarted after a pause",
1017
- "state.messageBox": "Details about a requested message box or null if none is requested",
1018
- "state.messageBox.axisControls": "Bitmap of the axis movement controls to show (indices)",
1019
- "state.messageBox.cancelButton": "Indicates if a cancel button is supposed to be shown",
1020
- "state.messageBox.choices": "List of possible choices (only for mode 4)",
1021
- "state.messageBox.default": "Default value (only for modes >= 4)",
1022
- "state.messageBox.max": "Maximum input value (only for modes >= 5)",
1023
- "state.messageBox.message": "Content of the message box",
1024
- "state.messageBox.min": "Minimum input value (only for modes >= 5)",
1025
368
  "state.messageBox.mode": {
1026
- "summary": "Mode of the message box to display",
1027
369
  "values": {
1028
- "0": "Display a message box without any buttons",
1029
- "1": "Display a message box with only a Close button",
1030
- "2": "Display a message box with only an Ok button which is supposed to send M292 when pressed, blocking",
1031
- "3": "Display a message box with an Ok button that sends M292 P0 or a cancel button that sends M292 P1 when clicked, blocking",
1032
- "4": "Multiple choices, blocking",
1033
- "5": "Integer value required, blocking",
1034
- "6": "Floating-point value required, blocking",
1035
- "7": "String value required, blocking"
370
+ "0": null,
371
+ "1": null,
372
+ "2": null,
373
+ "3": null,
374
+ "4": null,
375
+ "5": null,
376
+ "6": null,
377
+ "7": null
1036
378
  }
1037
379
  },
1038
- "state.messageBox.seq": {
1039
- "summary": "Sequence number of the message box",
1040
- "remarks": "This is increased whenever a new message box is supposed to be displayed"
1041
- },
1042
- "state.messageBox.timeout": "Total timeout for this message box (in ms)",
1043
- "state.messageBox.title": "Title of the message box",
1044
- "state.msUpTime": "Millisecond fraction of State.UpTime",
1045
- "state.nextTool": "Number of the next tool to be selected",
1046
- "state.pluginsStarted": "This value is set to true when the plugins have been started",
1047
- "state.powerFailScript": "Script to execute when the power fails",
1048
- "state.previousTool": "Number of the previous tool",
1049
- "state.restorePoints": "List of restore points",
1050
- "state.restorePoints[].coords": "Axis coordinates of the restore point (in mm)",
1051
- "state.restorePoints[].extruderPos": "The virtual extruder position at the start of this move",
1052
- "state.restorePoints[].fanPwm": "PWM value of the tool fan (0..1)",
1053
- "state.restorePoints[].feedRate": "Requested feedrate (in mm/s)",
1054
- "state.restorePoints[].gCommandNumber": "Which of G0/G1/G2/G3 generated the move at this restore point, or -1 if unknown",
1055
- "state.restorePoints[].ioBits": "The output port bits setting for this move or null if not applicable",
1056
- "state.restorePoints[].laserPwm": "Laser PWM value (0..1) or null if not applicable",
1057
- "state.restorePoints[].toolNumber": "The tool number that was active",
1058
- "state.startupError": "First error on start-up or null if there was none",
1059
- "state.startupError.file": "Filename of the macro where the error occurred",
1060
- "state.startupError.line": "Line number of the error",
1061
- "state.startupError.message": "Message of the error",
1062
380
  "state.status": {
1063
- "summary": "Current state of the machine",
1064
381
  "values": {
1065
- "disconnected": "Not connected to the Duet",
1066
- "starting": "Processing config.g",
1067
- "updating": "The firmware is being updated",
1068
- "off": "The machine is turned off (i.e. the input voltage is too low for operation)",
1069
- "halted": "The machine has encountered an emergency stop and is ready to reset",
1070
- "pausing": "The machine is about to pause a file job",
1071
- "paused": "The machine has paused a file job",
1072
- "resuming": "The machine is about to resume a paused file job",
1073
- "cancelling": "Job file is being cancelled",
1074
- "processing": "The machine is processing a file job",
1075
- "simulating": "The machine is simulating a file job to determine its processing time",
1076
- "busy": "The machine is busy doing something (e.g. moving)",
1077
- "changingTool": "The machine is changing the current tool",
1078
- "idle": "The machine is on but has nothing to do"
382
+ "disconnected": null,
383
+ "starting": null,
384
+ "updating": null,
385
+ "off": null,
386
+ "halted": null,
387
+ "pausing": null,
388
+ "paused": null,
389
+ "resuming": null,
390
+ "cancelling": null,
391
+ "processing": null,
392
+ "simulating": null,
393
+ "busy": null,
394
+ "changingTool": null,
395
+ "idle": null
1079
396
  }
1080
397
  },
1081
- "state.thisActive": "Shorthand for inputs[state.thisInput].active",
1082
- "state.thisInput": {
1083
- "summary": "Index of the current G-code input channel (see ObjectModel.Inputs)",
1084
- "remarks": "This is primarily intended for macro files to determine on which G-code channel it is running. The value of this property is always null in object model queries"
1085
- },
1086
- "state.time": "Internal date and time in RepRapFirmware or null if unknown",
1087
- "state.upTime": "How long the machine has been running (in s)",
1088
- "tools": "List of configured tools",
1089
- "tools[].active": "Active temperatures of the associated heaters (in C)",
1090
- "tools[].axes": {
1091
- "summary": "Associated axes. At present only X and Y can be mapped per tool.",
1092
- "remarks": "The order is the same as the visual axes, so by default the layout is [ [0], // X [1] // Y ] Make sure to set each item individually so the change events are called. Each item is a bitmap represented as an array"
1093
- },
1094
- "tools[].extruders": "Extruder drives of this tool",
1095
- "tools[].fans": {
1096
- "summary": "List of associated fans (indices)",
1097
- "remarks": "This is a bitmap represented as an array"
1098
- },
1099
- "tools[].feedForward": "Feedforward coefficients to apply to the mapped heaters during extrusions",
1100
- "tools[].feedForwardAdvance": "Time advance for applying feedforward in milliseconds",
1101
- "tools[].feedForwardPwm": "Feedforward coefficients to apply to the mapped heaters during extrusions",
1102
- "tools[].feedForwardTemp": "Temperature increase per mm/dec extrusion speed",
1103
- "tools[].filamentExtruder": "Extruder drive index for resolving the tool filament (index or -1)",
1104
- "tools[].heaters": "List of associated heaters (indices)",
1105
- "tools[].isRetracted": "True if the filament has been firmware-retracted",
1106
- "tools[].mix": "Mix ratios of the associated extruder drives",
1107
- "tools[].name": "Name of this tool",
1108
- "tools[].number": "Number of this tool",
1109
- "tools[].offsets": "Axis offsets (in mm) This list is in the same order as Move.Axes",
1110
- "tools[].offsetsProbed": "Bitmap of the probed axis offsets, one bit per axis in the same order as Move.Axes",
1111
- "tools[].retraction": "Firmware retraction parameters",
1112
- "tools[].retraction.extraRestart": "Amount of additional filament to extrude when undoing a retraction (in mm)",
1113
- "tools[].retraction.length": "Retraction length (in mm)",
1114
- "tools[].retraction.speed": "Retraction speed (in mm/s)",
1115
- "tools[].retraction.unretractSpeed": "Unretract speed (in mm/s)",
1116
- "tools[].retraction.zHop": "Amount of Z lift after doing a retraction (in mm)",
1117
- "tools[].spindle": "Index of the mapped spindle or -1 if not mapped",
1118
- "tools[].spindleRpm": "RPM of the mapped spindle",
1119
- "tools[].standby": "Standby temperatures of the associated heaters (in C)",
1120
398
  "tools[].state": {
1121
- "summary": "Current state of this tool",
1122
399
  "values": {
1123
- "off": "Tool is turned off",
1124
- "active": "Tool is active",
1125
- "standby": "Tool is in standby"
400
+ "off": null,
401
+ "active": null,
402
+ "standby": null
1126
403
  }
1127
- },
1128
- "volumes": "List of available mass storages",
1129
- "volumes[].capacity": "Total capacity of the storage device (in bytes or null)",
1130
- "volumes[].freeSpace": "How much space is still available on this device (in bytes or null)",
1131
- "volumes[].mounted": "Whether the storage device is mounted",
1132
- "volumes[].name": "Name of this volume",
1133
- "volumes[].openFiles": "Whether any file is open on this volume or null if unknown",
1134
- "volumes[].partitionSize": "Total size of this volume (in bytes or null)",
1135
- "volumes[].path": "Logical path of the storage device",
1136
- "volumes[].speed": "Speed of the storage device (in bytes/s or null if unknown)"
404
+ }
1137
405
  }