Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions multiace/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -327,9 +327,19 @@ bash /tmp/multiace/uninstall_multiace.sh

Then reboot. The printer returns to stock operation.

## Fluidd Macros
## Frontend Macro Groups

All operations are available as macro buttons in Fluidd, sorted alphabetically:
multiACE organizes its controls into purpose-based groups in Fluidd and Mainsail after Klipper starts and each frontend has initialized its Moonraker database. The startup worker stops retrying a frontend after five checks when its database namespace is unavailable (about two minutes at the default interval). If you open a frontend later, reapply the layout with:

```bash
python3 /home/lava/klipper/klippy/extras/ace_macro_layout.py apply
```

Mainsail displays macro groups in Expert Mode. User-created groups and categories remain intact.

Set `macro_layout_enabled: false` in `[ace]` to disable automatic grouping. The setting is preserved across multiACE updates.

The controls include:

| Macro | Description |
|-------|-------------|
Expand Down Expand Up @@ -368,7 +378,7 @@ All operations are available as macro buttons in Fluidd, sorted alphabetically:

Use the Fluidd macros **ACEA__Switch_0..3** to switch between ACE units.

> **Note on macro names:** The macro names use letter prefixes (ACEA, ACEB, ACEC...) to ensure they appear in a logical order in Fluidd's alphabetical macro list. If you prefer different names, you can rename them anytime in `config/extended/ace.cfg`.
> **Note on macro names:** The letter prefixes (ACEA, ACEB, ACEC...) keep related controls together in Klipper and remain useful in frontend search. The frontend groups are updated from the macro names in `config/extended/ace.cfg`; changing those names means the layout will no longer recognize the renamed controls.

## How to Do Toolswaps

Expand Down
8 changes: 8 additions & 0 deletions multiace/config/extended/ace.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ filename: /home/lava/printer_data/config/extended/multiace/ace_vars.cfg
[ace]
# Expected number of physical ACE units; change this for multiple units.
ace_device_count: 1
# Set false to keep the current Fluidd and Mainsail macro layout.
macro_layout_enabled: true
# Maximum seconds to wait for expected ACE units during startup (default 20.0s).
# Set to 0.0 to disable the wait loop on single-extruder setups.
#startup_wait: 20.0
Expand Down Expand Up @@ -177,6 +179,12 @@ v2_feed_check_error_length: 254
# v2_constant_assist_speed: 0 # 0 = ACE firmware default; >0 = pin once
# v2_assist_confirm_time: 0.5 # s a reverse must hold before unwind flip

[ace_macro_layout]
moonraker_url: http://127.0.0.1:7125
request_timeout: 5
watch_window: 1800
poll_interval: 30

[gcode_macro SET_ACE_MODE]
description: Switch mode. Usage: SET_ACE_MODE MODE=normal|multi|head [HEAD=n]
gcode:
Expand Down
6 changes: 5 additions & 1 deletion multiace/install_multiace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ log "Klipper kinematics: $KINEMATICS_DIR"
log "Config dir: $CONFIG_DIR"
for f in \
"klipper/extras/ace.py" \
"klipper/extras/ace_macro_layout.py" \
"klipper/extras/filament_feed_ace.py" \
"klipper/extras/filament_switch_sensor_ace.py" \
"klipper/extras/ace_bg_swap.py" \
Expand Down Expand Up @@ -141,6 +142,7 @@ if [ -f "$CONFIG_DIR/ace.cfg" ] && [ ! -f "$CONFIG_DIR/ace_pre_multiace.cfg" ];
fi
log "Installing multiACE files..."
cp "$INSTALL_DIR/klipper/extras/ace.py" "$EXTRAS_DIR/ace.py"
cp "$INSTALL_DIR/klipper/extras/ace_macro_layout.py" "$EXTRAS_DIR/ace_macro_layout.py"
cp "$INSTALL_DIR/klipper/extras/ace_protocol.py" "$EXTRAS_DIR/ace_protocol.py"
cp "$INSTALL_DIR/klipper/extras/ace_protocol_v1.py" "$EXTRAS_DIR/ace_protocol_v1.py"
cp "$INSTALL_DIR/klipper/extras/ace_protocol_v2.py" "$EXTRAS_DIR/ace_protocol_v2.py"
Expand All @@ -158,7 +160,7 @@ cp "$INSTALL_DIR/klipper/extras/ace_rc522.py" "$EXTRAS_DIR/ace_rc522.py"
# Gen 1 tag tunnel - helper module imported lazily by ace.py; used only on
# ACE Pro units with the tunnel firmware and [ace] gen1_tag_tunnel on.
cp "$INSTALL_DIR/klipper/extras/ace_gen1_tunnel.py" "$EXTRAS_DIR/ace_gen1_tunnel.py"
chmod 644 "$EXTRAS_DIR/ace.py" "$EXTRAS_DIR/ace_protocol.py" "$EXTRAS_DIR/ace_protocol_v1.py" "$EXTRAS_DIR/ace_protocol_v2.py" "$EXTRAS_DIR/filament_feed_ace.py" "$EXTRAS_DIR/filament_switch_sensor_ace.py" "$EXTRAS_DIR/ace_bg_swap.py" "$EXTRAS_DIR/ace_tipform.py" "$EXTRAS_DIR/ace_rc522.py" "$EXTRAS_DIR/ace_gen1_tunnel.py"
chmod 644 "$EXTRAS_DIR/ace.py" "$EXTRAS_DIR/ace_macro_layout.py" "$EXTRAS_DIR/ace_protocol.py" "$EXTRAS_DIR/ace_protocol_v1.py" "$EXTRAS_DIR/ace_protocol_v2.py" "$EXTRAS_DIR/filament_feed_ace.py" "$EXTRAS_DIR/filament_switch_sensor_ace.py" "$EXTRAS_DIR/ace_bg_swap.py" "$EXTRAS_DIR/ace_tipform.py" "$EXTRAS_DIR/ace_rc522.py" "$EXTRAS_DIR/ace_gen1_tunnel.py"
log " Klipper extras installed"
cp "$INSTALL_DIR/klipper/kinematics/extruder_ace.py" "$KINEMATICS_DIR/extruder_ace.py"
chmod 644 "$KINEMATICS_DIR/extruder_ace.py"
Expand Down Expand Up @@ -396,6 +398,8 @@ verify_match() {
}
verify_match "$INSTALL_DIR/klipper/extras/ace.py" \
"$EXTRAS_DIR/ace.py" "ace.py"
verify_match "$INSTALL_DIR/klipper/extras/ace_macro_layout.py" \
"$EXTRAS_DIR/ace_macro_layout.py" "ace_macro_layout.py"
verify_match "$INSTALL_DIR/klipper/extras/ace_protocol.py" \
"$EXTRAS_DIR/ace_protocol.py" "ace_protocol.py"
verify_match "$INSTALL_DIR/klipper/extras/ace_protocol_v1.py" \
Expand Down
3 changes: 3 additions & 0 deletions multiace/klipper/extras/ace.py
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,9 @@ def __init__(self, config):
self.reactor = self.printer.get_reactor()
self.gcode = self.printer.lookup_object('gcode')
self._name = config.get_name()
# Read this here too so [ace] accepts the option if
# [ace_macro_layout] is removed from the config.
config.getboolean('macro_layout_enabled', True)
self.send_time = None
self.ace_dev_fd = None
self.heartbeat_timer = None
Expand Down
Loading
Loading