Integrating a Keenovo silicone heater into an EZABL system

You are here:
< Back

This is a community member article, his contact info is at the bottom of this page. This is provided AS-IS and there is no support or warranty given from TH3D.

The easiest way to control an AC bed if you have basic electrical skills and common sense is to use a SSR (like these) in place of the controller to let the printer directly control the AC bed heater. If you use a high quality one like the one linked this will work even with the EZABL or other ABL sensor solution with no issues. The SSR simply switches the line of your AC power and uses the existing DC wires that went to your stock bed to control if it is on or off. There is a pinout image on our Mager SSR product page.

The Issue:

After waiting for more than 45 minutes for my stock CR-10 heat bed to approach 85 degrees Celsius I decided something had to be done. Based on some research and consulting with Tim I decided to install a SSR controlled Keenovo heater. For those tempted to do the same here’s a link to an informative how to article:

I did make a few changes: – first unlike the poster I installed the SSR’s heat sink.  Our printers potentially run nonstop for days why skimp on safety when isn’t absolutely necessary.  Second, I modified the layout/circuit to allow the 4 pin aviation leads from the printer’s control box and the heater to plug into my SSR’s external enclosure.  This allows the SSR’s to be quickly disconnected from either the control box or the printer.

Note from Tim: The SSR is optional here and just added so he can control temp with the Printer board. You can still use the below guide to control the standalone Keenovo controller.

Now with the Keenovo heater installed there is no issue heating the bed to 85 degrees and beyond. It took a mere 124 secs to heat the bed from 17C to 85C.  To achieve this impressive performance, the heater is powered by the AC mains voltage.   However, the proximity of this AC current interferes with the operation of the EZABL sensor.   The mains AC current significantly increases the noise in the EZABL’s capacitive sensor making it inaccurate.  So much so that in my case just homing the Z axis would cause the nozzle to crash into the bed.

The Solution:

To solve this issue the AC power to the heater has to be turned off during homing and bed leveling at the start of a print. This can be done manually, but is obviously far from ideal. A better way would be to programmatically control this function by updating the print’s GCODE start up scripts with the appropriate commands.

The Setup:

I use Octoprint (1.3.6) running on a Raspberry Pi 3 to control/network my printer.  To enable and disable the power to the heater I added a TP-Link HSH-100 Smartplug.

This IoT Smartplug can be instructed to turn on/off AC power over the Internet or your wifi.

The Implementation:

After doing some research, my first attempt at programmatically solving this issue was installing the Octoprint TP-Link Smartplug plugin and sending M81 “Turn off the power supply” command from my gcode startup script.

This didn’t work as advertised.  The TP-Link plugin did instruct the Smartplug to turn off the heater power, however, the Marlin software ( also shut down after sending the M81 command.  After the M81 is issued the hotend and bed set temperatures are cleared and read 0 and the LCD display reads “TH3D EZABL Off” effectively ending the print.

The ultimate solution was to use the Octoprint GCODE system commands plugin to instruct the Pi to use the appropriate Linux shell script commands to control the heater’s Smartplug.

Here are the steps.

  1. Update your slicer’s GCODE starting script as follows.
    1. OCTO10 ; heat bed off
      G28 ; home all axes
      G29 ; auto level
      OCTO11 ; heat bed onNote, if you home your axes with the AC power to the bed you can crash your nozzle into the bed!!
  2. Install the Octoprint GCODE system commands plugin
  3. Configure the plugin as follows
    1. OCTO10 /usr/local/bin/heatbed_off
    2. OCTO11 /usr/local/bin/heatbed_on
  1. Install the shell script code on the Pi.
    1. Note this shell script code is pretty standard bash shell scripts and will probably work on any Linux system. I’m using the Pi so the following is based on that installation.
    2. Cut the shell script code from
    3. Login into the Pi and run: “sudo nano /usr/local/bin/” and paste in the script.
      Note, there is an issue concerning binary characters in the status payload that I patched, but this was probably unnecessary since we don’t care about the plug status
    4. Create the heater on script
      • sudo nano /usr/local/bin/heatbed_on
      • Paste in
        /usr/local/bin/ <heatbed Smartplug IP address> 9999 on
    5. Repeat with the appropriate changes to create a similar heatbed_off command
    6. Change the permissions on the files just created.
      • sudo chmod 755 /usr/local/bin/ /usr/local/bin/heatbed_on /usr/local/bin/heatbed_off
    7. Test the on/off commands to see if they work by running
      • /usr/local/bin/heatbed_on and /usr/local/bin/heatbed_off
      • Both commands should indicate that they succedded and also turn the heatbed Smartplug on and off!

This completes the set up.  Now when you start a print the Smartplug will switch off the power to heating bed before it homes the axes and does the bed level calibration. Then it will switch it back on before continuing (in my case priming the extruder).

I hope this helps.

Send questions/comments to cpdouglas_at_hotmail_dot_com

Happy Printing!