Cookbook: Custom Controls

This node's purpose is to collect useful custom controls you can add to OctoPrint's configuration in the controls section to fulfill certain tasks. Feel free to contribute, this is a wiki node that any member with a trust level of 1 or higher can edit!

Fan control

Adds two controls, one parametric control for enabling the fan which also allows you to specify the speed as a value between 0 (off) and 255 (full speed), and one simple button for turning the fan off.

- name: Enable Fan
  type: parametric_command
  command: M106 S%(speed)s
  input:
    - name: Speed (0-255)
      parameter: speed
      default: 255
- name: Disable Fan
  type: command
  command: M107

ATX Power Supply Control

Turn on and off your ATX power supply.

  - name: PSU
    type: section
    children:
      - name: Power On
        type: command
        command: M80
      - name: Power Off
        type: command
        command: M81

Print speed and flow control

Use these two adjust speed and flow control during printing.

  - name: Printing Controls
    type: section
    children: 
    - command: M220 S%(speed)s
      name: Printer Speed
      type: parametric_command
      input: 
      - name: (0-200%)
        parameter: speed
        default: 100
    - command: M221 S%(flow)s
      name: Flow rate
      type: parametric_command
      input: 
      - name: (0-200%)
        parameter: flow
        default: 100

Get current position

Adds a command that queries the current position of the print head and extruder from the printer, parses the corresponding response and displays it in the UI.

- name: Get Position
  type: feedback_command
  command: M114
  regex: "X:([0-9.-]+)Y:([0-9.-]+)Z:([0-9.-]+)E:([0-9.-]+)"
  template: "Position: X={0}, Y={1}, Z={2}, E={3}"

A few more details:
"[...]
feedback_command: Like command, but you can defined a regular expression that will be checked against messages sent by the printer and allow displaying the extracted groups in the UI, e.g. "M114" ->
"ok C: X:10.00 Y:3.20 Z:5.20 E:1.24" -> "Current position is (10.00, 3.20, 5.20), E = 1.24". Uses Python's "str.format" method to merge the matched sub groups from the given regex ("(...)") into the template format string.
[...]"

Calibration controls for delta printers.

These controls allow you to quickly move between the three points used during delta calibration. Simply move to the desired point, jog the nozzle down (either with an LCD controller or octoprint), adjust your end stops, rinse and repeat.

- name: Calibrate
  type: section
  children:
  - name: Move Z
    type: parametric_commands
    commands:
    - G28
    - G0 Z%(height)s F1500
    input:
    - default: 5
      name: Height
      parameter: height
  - name: Zero Z axis
    type: parametric_commands
    commands:
    - G28
    - G0 X0 Y90 Z%(height)s F1500
    input:
    - default: 5
      name: G0 X0 Y90 Z
      parameter: height
  - name: Zero Y Axis
    type: parametric_commands
    commands:
    - G28
    - G0 X77.94 Y-45 Z%(height)s F1500
    input:
    - default: 5
      name: G0 X77.94 Y-45 Z
      parameter: height
  - name: Zero X Axis
    type: parametric_commands
    commands:
    - G28
    - G0 X-77.94 Y-45 Z%(height)s F1500
    input:
    - default: 5
      name: G0 X-77.94 Y-45 Z
      parameter: height

If you want to use these to also jog up and down to a specific location you can remove the G28 command.

Updating Repetier EEPROM values.

There are three parametric commands here. The first is for updating the XYZ max length. The second will change any value as long as you know the type, location and desired value. Finally, the last set can be used to update PID values.

- children:
  - commands:
    - M206 T3 P145 X%(maxLength)s
    - M206 T3 P149 X%(maxLength)s
    - M206 T3 P153 X%(maxLength)s
    - M500
    - G28
    input:
    - default: null
      name: Max Z height
      parameter: maxLength
    name: Set XYZ max length
    type: parametric_commands
  - commands:
    - M206 T%(type)s P%(location)s X%(value)s
    - M500
    - G28
    input:
    - default: null
      name: Type
      parameter: type
    - default: null
      name: Location
      parameter: location
    - default: null
      name: Value
      parameter: value
    name: EEPROM
    type: parametric_commands
  - commands:
    - M206 T3 P218 X%(pgain)s
    - M206 T3 P222 X%(igain)s
    - M206 T3 P226 X%(dgain)s
    - M500
    input:
    - default: null
      name: P-gain
      parameter: pgain
    - default: null
      name: I-gain
      parameter: igain
    - default: null
      name: D-gain
      parameter: dgain
    name: Update PID
    type: parametric_commands

These controls were written for a delta printer using Repetier firmware on a rambo board. Please keep that in mind if you use them.

Filament Change

Establishes a section to swap out filament easily.

- name: Filament Change
  children:
  - name: Filament Out
    type: command
    commands:
    - G91
    - G1 E-600 F600
    - G90
  - name: Filament In
    type: command
    commands:
    - G91
    - G1 E550 F600
    - G90
  - name: Finish Load
    type: command
    commands:
    - G91
    - G1 E50 F300
    - G90
    - G92 E0

Details: G1 Ennn is dependent on how long your path from extruder to hotend is in mm. Fnnn is feedrate for the extruder, which is in mm/min. It's handy to have this value be a higher number than you normally use for the Extrude/Retract buttons in OctoPrint to expedite filament swap. The Finish Load button is intended to allow for manipulation of a long bowden tube at the very end where the filament may jam up if not positioned accurately, and I'm not sure the G92 E0 is strictly necessary but I've found it helpful for doing other tweaks with the extrude/retract function in the terminal. You can easily do away with the whole Finish Load section if you're confident that your filament is not prone to jamming at the juncture of whatever feed tube you may have installed. Add "layout: horizontal" without the quotes below Filament Change to modify the menu appearance. Happy tweaking and printing!

2 Likes

Hello,

using the custom controls, I can fit in specific homing buttons for my 2+2 foam cutter ( X/Y and U/V secondary linear access).
Can I remove the default control buttons anywhere? I looke quite a bit in the forum, but could not get that answer.
I would have one custom control tab, with homing XY, homing UV, Guillotine to cut vertically the foambock, possibly also an horizontal guillotine, as well as a wire heat setting.
I have no Z axis, and no E either.

Thanks for the help!

only way I can think of is doing a plugin that replaces the control tab completely, or potentially a simple jquery call to remove the elements.

$('div.jog-panel').remove();

Hello. Thank you for your reply .

What I just need is an empty control tab but with the custom control plugin still working.

I am a « c » guy so this is too complicated for me to run those scripts…

I will keep the default control tab and design the custom one below