Stealthchanger / Tapchanger Tool error

Basic Information:

Printer Model: Voron 2.4 R2 full metal
MCU / Printerboard: BTT Octopus
Host / SBC: Raspberry Pi 3
klippy.log
config.txt (30.7 KB)
klippy.log (241.9 KB)

Hi,

I´m trying for hours now to get that toolchanger working. I´m using Tap and I want the toolchanger to detect which Head is mounted through the specific endstop. The first thing is, when one probe is mounted and the other one is not, I get the following output:

23:59
Multiple probes not triggered:

from:

23:59
DETECT_ACTIVE_TOOL_PROBE

So both having the same endstop status? When trying to activate a tool to check the endstops for example, I get this error:

Internal error on command:"SELECT_TOOL"
Traceback (most recent call last):
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 190, in cmd_SELECT_TOOL
    self.select_tool(gcmd, tool, restore_axis)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 289, in select_tool
    self.initialize(self.detected_tool)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 265, in initialize
    self.run_gcode('initialize_gcode', self.initialize_gcode, extra_context)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 584, in run_gcode
    template.run_gcode_from_command(context)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 74, in run_gcode_from_command
    self.gcode.run_script_from_command(self.render(context))
  File "/home/pi/klipper/klippy/gcode.py", line 227, in run_script_from_command
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 122, in cmd_SET_ACTIVE_TOOL_PROBE
    self.set_active_probe(self.tool_probes[probe_nr])
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 79, in set_active_probe
    self.mcu_probe.set_active_mcu(tool_probe.mcu_probe)
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 212, in set_active_mcu
    self.probing_move = self.active_mcu.probing_move
AttributeError: 'ProbeEndstopWrapper' object has no attribute 'probing_move'
Internal error on command:"SELECT_TOOL"
Internal error on command:"T0"
Traceback (most recent call last):
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 195, in cmd
    self.template.run_gcode_from_command(kwparams)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 74, in run_gcode_from_command
    self.gcode.run_script_from_command(self.render(context))
  File "/home/pi/klipper/klippy/gcode.py", line 227, in run_script_from_command
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 190, in cmd_SELECT_TOOL
    self.select_tool(gcmd, tool, restore_axis)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 289, in select_tool
    self.initialize(self.detected_tool)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 265, in initialize
    self.run_gcode('initialize_gcode', self.initialize_gcode, extra_context)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 584, in run_gcode
    template.run_gcode_from_command(context)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 74, in run_gcode_from_command
    self.gcode.run_script_from_command(self.render(context))
  File "/home/pi/klipper/klippy/gcode.py", line 227, in run_script_from_command
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 122, in cmd_SET_ACTIVE_TOOL_PROBE
    self.set_active_probe(self.tool_probes[probe_nr])
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 79, in set_active_probe
    self.mcu_probe.set_active_mcu(tool_probe.mcu_probe)
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 212, in set_active_mcu
    self.probing_move = self.active_mcu.probing_move
AttributeError: 'ProbeEndstopWrapper' object has no attribute 'probing_move'
Internal error on command:"T0"
Internal Error on WebRequest: gcode/script
Traceback (most recent call last):
  File "/home/pi/klipper/klippy/webhooks.py", line 256, in _process_request
    func(web_request)
  File "/home/pi/klipper/klippy/webhooks.py", line 436, in _handle_script
    self.gcode.run_script(web_request.get_str('script'))
  File "/home/pi/klipper/klippy/gcode.py", line 230, in run_script
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 195, in cmd
    self.template.run_gcode_from_command(kwparams)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 74, in run_gcode_from_command
    self.gcode.run_script_from_command(self.render(context))
  File "/home/pi/klipper/klippy/gcode.py", line 227, in run_script_from_command
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 190, in cmd_SELECT_TOOL
    self.select_tool(gcmd, tool, restore_axis)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 289, in select_tool
    self.initialize(self.detected_tool)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 265, in initialize
    self.run_gcode('initialize_gcode', self.initialize_gcode, extra_context)
  File "/home/pi/klipper/klippy/extras/toolchanger.py", line 584, in run_gcode
    template.run_gcode_from_command(context)
  File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 74, in run_gcode_from_command
    self.gcode.run_script_from_command(self.render(context))
  File "/home/pi/klipper/klippy/gcode.py", line 227, in run_script_from_command
    self._process_commands(script.split('\n'), need_ack=False)
  File "/home/pi/klipper/klippy/gcode.py", line 212, in _process_commands
    handler(gcmd)
  File "/home/pi/klipper/klippy/gcode.py", line 140, in <lambda>
    func = lambda params: origfunc(self._get_extended_params(params))
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 122, in cmd_SET_ACTIVE_TOOL_PROBE
    self.set_active_probe(self.tool_probes[probe_nr])
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 79, in set_active_probe
    self.mcu_probe.set_active_mcu(tool_probe.mcu_probe)
  File "/home/pi/klipper/klippy/extras/tool_probe_endstop.py", line 212, in set_active_mcu
    self.probing_move = self.active_mcu.probing_move

If I´m now inverting one pin or just pull out the mounted extruder before startup I get the

Internal error during connect: 'ProbeEndstopWrapper' object has no attribute 'probing_move'
Error.

I really dont know what to do anymore… Even GPT Deepsearch wasnt helpful anymore.

It might be best to revert to the author of the modifications. They are likely causing the error.

Since there are people running this plugin without any problems, I’m still pretty sure that my config is the error. I just don’t know where to ask to be honest…

I’m pretty sure this was broken by this refactor: Refactor of probe ProbeSessionHelper into additional helpers by KevinOConnor · Pull Request #6879 · Klipper3d/klipper · GitHub

Unfortunately, the plugin is going to have to be updated for this change.

In the meantime it’s probably best to roll Klipper back to the commit before these changes were merged.

(I think I saw this in the Voron Facebook group too)