A plugin to directly add Smart Filament Sensors like BigTreeTech Smart Filament Sensor to Octoprint.


OctoPrint plugin that lets integrate Smart Filament Sensors like BigTreeTechs SmartFilamentSensor directly to RaspberryPi GPIO pins. This enables that this sensor can also be used on 3D Printers, that do not have a E0-Stop like e.g. Creality 1.1.4 Mainboard of Ender 3.

Initial work based on the Octoprint-Filament-Reloaded plugin by kontakt. Fork of Octoprint-Filament-Revolutions plugin by RomRider.

The solution for this plugin is inspired by Marlin Firmware

Required sensor

To use this plugin a Filament Sensor is needed that sends a toogling digital signal (0-1-0…) during movement.

This plugin can use the GPIO.BOARD or GPIO.BCM numbering scheme.


  • Configurable GPIO pins.
  • Support movement detection sensors, e.g. Smart-Filament-Sensor.
  • Detect if filament is not moving anymore (jammed or runout)
    • Detection based on timeout
    • Detection based on filament position returned bei M114 (unfortunately imprecise compared with firmware)
    • Alternative pausing commands if M600 is not supported by the printer


  • Install via the bundled Plugin Manager.
  • Manually using this URL: https://github.com/Royrdan/Octoprint-Smart-Filament-Sensor/archive/master.zip

After installation a restart of Octoprint is recommended.



  • Choose any free GPIO pin you for data usage, but I would recommend to use GPIO pins without special functionalities like e.g. I2C
  • Run the sensor only on 3.3V, because GPIO pins don’t like 5V for a long time

Detection time

Currently it is necessary to configure a maximum time period no filament movement was detected. This time could be depended on the print speed and maximum print line length. For the beginning - until I figured out how to estimate the best detection time - you can run a test print and messearue your maximum time and configure this value. The default value 45 seconds was estimated on max. print speed 10mm/s, for faster prints it could be smaller.

Detection distance

Version 1.1.0 of this plugin detects the movement depending on the moved distance. Therefore it is necessary to configure a distance without movement being detected. In Marlin Firmware the default value is set to 7mm. According to this the value is set for the plugin.

Sampling time

To reduce the negative effects on the print quality a sampling time must be set. Periodically M114 code is sent to the printer to receive the current filament position. This increases the load on the printer, i.e. if the sampling time is set to small the printer starts stuttering, because it cannot process all commands fast enough. I assume the value could differ according to the mainboard architecture (8-bit or 32-bit).

Octoprint - Firmware & Protocol

Since currently GCode command M600 is used to interrupt the print, it is recommended to add M600 to the setting “Pausing commands”. Since v1.1.3 there are also alternative pausing commands [M0, M1, M25, M226, M600, M601] available, for those whose printer don’t support M600.

Octoprint - GCode Scripts

If you do not want that the print is paused right on your print, I recommend to add a GCode Script for “After print job is paused”. Also adding GCode script “Before print job is resumed” might be useful, in the case you hit the heatbed or print head during the change of the filament or removing the blockage.


  • I as author of this plugin am not responsible for any damages on your print or printer. As user you are responsible for a sensible usage of this plugin.
  • Be cautious not to damage your Raspberry Pi, because of wrong voltage. I don’t take any responsibility for wrong wiring.


  • Integrated sensor connection test
  • Support of multiple sensors for multiextruders like 4 channel kraken hotend



Screenshot of the plugin in settings